Hướng dẫn lập trình ESP8266 trên Ubuntu

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 😀

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