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.
Update 2021: Nếu bạn có vấn đề với build compiler thì bạn có thể sử dụng cách sau
Cài package
# Ubuntu and Debian
sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-serial
# Neu python-serial loi thi dung lenh sau cai dat $ pip install pyserial
# CentOS 7
sudo yum install gcc git wget make ncurses-devel flex bison gperf python pyserial
# Arch
sudo pacman -S --needed gcc git make ncurses flex bison gperf python2-pyserial
Tải toolchain trực tiếp
Với bản 64-bit Linux:
https://dl.espressif.com/dl/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz
Với bản 32-bit Linux:
https://dl.espressif.com/dl/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-linux-i686.tar.gz
Tải file trên và giải nén vào thư mục ~/esp
:
mkdir -p ~/esp
cd ~/esp
wget https://dl.espressif.com/dl/xtensa-lx106-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz
tar -xzf xtensa-lx106-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz
Toolchain sẽ được giải nén vào thưc mục ~/esp/xtensa-lx106-elf/
, bạn cần set path cho nó để sử dụng, sau đó check lại version sẽ thấy kết quả
export PATH="$PATH:$HOME/esp/xtensa-lx106-elf/bin"
alias get_lx106='export PATH="$PATH:$HOME/esp/xtensa-lx106-elf/bin"'
printenv PATH
xtensa-lx106-elf-gcc -v
# Result:
# Thread model: posix
# gcc version 8.4.0 (crosstool-NG esp-2020r3-49-gd5524c1)
Tải và giải nén sdk, lưu ý là code sample ở đây chỉ dùng với sdk trong link drive thôi nha anh em, với sdk mới thì build sẽ lỗi, và hãng họ khuyến khích là nên chuyển hết sang rtos chứ đừng code bằng nonos nữa, anh em có thể dọc thêm tại đây.
cd esp
unzip NONOS-RTOS-SDK.zip
# Tai thu vien libhal.a de build duoc RTOS basic
cd ~/esp/xtensa-lx106-elf/xtensa-lx106-elf/lib
wget https://github.com/esp8266/esp8266-wiki/raw/master/libs/libhal.a
Bước 5: Tải esptool
cd ~/esp
git clone https://github.com/espressif/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
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 ESP8266-NonOS-RTOS-Example/esp8266-nonos-blink
make
esp8266-nonos-helloword
cd ESP8266-NonOS-RTOS-Example/esp8266-nonos-helloword
make
esp8266-rtos-basic
cd ESP8266-NonOS-RTOS-Example/esp8266-rtos-basic
make
Nếu bạn make thành công sẽ có thông báo kiểu như sau
/home/sc/esp/esptool/esptool.py elf2image build/esp8266-rtos-app.out -o firmware/esp8266-rtos-app
esptool.py v3.3-dev
Creating esp8266 image...
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 😀