Tema ini menjelaskan cara memporting SDK untuk C 4.0 ke papan pengembangan ESP8266 dan menggunakan demo untuk terhubung ke Alibaba Cloud IoT Platform.
Persiapan
Untuk memporting SDK, Anda perlu menyiapkan item berikut:
- Papan pengembangan. Papan yang digunakan dalam topik ini adalah ESP-LAUNCHER, yaitu papan demo resmi ESP8266EX_Demo_Board.
- Kabel USB.
- Komputer dengan sistem operasi Windows, Linux, atau macOS. Sistem operasi utama untuk pengembangan adalah macOS.
Menyiapkan lingkungan pengembangan
Disarankan untuk membaca ESP8266 RTOS Software Development Kit terlebih dahulu untuk mempercepat penyiapan lingkungan pengembangan. Ikuti langkah-langkah berikut untuk menyiapkan lingkungan macOS:
- Install required software
Jalankan perintah
sudo easy_install pipuntuk menginstal sistem pip.Jalankan perintah
sudo pip install pyserialuntuk menginstal modul pySerial. - Clone the ESP-IDF official repository
cd ~ mkdir esp && cd esp git clone git@github.com:espressif/ESP8266_RTOS_SDK.git -b release/v3.3Setelah selesai mengunduh, jalankan skrip
export IDF_PATH=~/esp/ESP8266_RTOS_SDKuntuk mengonfigurasi jalur SDK IoT Development Framework (IDF).null- Demo ini menggunakan cabang
release/v3.3, dengan ID commitfd785ab0c50009ab93503ae785814136f6d1009b. - Espressif IoT Development Framework (ESP-IDF) telah digunakan di ESP8266_RTOS_SDK V3.0 dan versi setelahnya. Anda dapat memodifikasi ESP8266_RTOS_SDK dari versi sebelum V3.0 dan menggunakannya sesuai panduan ini.
- Demo ini menggunakan cabang
- Install the toolchain and compilation tool
Unduh secara manual paket toolchain macOS dan dekompres ke direktori
.mkdir -p ~/esp cd ~/esp tar -xzf ~/Downloads/xtensa-lx106-elf-macos-1.22.0-100-ge567ec7-5.2.0.tar.gzToolchain untuk sistem operasi lainnya tersedia di halaman ESP8266_RTOS_SDK di GitHub.
Konfigurasikan jalur sistem untuk toolchain.
export PATH=$PATH:$HOME/esp/xtensa-lx106-elf/binJalankan skrip berikut untuk menambahkan konfigurasi semua variabel lingkungan ke file
:set_esp8266 () { exprot IDF_PATH=$HOME/esp/ESP8266_RTOS_SDK export PATH=$PATH: $HOME/esp/xtensa-lx106-elf/bin } - Connect to the development board
- Instal driver USB. Driver port serial yang diperlukan oleh driver USB ESP-LAUNCHER dapat diperoleh dari FTDI.
- Dapatkan nama port serial. Jalankan perintah
ls /dev/cu.*untuk menanyakan nama port pada macOS. Nama port serial dalam demo ini adalah/dev/cu.usbserial-AH06UHLH.
- Configure, compile, and flash the project, and monitor the serial port
- Semua konfigurasi harus dilakukan di jalur proyek. Pertama-tama, jalankan skrip
cd examples/wifi/simple_wifi/untuk masuk ke direktori examples/wifi/simple_wifi/. - Di ESP-IDF, jalankan
make menuconfiguntuk mengonfigurasi proyek. Untuk informasi lebih lanjut, lihat metode porting berikut. - Setelah konfigurasi selesai, jalankan perintah
make alluntuk mengompilasi firmware. - Setelah kompilasi selesai, jalankan perintah
make flashuntuk mem-flash firmware. Pastikan papan pengembangan berada dalam mode unduhan. - Setelah proyek di-flash, jalankan perintah
make monitoruntuk memantau port serial. Pastikan papan pengembangan berada dalam mode kerja.
Sekarang, Anda telah menyiapkan lingkungan pengembangan ESP8266 dan mengompilasi serta mem-flash demo stasiun wifi.
- Semua konfigurasi harus dilakukan di jalur proyek. Pertama-tama, jalankan skrip
- Port SDK for C 4.0
Proses memporting SDK untuk C 4.0 mencakup impor kode SDK dan konfigurasi file port SDK serta sistem kompilasi.
Direktori
portfilesdari SDK berisi portfile untuk ESP8266. Oleh karena itu, Anda hanya perlu mengimpor kode sumber SDK dan mengonfigurasi sistem kompilasi untuk menyelesaikan porting SDK.Disarankan untuk membaca Build System dari IDF untuk mempelajari proses porting. Anda harus memahami istilah berikut tentang IDF:
- project: Ini adalah direktori yang berisi semua file sumber dan file konfigurasi yang digunakan untuk membangun aplikasi.
- components: Mereka adalah bagian modular dari kode mandiri, yang dikompilasi menjadi pustaka statis .a dan ditautkan ke aplikasi. Komponen modular ini disimpan di direktori komponen IDF. Anda dapat menambahkan komponen kustom.
Secara default, sistem kompilasi SDK ESP8266 menggunakan GNU Make. Anda hanya perlu mengimpor kode C SDK dan menulis file konfigurasi
.mkyang sesuai untuk mengompilasi SDK untuk C.
Porting methods
Berikut dua metode porting yang tersedia:
- Metode 1: Impor SDK untuk C ke direktori proyek dan kompilasi kode sumber SDK bersama dengan kode sumber aplikasi Anda.
- Metode 2: Perkenalkan SDK untuk C ke direktori komponen IDF sebagai komponen IDF kustom.
Disarankan untuk menggunakan metode kedua. Menggunakan SDK untuk C sebagai komponen terpisah membantu Anda menggunakan ulang di berbagai proyek dan memisahkan kode SDK dari kode aplikasi Anda. Ikuti langkah-langkah berikut:
- Add the SDK for C as a custom component
Unduh SDK untuk C 4.0, salin SDK ke direktori
$IDF_PATH/components, dan tambahkan filecomponent.mkke direktori SDK tersebut.COMPONENT_ADD_INCLUDEDIRS := core core/sysdep core/utils components/ota COMPONENT_SRCDIRS := core core/utils core/sysdep components/ota portfiles/freertos_port/ externalnullFile
freertos_port.cdi direktori komponenportfiles/freertos_portadalah file porting SDK untuk ESP-IDF. File ini mengintegrasikan SDK untuk C dengan ESP-IDF dan mbedtls. - Port the demo program
Anda dapat memodifikasi contoh di
examples/wifi/simple_wifi/untuk mendemonstrasikan migrasi cloud berbasis Message Queuing Telemetry Transport (MQTT).Demo asli menunjukkan cara mengakses hotspot Wi-Fi tertentu dalam mode stasiun wifi. Anda dapat mengunduh file sumber dari lampiran untuk menimpa file
simple_wifi.c. - Configure, compile, and flash the project
Jalankan perintah
make menuconfigdi direktori proyekexamples/wifi/simple_wifi/untuk mengonfigurasi proyek.- Di menu
SDK tool configuration, pastikan bahwaCompiler toolchain path/prefixdiatur kextensa-lx106-elf-. - Di menu
Serial flasher config, ubah nama port serial default papan pengembangan ESP8266. - Di menu
Example Configuration, pilih mode Station, dan konfigurasikan WiFi SSID, WiFi Password, dan parameter Maximum retry. - Pilih
Component config>ESP8266-specific. Di halaman yang muncul, aturMain task stack sizeke4096, simpan modifikasi, lalu keluar.
mbedtls configuration:
Untuk menggunakan PSK sebagai metode pertukaran kunci TLS, Anda harus melakukan operasi berikut:
- Pilih
Component config>mbedTLS. Di halaman yang muncul, klikTLS Key Exchange Methods. - Nyalakan saklar
Enable pre-shared-key ciphersuites. - Tambahkan
CFLAGS += -DMBEDTLS_PSK_MAX_LEN=64ke filecomponent.mkkomponen mbedtls.
Informasi berikut menentukan konfigurasi:
COMPONENT_ADD_INCLUDEDIRS := port/include mbedtls/include port/esp8266/include COMPONENT_SRCDIRS := mbedtls/library port port/esp8266 COMPONENT_OBJEXCLUDE := mbedtls/library/net_sockets.o COMPONENT_SUBMODULES += mbedtls CFLAGS += -DMBEDTLS_PSK_MAX_LEN=64Setelah konfigurasi selesai, jalankan perintah
make alldanmake flashuntuk menyelesaikan kompilasi dan flashing. - Di menu
- View logs
Jalankan perintah
make monitoruntuk memulai pemantauan port serial, lalu mulai ulang perangkat untuk melihat log berikut:...... I (274) esp_image: segment 1: paddr=0x00073818 vaddr=0x40273810 size=0x0e5fc ( 58876) map I (300) esp_image: segment 2: paddr=0x00081e1c vaddr=0x3ffe8000 size=0x00a3c ( 2620) load I (301) esp_image: segment 3: paddr=0x00082860 vaddr=0x40100000 size=0x00a50 ( 2640) load I (308) esp_image: segment 4: paddr=0x000832b8 vaddr=0x40100a50 size=0x05854 ( 22612) load I (325) boot: Loaded app from partition at offset 0x10000 I (349) system_api: Base MAC address is not set, read default base MAC address from EFUSE I (359) system_api: Base MAC address is not set, read default base MAC address from EFUSE phy_version: 1155.0, 6cb3053, Nov 11 2019, 17:31:08, RTOS new I (413) phy_init: phy ver: 1155_0 I (418) reset_reason: RTC reset 1 wakeup 0 store 0, reason is 1 I (425) simple wifi: ESP_WIFI_MODE_STA I (473) simple wifi: wifi_init_sta finished. I (479) simple wifi: connect to ap SSID:C_SDK_Test password:1234abcd I (614) wifi: state: 0 -> 2 (b0) I (659) wifi: state: 2 -> 3 (0) I (671) wifi: state: 3 -> 5 (10) I (676) wifi: pm start, type: 2 I (2320) event: sta ip: 192.168.0.101, mask: 255.255.255.0, gw: 192.168.0.1 I (2329) simple wifi: got ip:192.168.0.101 I (2334) simple wifi: connected to ap SSID:C_SDK_Test password:1234abcd I (2342) simple wifi: Start linkkit main [1.990][LK-0313] MQTT user calls aiot_mqtt_connect api, connect [2.000][LK-0317] mqtt_basic_demo&a13FNXXXXXX [2.000][LK-0318] 4780A5F17990D8DC4CCAD392683ED80160C4C2A1FFA649425CD0E2666A8593EB [2.010][LK-0319] a13FNXXXXXX.mqtt_basic_demo|timestamp=2524608000000,_ss=1,_v=sdk-c-4.0.0,securemode=2,signmethod=hmacsha256,ext=1,| [2.020][LK-031A] devicename|hmacsha256|a13FNXXXXXX&mqtt_basic_demo|2524608000000 [2.020][LK-031A] 3A27B38E1BAB95462F8EA659C15EE26319286EB1CB7B372451EE82A30A9E7FDF establish mbedtls connection with server(host='a13FNXXXXXX.itls.cn-shanghai.aliyuncs.com', port=[1883]) [2.450][LK-0313] MQTT connect success in 460 ms AIOT_MQTTEVT_CONNECT [2.450][LK-0309] sub: /sys/a13FNXXXXXX/mqtt_basic_demo/thing/event/+/post_reply [2.460][LK-0309] pub: /sys/a13FNXXXXXX/mqtt_basic_demo/thing/event/property/post [LK-030A] > 7B 22 69 64 22 3A 22 31 22 2C 22 76 65 72 73 69 | {"id":"1","versi [LK-030A] > 6F 6E 22 3A 22 31 2E 30 22 2C 22 70 61 72 61 6D | on":"1.0","param [LK-030A] > 73 22 3A 7B 22 4C 69 67 68 74 53 77 69 74 63 68 | s":{"LightSwitch [LK-030A] > 22 3A 30 7D 7D | ":0}} suback, res: -0x0000, packet id: 1, max qos: 1 [2.530][LK-0309] pub: /sys/a13FNXXXXXX/mqtt_basic_demo/thing/event/property/post_reply [LK-030A] < 7B 22 63 6F 64 65 22 3A 32 30 30 2C 22 64 61 74 | {"code":200,"dat [LK-030A] < 61 22 3A 7B 7D 2C 22 69 64 22 3A 22 31 22 2C 22 | a":{},"id":"1"," [LK-030A] < 6D 65 73 73 61 67 65 22 3A 22 73 75 63 63 65 73 | message":"succes [LK-030A] < 73 22 2C 22 6D 65 74 68 6F 64 22 3A 22 74 68 69 | s","method":"thi [LK-030A] < 6E 67 2E 65 76 65 6E 74 2E 70 72 6F 70 65 72 74 | ng.event.propert [LK-030A] < 79 2E 70 6F 73 74 22 2C 22 76 65 72 73 69 6F 6E | y.post","version [LK-030A] < 22 3A 22 31 2E 30 22 7D | ":"1.0"} pub, qos: 0, topic: /sys/a13FNXXXXXX/mqtt_basic_demo/thing/event/property/post_reply pub, payload: {"code":200,"data":{},"id":"1","message":"success","method":"thing.event.property.post","version":"1.0"} heartbeat response heartbeat response heartbeat response ......Log description:
I (2342) simple wifi: Start linkkit mainadalah informasi log yang ditambahkan ke demo untuk mengidentifikasi bahwa SDK untuk C mulai bekerja.- Log yang berisi
[LK-XXXX]disediakan oleh SDK untuk C. Dalam log tersebut,[2.450][LK-0313] MQTT connect success in 460 msmenunjukkan bahwa koneksi MQTT telah dibuat, dan mencakup waktu yang dikonsumsi.