Esta guía explica cómo portar el SDK para C 4.0 a una placa de desarrollo ESP8266 y utilizar una aplicación de demostración para conectarse a Alibaba Cloud IoT Platform.
Preparativos
Para portar el SDK, debe preparar los siguientes elementos:
Una placa de desarrollo. La placa utilizada en este tema es la ESP-LAUNCHER, que corresponde a la ESP8266EX_Demo_Board oficial.
Un cable USB.
Una computadora con Windows, Linux o macOS. Esta guía utiliza macOS como plataforma de desarrollo host.
Para obtener más información sobre cómo configurar un entorno de desarrollo en otros sistemas operativos, consulte Primeros pasos en
.
Configurar el entorno de desarrollo
Las siguientes instrucciones para configurar el entorno de desarrollo y verificar que el ESP8266 funciona correctamente son solo de referencia. Si encuentra algún problema, póngase en contacto con el proveedor de su placa de desarrollo.
Para acelerar la configuración del entorno, lea el Readme del ESP8266 RTOS SDK. Los siguientes pasos describen cómo configurar el entorno en macOS:
-
Install required software
Ejecute el comando
sudo easy_install pippara instalar el sistema pip.Ejecute el comando
sudo pip install pyserialpara instalar el módulo 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.3Ejecute estos comandos para clonar el repositorio oficial de ESP-IDF:
Una vez completada la descarga, debe ejecutar el comando
export IDF_PATH=~/esp/ESP8266_RTOS_SDKpara configurar la ruta del IDF SDK.Notarelease/v3.3fd785ab0c50009ab93503ae785814136f6d1009bEsta demostración utiliza la rama . El ID de commit correspondiente es .Para versiones anteriores a la v3.0 que no utilizan el framework ESP-IDF, puede ajustar el proceso según corresponda para completar la integración.
-
Install the toolchain and compilation tool
Descargue manualmente la cadena de herramientas para macOS y extráigala en el directorio
~/esp:mkdir -p ~/esp cd ~/esp tar -xzf ~/Downloads/xtensa-lx106-elf-macos-1.22.0-100-ge567ec7-5.2.0.tar.gzPuede obtener las cadenas de herramientas para otros sistemas operativos en la página de ESP8266_RTOS_SDK en GitHub.
Configure la ruta del sistema para la cadena de herramientas.
export PATH=$PATH:$HOME/esp/xtensa-lx106-elf/binEjecute el siguiente script para agregar las configuraciones de todas las variables de entorno al archivo
$HOME/.bash_profile:set_esp8266 () { exprot IDF_PATH=$HOME/esp/ESP8266_RTOS_SDK export PATH=$PATH: $HOME/esp/xtensa-lx106-elf/bin } -
Conecte la placa de desarrollo
Para encontrar el nombre del puerto serial en macOS, ejecute el comando
ls /dev/cu.*. El nombre del puerto serial en esta demostración es/dev/cu.usbserial-AH06UHLH. -
Configure, compile, flashee y monitoree
cd examples/wifi/simple_wifi/examples/wifi/simple_wifi/ Todas las configuraciones deben realizarse en la ruta del proyecto. Primero, vaya al directorio ejecutando .En ESP-IDF, ejecute
make menuconfigpara configurar el proyecto. Para obtener más información, consulte los métodos de portado a continuación.Una vez completada la configuración, ejecute el comando
make allpara compilar el firmware.Después de finalizar la compilación, ejecute el comando
make flashpara flashear el firmware. Asegúrese de que la placa de desarrollo esté en modo de descarga.Una vez flasheado el proyecto, ejecute el comando
make monitorpara monitorear el puerto serial. Asegúrese de que la placa de desarrollo esté en modo de trabajo.
Ahora ha configurado el entorno de desarrollo de ESP8266 y ha compilado y flasheado correctamente el ejemplo de estación Wi-Fi.
NotaAntes de continuar, asegúrese de que la placa de desarrollo funcione correctamente.
-
Portar el SDK para C 4.0
El proceso de portado implica importar el código fuente del SDK, configurar los archivos de la capa de portado del SDK y establecer el sistema de compilación.
El directorio
portfilesdel SDK ya contiene el archivo de portado para ESP8266, por lo que solo necesita importar el código fuente del SDK y configurar el sistema de compilación para completar el portado.Para comprender mejor el proceso de portado, se recomienda leer la documentación del Sistema de compilación de ESP-IDF. Primero debe familiarizarse con algunos conceptos básicos de ESP-IDF:
Project: Un directorio que contiene todos los archivos fuente y de configuración necesarios para compilar su aplicación.
components: Piezas modulares de código independiente, compiladas en bibliotecas estáticas y vinculadas a la aplicación. Estos componentes modulares se almacenan en el directorio de ESP-IDF. También puede agregar sus propios componentes personalizados.
Dado que el sistema de compilación de ESP8266-sdk utiliza GNU make de forma predeterminada, puede agregar el SDK para C a la compilación incluyendo su código y creando un archivo de configuración de compilación
.mkcorrespondiente.
Métodos de portado
Existen dos métodos de portado disponibles:
Método 1: Agregar el SDK para C al directorio del proyecto y compilar el código fuente del SDK junto con el código fuente de su aplicación.
Método 2: Incorporar el SDK para C en el directorio de componentes de IDF como un componente personalizado de IDF.
Se recomienda utilizar el segundo método. Usar el SDK para C como un componente separado facilita su reutilización en diferentes proyectos y desacopla el código del SDK del código de su aplicación. Realice los siguientes pasos:
-
Agregar el SDK para C como componente personalizado
-
Nota
device OS
FreeRTOS
Advanced features
Al personalizar el SDK, puede seleccionar para y dejar los demás parámetros con sus valores predeterminados. Seleccione según sea necesario. Para obtener más información, consulte
.
Descargue el archivo adjunto posix_port.c, adaptado para ESP8266. Utilice este archivo para reemplazar
portfiles/aiot_port/posix_port.cen el C Link SDK.Tanto el C Link SDK como ESP-IDF contienen una biblioteca mbedtls. Para evitar conflictos de bibliotecas, modifique el archivo
$IDF_PATH/components/C-SDK/core/sysdep/core_adapter.cy deshabilite la macroCORE_ADAPTER_MBEDTLS_ENABLED.-
Copie el SDK al directorio
$IDF_PATH/components. Luego, cree un archivo de compilación llamadocomponent.mken el directorio del SDK con el siguiente contenido:COMPONENT_ADD_INCLUDEDIRS := core core/sysdep core/utils components/ota COMPONENT_SRCDIRS := core core/utils core/sysdep components/ota portfiles/aiot_port/ external
-
-
Portar la aplicación de demostración
Puede modificar el ejemplo en
examples/wifi/simple_wifi/para demostrar la migración a la nube basada en Message Queuing Telemetry Transport (MQTT).La demostración nativa muestra cómo acceder a un punto de acceso Wi-Fi específico en modo estación Wi-Fi, lo que permite descargar el archivo fuente del adjunto para sobrescribir el archivo
simple_wifi.c. -
Configurar, compilar y flashear: configuración de mbedTLS
Ejecute el comando
make menuconfigen el directorio del proyectoexamples/wifi/simple_wifi/para configurar el proyecto.En el menú
SDK tool configuration, asegúrese de queCompiler toolchain path/prefixesté establecido enxtensa-lx106-elf-.En el menú
Serial flasher config, cambie el nombre predeterminado del puerto serial de la placa de desarrollo ESP8266.En el menú
Example Configuration, seleccione el modo Station y configure los parámetros WiFi SSID, WiFi Password y Maximum retry.Elija
Component config>ESP8266-specific. En la página que aparece, establezcaMain task stack sizeen4096, guarde la modificación y salga.
Para utilizar una clave precompartida (PSK) como método de intercambio de claves TLS, siga estos pasos:
Elija
Component config>mbedTLS. En la página que aparece, haga clic enTLS Key Exchange Methods.Active el interruptor
Enable pre-shared-key ciphersuites.Agregue
CFLAGS += -DMBEDTLS_PSK_MAX_LEN=64al archivocomponent.mkdel componente mbedtls.
La siguiente información especifica las configuraciones:
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=64Una vez completada la configuración, ejecute
make allymake flashpara compilar y flashear. -
Ejecutar la aplicación y ver registros: Registros
Ejecute
make monitorpara abrir el monitor del puerto serial. Reinicie el dispositivo para ver los siguientes registros:...... 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 ......El mensaje
I (2342) simple wifi: Start linkkit mainen la demostración indica que el SDK para C se ha iniciado.El SDK para C genera registros que contienen
[LK-XXXX]. El mensaje[2.450][LK-0313] MQTT connect success in 460 msindica una conexión MQTT exitosa y muestra el tiempo que tomó conectarse.