全部产品
Search
文档中心

IoT Platform:Porting SDK ke Papan Pengembangan ESP32

更新时间:Jun 21, 2025

Topik ini menjelaskan cara mem-porting SDK untuk C 4.0 ke papan pengembangan ESP32 dan menggunakan demo Message Queuing Telemetry Transport (MQTT) untuk terhubung ke Alibaba Cloud IoT Platform.

Lingkungan Pengembangan

Untuk mem-porting SDK, Anda perlu menyiapkan item berikut:

  • Papan pengembangan ESP32.

  • Kabel USB.

  • Komputer yang menjalankan Windows, Linux, atau macOS.

Papan pengembangan yang digunakan dalam demo ini adalah ESP32 Core Board V2/ESP32 DevKitC, yang dilengkapi dengan modul resmi ESP-WROOM-322, modul onboard USB-to-serial CP2102, dan modul catu daya.

null

Dalam demo ini, kami menggunakan macOS untuk menyiapkan lingkungan pengembangan. Untuk informasi lebih lanjut tentang cara menyiapkan lingkungan pengembangan di sistem operasi lainnya, lihat Memulai.

Menyiapkan Lingkungan Pengembangan

null

Kami sarankan Anda membaca Memulai terlebih dahulu untuk mempercepat penyiapan lingkungan pengembangan.

Ikuti langkah-langkah berikut untuk menyiapkan lingkungan macOS:

  1. Instal perangkat lunak yang diperlukan.

  2. Klon repositori resmi ESP-IDF.

    Demo ini menggunakan cabang release/v4.2 dari repositori Espressif IoT Development Framework (ESP-IDF).

    cd ~
    mkdir esp && cd esp
    git clone --recursive -b release/v4.2 https://github.com/espressif/esp-idf.git
  3. Instal toolchain dan alat kompilasi.

    cd esp-idf
    ./install.sh
  4. Konfigurasikan variabel lingkungan.

    • Jalankan skrip berikut:

      . $HOME/esp/esp-idf/export.sh
    • Atau, jalankan skrip berikut untuk menambahkan konfigurasi semua variabel lingkungan ke file $HOME/.bash_profile:

      set_esp32 ()
      {
          export IDF_PATH=$HOME/esp/esp-idf
          . $HOME/esp/esp-idf/export.sh
      }
  5. Salin demo stasiun wifi ke direktori terpisah.

    cd ~/esp
    cp -r $IDF_PATH/examples/wifi/getting_started/station .
  6. Sambungkan ke papan pengembangan.

    • Instal driver USB. Untuk informasi lebih lanjut, lihat Membuat Koneksi Serial dengan ESP32.

    • Periksa nama port perangkat. Nama port USB dalam demo ini adalah /dev/cu.SLAB_USBtoUART.

  7. Konfigurasikan proyek.

    Jalankan idf.py menuconfig untuk mengkonfigurasi proyek. Dalam demo ini, konfigurasi default dipertahankan.

  8. Kompilasi dan flash proyek, serta pantau port serial.

    • Pergi ke jalur proyek station dan jalankan idf.py build untuk mengkompilasi proyek.

    • Setelah kompilasi selesai, jalankan perintah idf.py -p PORT flash untuk mem-flash firmware. Ganti PORT dengan nama port USB aktual.

    • Setelah flashing selesai, jalankan perintah idf.py -p PORT monitor untuk memantau port serial.

    • Anda juga dapat menjalankan perintah idf.py -p PORT flash monitor untuk mem-flash firmware dan memantau informasi yang dicetak pada port serial.

    Sekarang, Anda telah menyiapkan lingkungan pengembangan ESP32 dan mengkompilasi serta mem-flash demo stasiun wifi. Bagian berikutnya menjelaskan cara mem-porting SDK untuk C 4.0 dan menghubungkannya ke Alibaba Cloud IoT Platform.

Porting SDK untuk C 4.0

Proses mem-porting SDK untuk C 4.0 mencakup impor kode SDK dan konfigurasi file port SDK serta sistem kompilasi.

Direktori portfiles dari SDK berisi file portfile untuk ESP32. Oleh karena itu, Anda hanya perlu mengimpor kode sumber SDK dan mengkonfigurasi sistem kompilasi untuk menyelesaikan porting.

Istilah

Kami sarankan Anda membaca Sistem Pembangunan dari IoT Development Framework (IDF) untuk mempelajari proses porting. Anda harus memahami istilah berikut tentang IDF:

  • project: Ini adalah direktori yang hanya 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 IDF menggunakan Ninja dan CMake bersama-sama. Anda hanya perlu mengimpor kode SDK dan menulis file CMakeList.txt yang sesuai untuk mengkompilasi SDK.

Metode Porting

  • Metode 1: Impor SDK untuk C ke direktori proyek dan kompilasi kode sumber SDK dengan kode sumber aplikasi Anda.

  • Metode 2: Perkenalkan SDK untuk C ke direktori komponen IDF sebagai komponen IDF kustom.

Kami sarankan Anda menggunakan metode kedua. Menggunakan SDK untuk C sebagai komponen terpisah membantu Anda menggunakan kembali SDK di berbagai proyek dan memisahkan kode SDK dari kode aplikasi Anda.

Prosedur

  1. Tambahkan SDK untuk C sebagai komponen kustom.

    Unduh SDK untuk C 4.0, salin SDK ke direktori $IDF_PATH/components, dan tambahkan file CMakeLists.txt berikut ke direktori SDK untuk C:

    set(include_dirs core core/sysdep core/utils)
    file(GLOB c_sdk_srcs
        "core/*.c"
        "core/utils/*.c"
        "core/sysdep/*.c"
        "portfiles/aiot_port/*.c"
        "external/*.c")
    idf_component_register(SRCS ${c_sdk_srcs}
                           INCLUDE_DIRS "${include_dirs}"
                           REQUIRES mbedtls)
    null
    • File esp32_port.c adalah file porting SDK untuk ESP32.

    • SDK untuk C bergantung pada pustaka mbedtls. Oleh karena itu, REQUIRES mbedtls harus digunakan untuk memperkenalkan dependensi komponen.

    • SDK untuk C tidak memiliki item konfigurasi. Oleh karena itu, Anda tidak perlu mengkonfigurasi komponen Kconfig.

  2. Porting program demo.

    IDF kompatibel dengan standar Portable Operating System Interface (POSIX). Oleh karena itu, Anda hanya perlu menyalin isi file LinkSDK/core/demos/mqtt_basic_demo.c ke file station/main/station_example_main.c dan memodifikasinya sedikit.

    Anda dapat mengunduh file demo.c yang telah dimodifikasi untuk menggantikan file station_example_main.c asli.

    null
    • Fungsi wifi_init_sta() menunggu koneksi Wi-Fi hingga jumlah rekoneksi mencapai nilai yang ditentukan oleh EXAMPLE_ESP_MAXIMUM_RETRY.

    • Setelah koneksi Wi-Fi berhasil, Anda dapat memanggil operasi API dari SDK untuk C untuk membuat koneksi MQTT. Setelah koneksi MQTT berhasil, data dapat ditransmisikan antara perangkat dan IoT Platform.

    • Fungsi linkkit_main() berisi demo MQTT dari SDK untuk C asli.

  3. Kompilasi dan flash proyek.

    • Jalankan perintah idf.py menuconfig di direktori proyek. Anda dapat melihat menu Example Configuration.

    • Modifikasi parameter WiFi SSID, WiFi Password, dan Maximum retry (menentukan jumlah maksimum rekoneksi), simpan modifikasi, dan keluar.

    • Jalankan perintah idf.py build untuk mengkompilasi proyek.

    • Setelah kompilasi berhasil, jalankan perintah idf.py -p /dev/cu.SLAB_USBtoUART flash monitor untuk mem-flash proyek dan memantau port serial.

  4. Lihat log.

    ......
    I (829) phy: phy_version: 4180, cb3948e, Sep 12 2019, 16:39:13, 0, 0
    I (829) wifi: mode : sta (30:ae:a4:04:81:84)
    I (829) wifi station: wifi_init_sta finished.
    I (949) wifi: new:<11,0>, old:<1,0>, ap:<255,255>, sta:<11,0>, prof:1
    I (949) wifi: state: init -> auth (b0)
    I (969) wifi: state: auth -> assoc (0)
    I (969) wifi: state: assoc -> run (10)
    I (1129) wifi: connected with C_SDK_Test, aid = 1, channel 11, BW20, bssid = ec:26:ca:4b:68:cc
    I (1129) wifi: security type: 3, phy: bgn, rssi: -37
    I (1139) wifi: pm start, type: 1
    I (1219) wifi: AP's beacon interval = 102400 us, DTIM period = 1
    I (2129) esp_netif_handlers: sta ip: 192.168.0.100, mask: 255.255.255.0, gw: 192.168.0.1
    I (2129) wifi station: got ip:192.168.0.100
    I (2129) wifi station: connected to ap SSID:C_SDK_Test password:1234abcd
    I (2139) wifi station: Start linkkit mqtt
    [1.583][LK-0313] MQTT user calls aiot_mqtt_connect api, connect
    [1.587][LK-0317] mqtt_basic_demo&a13FNXXXXXX
    [1.590][LK-0318] 4780A5F17990D8DC4CCAD392683ED80160C4C2A1FFA649425CD0E2666A8593EB
    [1.598][LK-0319] a13FN5TplKq.mqtt_basic_demo|timestamp=2524608000000,_ss=1,_v=sdk-c-4.0.0,securemode=2,signmethod=hmacsha256,ext=1,|
    establish mbedtls connection with server(host='a13FN5TplKq.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[443])
    success to establish mbedtls connection, fd = 54(cost 29739 bytes in total, max used 44007 bytes)
    [3.493][LK-0313] MQTT connect success in 1910 ms
    AIOT_MQTTEVT_CONNECT
    [3.494][LK-0309] sub: /sys/a13FN5TplKq/mqtt_basic_demo/thing/event/+/post_reply
    [3.499][LK-0309] pub: /sys/a13FN5TplKq/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
    [3.573][LK-0309] pub: /sys/a13FN5TplKq/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
    ......