Panduan ini menjelaskan cara melakukan porting SDK C 4.0 ke papan pengembangan ESP8266 dan menggunakan aplikasi demo untuk terhubung ke Alibaba Cloud IoT Platform.
Persiapan
Untuk melakukan porting SDK, Anda harus menyiapkan hal-hal berikut:
- Papan pengembangan. Papan yang digunakan dalam topik ini adalah ESP-LAUNCHER, yaitu ESP8266EX_Demo_Board resmi.
- Kabel USB.
- Komputer yang menjalankan Windows, Linux, atau macOS. Panduan ini menggunakan macOS sebagai platform pengembangan host.
Siapkan lingkungan pengembangan
Untuk mempercepat penyiapan lingkungan, baca ESP8266 RTOS SDK Readme. Langkah-langkah berikut menjelaskan cara menyiapkan lingkungan di macOS:
- Install required software
Jalankan perintah
sudo easy_install pipuntuk menginstal sistem pip.Jalankan perintah
sudo pip install pyserialuntuk menginstal modul pySerial. - Clone the official ESP-IDF repository
cd ~ mkdir esp && cd esp git clone https://github.com/espressif/ESP8266_RTOS_SDK.git -b release/v3.3Setelah unduhan selesai, jalankan perintah
export IDF_PATH=~/esp/ESP8266_RTOS_SDKuntuk mengonfigurasi path SDK IDF.Catatanrelease/v3.3fd785ab0c50009ab93503ae785814136f6d1009bDemonstrasi ini menggunakan branch yang tercantum, lengkap dengan ID commit-nya.- Untuk versi sebelum v3.0 yang tidak menggunakan framework ESP-IDF, Anda dapat menyesuaikan prosesnya agar integrasi dapat diselesaikan.
- Install the toolchain and compilation tool
Unduh rantai alat macOS secara manual, lalu ekstrak ke direktori
~/esp:mkdir -p ~/esp cd ~/esp tar -xzf ~/Downloads/xtensa-lx106-elf-macos-1.22.0-100-ge567ec7-5.2.0.tar.gzAnda dapat memperoleh toolchain untuk sistem operasi lain di halaman ESP8266_RTOS_SDK di GitHub.
Konfigurasikan path sistem untuk toolchain.
export PATH=$PATH:$HOME/esp/xtensa-lx106-elf/binJalankan skrip berikut untuk menambahkan konfigurasi semua variabel lingkungan ke file
$HOME/.bash_profile:set_esp8266 () { exprot IDF_PATH=$HOME/esp/ESP8266_RTOS_SDK export PATH=$PATH: $HOME/esp/xtensa-lx106-elf/bin } -
Hubungkan papan pengembangan
Untuk menemukan nama port serial di macOS, jalankan perintah
ls /dev/cu.*. Nama port serial dalam demonstrasi ini adalah/dev/cu.usbserial-AH06UHLH. -
Konfigurasi, kompilasi, flash, dan monitor
cd examples/wifi/simple_wifi/examples/wifi/simple_wifi/. Semua konfigurasi harus dilakukan di jalur proyek. Pertama, masuk ke direktori tersebut dengan menjalankan perintah di atas.- 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 melakukan flashing firmware. Pastikan papan pengembangan berada dalam mode download. - Setelah proyek di-flash, jalankan perintah
make monitoruntuk memantau port serial. Pastikan papan pengembangan berada dalam mode kerja.
Anda kini telah menyiapkan lingkungan pengembangan ESP8266 dan berhasil mengompilasi serta melakukan flashing contoh Wi-Fi station.
Catatan Sebelum melanjutkan, pastikan papan pengembangan berfungsi dengan benar. -
Port SDK C 4.0
Proses porting melibatkan impor kode sumber SDK, konfigurasi file layer porting SDK, dan penyiapan sistem build.
Direktori
portfilesSDK sudah berisi file port untuk ESP8266, sehingga Anda hanya perlu mengimpor kode sumber SDK dan mengonfigurasi sistem build untuk menyelesaikan porting.Untuk memahami proses porting dengan lebih baik, kami sarankan membaca dokumentasi ESP-IDF Build System. Anda harus terlebih dahulu memahami beberapa konsep dasar ESP-IDF:
- Project: Direktori yang berisi semua file sumber dan file konfigurasi yang diperlukan untuk mem-build aplikasi Anda.
- components: Potongan kode modular yang berdiri sendiri, dikompilasi menjadi pustaka statis dan ditautkan ke aplikasi. Komponen modular ini disimpan di direktori ESP-IDF. Anda juga dapat menambahkan komponen kustom sendiri.
Karena sistem build ESP8266-sdk secara default menggunakan GNU make, Anda dapat menambahkan SDK C ke dalam build dengan menambahkan kodenya dan membuat file konfigurasi build
.mkyang sesuai.
Metode porting
Tersedia dua metode porting berikut:
- Metode 1: Tambahkan SDK C ke direktori proyek dan kompilasi kode sumber SDK bersama dengan kode sumber aplikasi Anda.
- Metode 2: Masukkan SDK C ke direktori components IDF sebagai komponen IDF kustom.
Kami menyarankan menggunakan metode kedua. Menggunakan SDK C sebagai komponen terpisah memudahkan penggunaan ulang di berbagai proyek dan memisahkan kode SDK dari kode aplikasi Anda. Lakukan langkah-langkah berikut:
-
Tambahkan SDK C sebagai komponen kustom
- Dapatkan C Link SDK.
Catatan device OSFreeRTOSAdvanced featuresSaat mengkustomisasi SDK, Anda dapat memilih opsi yang diperlukan dan membiarkan parameter lainnya pada pengaturan default. Pilih fitur sesuai kebutuhan. Untuk informasi selengkapnya, lihat Get C Link SDK.
- Unduh file posix_port.c terlampir, yang telah disesuaikan untuk ESP8266. Gunakan file ini untuk menggantikan
portfiles/aiot_port/posix_port.cdi C Link SDK. - Baik C Link SDK maupun ESP-IDF mengandung pustaka mbedtls. Untuk menghindari konflik pustaka, modifikasi file
$IDF_PATH/components/C-SDK/core/sysdep/core_adapter.cdan nonaktifkan makroCORE_ADAPTER_MBEDTLS_ENABLED. - Salin SDK ke direktori
$IDF_PATH/components. Kemudian, buat file build bernamaCOMPONENT_ADD_INCLUDEDIRS := core core/sysdep core/utils components/ota COMPONENT_SRCDIRS := core core/utils core/sysdep components/ota portfiles/aiot_port/ external
- Dapatkan C Link SDK.
-
Port aplikasi demo
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 wifi station. Unduh file sumber lampiran untuk menimpa file
simple_wifi.c. -
Konfigurasi, kompilasi, dan flash
Jalankan perintah
make menuconfigdi direktori proyekexamples/wifi/simple_wifi/untuk mengonfigurasi proyek.- Pada menu
SDK tool configuration, pastikanCompiler toolchain path/prefixdiatur kextensa-lx106-elf-. - Pada menu
Serial flasher config, ubah nama port serial default papan pengembangan ESP8266. - Pada menu
Example Configuration, pilih mode Station, lalu konfigurasikan SSID WiFi, Password WiFi, dan parameter Maximum retry. - Pilih
Component config>ESP8266-specific. Pada halaman yang muncul, aturMain task stack sizeke4096, simpan modifikasi, lalu keluar.
Konfigurasi mbedTLS
Untuk menggunakan kunci pra-bersama (PSK) sebagai metode pertukaran kunci TLS, ikuti langkah-langkah berikut:
- Pilih
Component config>mbedTLS. Pada halaman yang muncul, klikTLS Key Exchange Methods. - Aktifkan sakelar
Enable pre-shared-key ciphersuites. - Tambahkan
CFLAGS += -DMBEDTLS_PSK_MAX_LEN=64ke filecomponent.mkkomponen mbedtls.
Informasi berikut menentukan konfigurasinya:
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
make alldanmake flashuntuk mengompilasi dan melakukan flashing. - Pada menu
-
Jalankan aplikasi dan lihat log
Jalankan
make monitoruntuk membuka monitor 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
I (2342) simple wifi: Start linkkit maindalam demo menunjukkan bahwa SDK C telah dimulai.[LK-XXXX][2.450][LK-0313] MQTT connect success in 460 msSDK untuk C menghasilkan log ini, yang menunjukkan keberhasilan koneksi MQTT beserta waktu yang diperlukan untuk terhubung.