Lập trình ESP8266 trên Ubuntu với nonos SDK và RTOS SDK như thế nào ? Mình xin giới thiệu với các bạn các bước cơ bản để có thể cấu hình môi trường để có thể làm việc với ESP8266 trên ubuntu. Trong bài viết này sẽ có 2 phần, phần đầu tiên mình sẽ hướng dẫn các bạn có thể làm mọi bước để có thể cài đặt được một môi trường để lập trinh cho ESP8266, phần 2 sẽ là tải môi trường mình đã làm sẵn về build lại để đỡ mất thời gian.

Chuẩn bị

Trước khi bắt đầu thì mình cần có một số đồ nghề sau:

  • ESP8266, mình dùng kit NodeMCU
  • Dây cáp.
  • Máy tính xài hệ điều hành Ubuntu

Cài đặt

Với ESP8266/ESP32 đều có thể cài thông qua 1 số bước cơ bản với Arduino trên win, cách này khá đơn giản và dễ làm, tuy nhiên cái gì dễ quá thì các bạn thường không thích, nên đành tăng độ khó lên một chút để tăng thêm sự hấp dẫn.

Bước 1: Cài các tool cần thiết

Nếu bạn dùng bản 32 bit

$ sudo apt-get install git autoconf build-essential gperf bison flex texinfo libtool libncurses5-dev wget gawk libc6-dev-i386 python-serial libexpat-dev help2man zip unzip libtool-bin
$ mkdir -p $HOME/ESP8266-Toolchain-217
$ mkdir -p $HOME/ESP8266-Toolchain-217/compiler
$ mkdir -p $HOME/ESP8266-Toolchain-217/sdk

Nếu bạn dùng bản 64 bit

$ sudo apt-get install git autoconf build-essential gperf bison flex texinfo libtool libncurses5-dev wget gawk libc6-dev-amd64 python-serial libexpat-dev
$ mkdir -p $HOME/ESP8266-Toolchain-217
$ mkdir -p $HOME/ESP8266-Toolchain-217/compiler
$ mkdir -p $HOME/ESP8266-Toolchain-217/sdk

Bước 2: Cài đặt Xtensa crosstool-NG

$ sudo apt-get install libtool-bin help2man python python2.7-dev
$ cd $HOME/ESP8266-Toolchain-217/compiler
$ git clone https://github.com/jcmvbkbc/crosstool-NG.git
$ cd crosstool-NG
$ ./bootstrap && ./configure --prefix=`pwd` && make && $ make install
$ ./ct-ng xtensa-lx106-elf
$ unset LD_LIBRARY_PATH
$ ./ct-ng build
$ PATH=$PWD/builds/xtensa-lx106-elf/bin:$PATH

Quá trình cài phải build khá lâu, mất khoảng 20 phút nên bạn chịu khó chờ nhé.
Kết quả

Kiểm tra lại compiler đã được cài đặt chưa bằng lệnh

$ xtensa-lx106-elf-gcc -v
Thread model: single gcc version 4.8.2 (crosstool-NG 1.20.0)

Bước 3: Cập nhật thư viện cho Xtensa

$ cd $HOME/ESP8266-Toolchain-217/compiler/crosstool-NG/builds/xtensa-lx106-elf/xtensa-lx106-elf/sysroot/usr
$ sudo wget -O lib/libc.a https://github.com/esp8266/esp8266-wiki/raw/master/libs/libc.a
$ sudo wget -O lib/libhal.a https://github.com/esp8266/esp8266-wiki/raw/master/libs/libhal.a
$ sudo wget -O include.tgz https://github.com/esp8266/esp8266-wiki/raw/master/include.tgz
$ sudo tar -xvzf include.tgz

Bước 4: Cài đặt Espressif NonOS SDK và RTOS SDK

Để đơn giản và nhanh chóng nhất thì bạn có thể tải bản SDK mình đã nén sẵn tại link sau đây ,sau khi tải về giải nén cho vào thư mục sdk nằm trong ESP8266-Toolchain-217.

Bước 5: Tải esptool

$ cd $HOME/ESP8266-Toolchain-217
$ git clone https://github.com/themadinventor/esptool.git

Bước 6: Tải Putty

Thông thường trên win sẽ có phần mềm terminal là teraterm, ở ubuntu thì mình dùng putty, các bạn có thể tải bằng lệnh

$ sudo apt-get install putty

Lập trình chương trình đầu tiên

Coi như bước chuẩn bị ban đầu đã xong, mình có tham khảo một số cách build và flash chương trình của các hướng dẫn từ nước ngoài thì cũng khá là phức tạp mà không kế thừa được cho các dự án của cá nhân, nên mình tận dụng luôn chương trình mẫu của lão TuanPM có chỉnh sửa lại một chút. Tất cả các ví dụ này các bạn có thể clone về bằng lệnh

$ cd $HOME
$ git clone https://github.com/hocarm/ESP8266-NonOS-RTOS-Example.git

Biên dịch

Ở đây có 3 ví dụ mẫu, với từng ví dụ thì các bạn gõ lệnh như sau

esp8266-nonos-blink

$ cd $HOME/ESP8266-Toolchain-217/ESP8266-NonOS-RTOS-Example/esp8266-nonos-blink
$ export PATH=$HOME/ESP8266-Toolchain-217/compiler/crosstool-NG/builds/xtensa-lx106-elf/bin:$PATH
$ make

esp8266-nonos-helloword

$ cd $HOME/ESP8266-NonOS-RTOS-Example/esp8266-nonos-helloword
$ export PATH=$HOME/ESP8266-Toolchain-217/compiler/crosstool-NG/builds/xtensa-lx106-elf/bin:$PATH
$ make

esp8266-rtos-basic

$ cd $HOME/ESP8266-NonOS-RTOS-Example/esp8266-rtos-basic
$ export PATH=$HOME/ESP8266-Toolchain-217/compiler/crosstool-NG/builds/xtensa-lx106-elf/bin:$PATH
$ make

Nếu bạn make thành công sẽ có thông báo kiểu như sau

/home/sc/ESP8266-Toolchain-217/esptool/esptool.py elf2image main.out -o main
esptool.py v2.1-beta1
Creating image for ESP8266…

Flash

Bước trên chỉ là xong make (giống với bước build project), để flash nạp vào ESP8266 thì cần dùng lệnh sau cho tất cả các project

$ make flash
Chip is ESP8266
Uploading stub…
Running stub…
Stub running…
Changing baud rate to 480600
Changed.
Configuring flash size…
Flash params set to 0x0240
Compressed 29040 bytes to 21689…
Wrote 29040 bytes (21689 compressed) at 0x00000000 in 0.5 seconds (effective 475.8 kbit/s)…
Hash of data verified.
Compressed 193956 bytes to 143445…
Wrote 193956 bytes (143445 compressed) at 0x00010000 in 3.2 seconds (effective 480.8 kbit/s)…
Hash of data verified.
Compressed 128 bytes to 75…
Wrote 128 bytes (75 compressed) at 0x003fc000 in 0.0 seconds (effective 166.9 kbit/s)…
Hash of data verified.
Leaving…
Hard resetting…

Monitor

Sau khi nạp chương trình xong để kiểm tra kết quả ta dùng putty bằng cách mở biểu tượng putty hoặc gõ lệnh

$ putty

Thường thì NodeMCU sau khi cắm vào máy tính dùng Ubuntu sẽ có tên là /dev/ttyUSB0, nếu không đúng bạn có thể tìm tên bằng lệnh lsusb

Chọn cổng và tốc độ baud 115200 và flash firmware của ví dụ esp8266-nonos-helloword sau đó quan sát kết quả

Kết quả

Với esp8266-nonos-helloword ta sẽ thấy chuỗi Hello world! và thông tin của chip như hình trên

Với esp8266-nonos-blink thì sẽ là LED trên kit NodeMCU chớp tắt.

Tạm kết

Vậy là xong được các bước để cấu hình môi trường ban đầu để lập trình với ESP8266 trên Ubuntu theo 2 SDK có sẵn là NONOS và RTOS. Để phát triển dự án của mình các bạn có thể tham khảo thêm các ví dụ ở mục Examples trong 2 SDK. Nếu còn trục trặc bạn có thể hỏi tại đây mình sẽ giúp bạn 😀

Tham khảo [1][2][3][4][5]