Ce guide explique comment porter le SDK C 4.0 sur une carte de développement ESP8266 et utiliser une application de démonstration pour se connecter à Alibaba Cloud IoT Platform.
Préparatifs
Pour porter le SDK, préparez les éléments suivants :
Une carte de développement. La carte utilisée dans cette rubrique est l'ESP-LAUNCHER, qui correspond à la carte officielle ESP8266EX_Demo_Board.
Un câble USB.
Un ordinateur exécutant Windows, Linux ou macOS. Ce guide utilise macOS comme plateforme de développement hôte.
Pour plus d'informations sur la configuration d'un environnement de développement sous d'autres systèmes d'exploitation, consultez la section Get started de
.
Configuration de l'environnement de développement
Les instructions suivantes relatives à la configuration de l'environnement de développement et à la vérification du bon fonctionnement de l'ESP8266 sont fournies à titre indicatif. Si vous rencontrez des problèmes, contactez le fournisseur de votre carte de développement.
Pour accélérer la configuration de l'environnement, lisez le fichier ESP8266 RTOS SDK Readme. Les étapes ci-dessous décrivent la configuration de l'environnement sous macOS :
-
Install required software
Exécutez la commande
sudo easy_install pippour installer pip.Exécutez la commande
sudo pip install pyserialpour installer le module 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.3Exécutez ces commandes pour cloner le dépôt officiel ESP-IDF :
Une fois le téléchargement terminé, exécutez la commande
export IDF_PATH=~/esp/ESP8266_RTOS_SDKpour configurer le chemin du SDK IDF.RemarqueCette démonstration utilise la branche
release/v3.3. L'ID de commit correspondant estfd785ab0c50009ab93503ae785814136f6d1009b.Pour les versions antérieures à la v3.0 qui n'utilisent pas le framework ESP-IDF, adaptez le processus en conséquence pour finaliser l'intégration.
-
Install the toolchain and compilation tool
Téléchargez manuellement la chaîne d'outils pour macOS, puis extrayez-la dans le répertoire
~/esp:mkdir -p ~/esp cd ~/esp tar -xzf ~/Downloads/xtensa-lx106-elf-macos-1.22.0-100-ge567ec7-5.2.0.tar.gzVous pouvez obtenir les chaînes d'outils pour d'autres systèmes d'exploitation sur la page ESP8266_RTOS_SDK sur GitHub.
Configurez le chemin système pour la chaîne d'outils.
export PATH=$PATH:$HOME/esp/xtensa-lx106-elf/binExécutez le script suivant pour ajouter les configurations de toutes les variables d'environnement au fichier
$HOME/.bash_profile:set_esp8266 () { exprot IDF_PATH=$HOME/esp/ESP8266_RTOS_SDK export PATH=$PATH: $HOME/esp/xtensa-lx106-elf/bin } -
Connectez la carte de développement
Pour identifier le nom du port série sous macOS, exécutez la commande
ls /dev/cu.*. Dans cette démonstration, le nom du port série est/dev/cu.usbserial-AH06UHLH. -
Configurez, compilez, flashez et surveillez
Accédez au répertoire examples/wifi/simple_wifi/ en exécutant
cd examples/wifi/simple_wifi/. Effectuez toutes les configurations dans le chemin du projet.Dans ESP-IDF, exécutez
make menuconfigpour configurer le projet. Pour plus d'informations, reportez-vous aux méthodes de portage décrites ci-dessous.Une fois la configuration terminée, exécutez la commande
make allpour compiler le firmware.Après la compilation, exécutez la commande
make flashpour flasher le firmware. Assurez-vous que la carte de développement est en mode téléchargement.Une fois le projet flashé, exécutez la commande
make monitorpour surveiller le port série. Vérifiez que la carte de développement est en mode de fonctionnement.
Vous avez désormais configuré l'environnement de développement ESP8266, compilé avec succès l'exemple de station Wi-Fi et flashé la carte.
RemarqueAvant de poursuivre, assurez-vous que la carte de développement fonctionne correctement.
-
Portez le SDK C 4.0
Le processus de portage implique l'importation du code source du SDK, la configuration des fichiers de la couche de portage du SDK et la mise en place du système de build.
Le répertoire
portfilesdu SDK contient déjà le fichier de portage pour l'ESP8266. Il vous suffit donc d'importer le code source du SDK et de configurer le système de build pour finaliser le portage.Pour mieux comprendre le processus de portage, nous vous recommandons de lire la documentation ESP-IDF relative au Build System. Familiarisez-vous d'abord avec quelques concepts de base d'ESP-IDF :
Project : un répertoire contenant tous les fichiers source et de configuration nécessaires à la construction de votre application.
components : modules de code autonomes, compilés en bibliothèques statiques et liés à l'application. Ces composants modulaires sont stockés dans le répertoire ESP-IDF. Vous pouvez également ajouter vos propres composants personnalisés.
Étant donné que le système de build esp8266-sdk utilise GNU make par défaut, vous pouvez ajouter le SDK C au build en incluant son code et en créant un fichier de configuration de build
.mkcorrespondant.
Méthodes de portage
Deux méthodes de portage sont disponibles :
Méthode 1 : ajoutez le SDK C au répertoire du projet et compilez le code source du SDK conjointement avec le code source de votre application.
Méthode 2 : intégrez le SDK C dans le répertoire des composants d'IDF en tant que composant IDF personnalisé.
Nous vous recommandons d'utiliser la seconde méthode. L'utilisation du SDK C en tant que composant distinct facilite sa réutilisation dans différents projets et découple le code du SDK de celui de votre application. Procédez comme suit :
-
Ajoutez le SDK C en tant que composant personnalisé
-
Remarque
Lorsque vous personnalisez le SDK, vous pouvez sélectionner FreeRTOS pour le device OS et laisser les autres paramètres par défaut. Sélectionnez Advanced features selon vos besoins. Pour plus d'informations, consultez
.
Téléchargez le fichier joint posix_port.c, adapté à l'ESP8266. Utilisez ce fichier pour remplacer
portfiles/aiot_port/posix_port.cdans le SDK de liaison C.Le SDK de liaison C et ESP-IDF contiennent tous deux une bibliothèque mbedtls. Pour éviter les conflits de bibliothèques, modifiez le fichier
$IDF_PATH/components/C-SDK/core/sysdep/core_adapter.cet désactivez la macroCORE_ADAPTER_MBEDTLS_ENABLED.-
Copiez le SDK dans le répertoire
$IDF_PATH/components. Ensuite, créez un fichier de build nommécomponent.mkdans le répertoire du SDK avec le contenu suivant :COMPONENT_ADD_INCLUDEDIRS := core core/sysdep core/utils components/ota COMPONENT_SRCDIRS := core core/utils core/sysdep components/ota portfiles/aiot_port/ external
-
-
Portez l'application de démonstration
Vous pouvez modifier l'exemple situé dans
examples/wifi/simple_wifi/pour illustrer la migration vers le cloud basée sur MQTT (Message Queuing Telemetry Transport).La démonstration native montre comment accéder à un point d'accès Wi-Fi spécifique en mode station Wi-Fi. Vous pouvez télécharger le fichier source de la pièce jointe pour écraser le fichier
simple_wifi.c. -
Configuration mbedTLS : configurez, compilez et flashez
Exécutez la commande
make menuconfigdans le répertoire du projetexamples/wifi/simple_wifi/pour configurer le projet.Dans le menu
SDK tool configuration, assurez-vous queCompiler toolchain path/prefixest défini surxtensa-lx106-elf-.Dans le menu
Serial flasher config, modifiez le nom du port série par défaut de la carte de développement ESP8266.Dans le menu
Example Configuration, sélectionnez le mode Station et configurez les paramètres WiFi SSID, WiFi Password et Maximum retry.Choisissez
Component config>ESP8266-specific. Sur la page qui s'affiche, définissezMain task stack sizesur4096, enregistrez la modification, puis quittez.
Pour utiliser une clé pré-partagée (PSK) comme méthode d'échange de clés TLS, suivez ces étapes :
Choisissez
Component config>mbedTLS. Sur la page qui s'affiche, cliquez surTLS Key Exchange Methods.Activez l'option
Enable pre-shared-key ciphersuites.Ajoutez
CFLAGS += -DMBEDTLS_PSK_MAX_LEN=64au fichiercomponent.mkdu composant mbedtls.
Les informations suivantes spécifient les configurations :
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=64Une fois la configuration terminée, exécutez
make alletmake flashpour compiler et flasher. -
Exécutez l'application et affichez les journaux
Exécutez
make monitorpour ouvrir le moniteur de port série. Redémarrez l'appareil pour afficher les journaux suivants :...... 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 ......Le message
I (2342) simple wifi: Start linkkit maindans la démonstration indique que le SDK C a démarré.Le SDK C génère des journaux contenant
[LK-XXXX]. Le message[2.450][LK-0313] MQTT connect success in 460 msindique une connexion MQTT réussie et affiche le temps nécessaire à la connexion.