在带有Platformio的可视代码中,使用NodeMcu v3(ESP8266)上的AzureIoTHub库无法编译代码

问题描述 投票:0回答:1

我正在使用Visual Studio Code,Platformio扩展,Arduino框架。拥有带有ESP8266的NodeMCU v3开发板。我写了一些简单的程序,该程序从传感器获取数据并使LED闪烁。 Everythink一切顺利,代码已编译并在nodeMCU上工作。很好,下一步,我想将其连接到Azure。因此,如显示的多个示例所示,我包括了一些库并编写/复制了简单的代码。除去一些首次编译错误后:

我遇到了另一个错误。缩减代码后,您可以在此处看到非常简单的代码:

#include <Arduino.h>
#include "config.h"

#include <ESP8266WiFi.h>
#include <AzureIoTHub.h>
#include <AzureIoTProtocol_MQTT.h>
#include <AzureIoTUtility.h>
#include <ArduinoJson.h>

#include "iothubtransportmqtt.h"

static IOTHUB_CLIENT_LL_HANDLE iotHubClientHandle;

void setup() {
  pinMode(PIN_GREEN_LED, OUTPUT);
  digitalWrite(PIN_GREEN_LED, LOW);

  static IOTHUB_CLIENT_TRANSPORT_PROVIDER protocol = MQTT_Protocol;
  iotHubClientHandle = IoTHubClient_LL_CreateFromConnectionString("connectionString", protocol);  
}

void loop() {
  digitalWrite(PIN_GREEN_LED, LOW);
}

无需调用IoTHubClient_LL_CreateFromConnectionString函数,我认为不能跳过以建立与Azure IoT中心的连接的代码。我必须添加iothubtransportmqtt.h,因此MQTT_Protocol可用。

我的platformio.ini文件(将开发板更改为esp12e没有区别:]

[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
lib_deps =
    DHT
    AzureIoTHub
    ArduinoJson

这是构建的开始方式:

CONFIGURATION: https://docs.platformio.org/page/boards/espressif8266/nodemcuv2.html
PLATFORM: Espressif 8266 2.5.1 > NodeMCU 1.0 (ESP-12E Module) [or Espressif ESP8266 ESP-12E for esp12e board]
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
PACKAGES:
 - framework-arduinoespressif8266 3.20701.0 (2.7.1)
 - tool-esptool 1.413.0 (4.13)
 - tool-esptoolpy 1.20800.0 (2.8.0)
 - toolchain-xtensa 2.40802.200502 (4.8.2)

依赖关系:

Dependency Graph
DHT 1.0.0
AzureIoTHub 1.3.8
AzureIoTUtility 1.3.8.1
ESP8266WiFi 1.0
ArduinoJson 6.15.2
AzureIoTProtocol_MQTT 1.3.8

此处在终端输出中带有许多警告:

链接.pio \ build \ nodemcuv2 \ firmware.elfc:/users/mmielnic/.platformio/packages/toolchain-xtensa/bin /../ lib / gcc / xtensa-lx106-elf / 4.8.2 /../../../../ xtensa-lx106 -elf / bin / ld.exe:.pio \ build \ nodemcuv2 \ lib1b2 \ libAzureIoTHub_ID480.a(iothub_client_core_ll.co):(。text.initialize_iothub_client + 0x6c):对IoTHubClient_LL_UploadToBlob_Destroy' c:/users/mmielnic/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: .pio\build\nodemcuv2\lib1b2\libAzureIoTHub_ID480.a(iothub_client_core_ll.c.o):(.text.initialize_iothub_client+0x78): undefined reference to IoTHubClient_LL_UploadToBlob_Create'的未定义引用c:/users/mmielnic/.platformio/packages/toolchain-xtensa/bin /../ lib / gcc / xtensa-lx106-elf / 4.8.2 /../../../../ xtensa-lx106 -elf / bin / ld.exe:.pio \ build \ nodemcuv2 \ lib1b2 \ libAzureIoTHub_ID480.a(iothub_client_core_ll.co):在函数initialize_iothub_client': iothub_client_core_ll.c:(.text.initialize_iothub_client+0x1de): undefined reference to IoTHubClient_LL_UploadToBlob_Destroy'中c:/users/mmielnic/.platformio/packages/toolchain-xtensa/bin /../ lib / gcc / xtensa-lx106-elf / 4.8.2 /../../../../ xtensa-lx106 -elf / bin / ld.exe:iothub_client_core_ll.c :(。text.initialize_iothub_client + 0x3ea):对IoTHubClient_LL_UploadToBlob_Create' c:/users/mmielnic/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: iothub_client_core_ll.c:(.text.initialize_iothub_client+0x486): undefined reference to IoTHubClient_LL_UploadToBlob_Destroy的未定义引用c:/users/mmielnic/.platformio/packages/toolchain-xtensa/bin /../ lib / gcc / xtensa-lx106-elf / 4.8.2 /../../../../ xtensa-lx106 -elf / bin / ld.exe:iothub_client_core_ll.c :(。text.initialize_iothub_client + 0x547):对IoTHubClient_LL_UploadToBlob_Destroy' c:/users/mmielnic/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: .pio\build\nodemcuv2\lib1b2\libAzureIoTHub_ID480.a(iothubtransport_mqtt_common.c.o):(.text.mqtt_operation_complete_callback+0x20): undefined reference to retry_control_reset的未定义引用c:/users/mmielnic/.platformio/packages/toolchain-xtensa/bin /../ lib / gcc / xtensa-lx106-elf / 4.8.2 /../../../../ xtensa-lx106 -elf / bin / ld.exe:.pio \ build \ nodemcuv2 \ lib1b2 \ libAzureIoTHub_ID480.a(iothubtransport_mqtt_common.co):在函数mqtt_operation_complete_callback': iothubtransport_mqtt_common.c:(.text.mqtt_operation_complete_callback+0xd3): undefined reference to retry_control_reset中c:/users/mmielnic/.platformio/packages/toolchain-xtensa/bin /../ lib / gcc / xtensa-lx106-elf / 4.8.2 /../../../../ xtensa-lx106 -elf / bin / ld.exe:.pio \ build \ nodemcuv2 \ lib1b2 \ libAzureIoTHub_ID480.a(iothubtransport_mqtt_common.co):(。text.free_transport_handle_data + 0x0):对retry_control_destroy' c:/users/mmielnic/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: .pio\build\nodemcuv2\lib1b2\libAzureIoTHub_ID480.a(iothubtransport_mqtt_common.c.o):(.text.free_transport_handle_data+0x1f): undefined reference to retry_control_destroy的未定义引用c:/users/mmielnic/.platformio/packages/toolchain-xtensa/bin /../ lib / gcc / xtensa-lx106-elf / 4.8.2 /../../../../ xtensa-lx106 -elf / bin / ld.exe:.pio \ build \ nodemcuv2 \ lib1b2 \ libAzureIoTHub_ID480.a(iothubtransport_mqtt_common.co):(。text.IoTHubTransport_MQTT_Common_SetRetryPolicy + 0x8):未定义的对retry_control_create' c:/users/mmielnic/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: .pio\build\nodemcuv2\lib1b2\libAzureIoTHub_ID480.a(iothubtransport_mqtt_common.c.o): in function YtTT_Common_SetRetryPolicy的引用iothubtransport_mqtt_common.c :(。text.IoTHubTransport_MQTT_Common_SetRetryPolicy + 0x37):对retry_control_create' c:/users/mmielnic/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: iothubtransport_mqtt_common.c:(.text.IoTHubTransport_MQTT_Common_SetRetryPolicy+0x60): undefined reference to retry_control_destroy的未定义引用c:/users/mmielnic/.platformio/packages/toolchain-xtensa/bin /../ lib / gcc / xtensa-lx106-elf / 4.8.2 /../../../../ xtensa-lx106 -elf / bin / ld.exe:.pio \ build \ nodemcuv2 \ lib1b2 \ libAzureIoTHub_ID480.a(iothubtransport_mqtt_common.co):在函数IoTHubTransport_MQTT_Common_Create': iothubtransport_mqtt_common.c:(.text.IoTHubTransport_MQTT_Common_Create+0x1ae): undefined reference to retry_control_create'中c:/users/mmielnic/.platformio/packages/toolchain-xtensa/bin /../ lib / gcc / xtensa-lx106-elf / 4.8.2 /../../../../ xtensa-lx106 -elf / bin / ld.exe:.pio \ build \ nodemcuv2 \ lib1b2 \ libAzureIoTHub_ID480.a(iothubtransport_mqtt_common.co):(。text.IoTHubTransport_MQTT_Common_DoWork + 0x64):对retry_control_should_retry' c:/users/mmielnic/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: .pio\build\nodemcuv2\lib1b2\libAzureIoTHub_ID480.a(iothubtransport_mqtt_common.c.o):(.text.IoTHubTransport_MQTT_Common_DoWork+0xca): undefined reference to retry_control_should_retry的未定义引用c:/users/mmielnic/.platformio/packages/toolchain-xtensa/bin /../ lib / gcc / xtensa-lx106-elf / 4.8.2 /../../../../ xtensa-lx106 -elf / bin / ld.exe:.pio \ build \ nodemcuv2 \ lib1b2 \ libAzureIoTHub_ID480.a(iothubtransport_mqtt_common.co):(。text.IoTHubTransport_MQTT_Common_SetOption + 0x50):对retry_control_set_option' c:/users/mmielnic/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: .pio\build\nodemcuv2\lib1b2\libAzureIoTHub_ID480.a(iothubtransport_mqtt_common.c.o): in function IoTHubTransport_Set_Option的未定义引用iothubtransport_mqtt_common.c :(。text.IoTHubTransport_MQTT_Common_SetOption + 0x192):对`retry_control_set_option'的未定义引用collect2.exe:错误:ld返回1退出状态*** [.pio \ build \ nodemcuv2 \ firmware.elf]错误1

esp8266 azure-iot-hub nodemcu arduino-esp8266 platformio
1个回答
0
投票

我已经找到了这个问题的原因。我根本没有解决缺少blob.h文件的先前问题。将新参数添加到platform.txt的解决方法不起作用,因此我不得不通过删除以下内容来手动修改文件iothub_client_ll_uploadtoblob.c:#include代码“ internal / blob.h”及其所有受影响的代码。

第二个问题是,缺少文件:用于nodemcuv2环境的iothub_client_retry_control.c。我不知道为什么它不存在,但是我使用了esp12e env中的文件,所以简单地复制了一下:.pio \ libdeps \ esp12e \ AzureIoTHub_ID480 \ src \ iothub_client_retry_control.c至.pio \ libdeps \ nodemcuv2 \ AzureIoTHub_ID480 \ src \ iothub_client_retry_control.c

之后,代码被编译,我能够连接到wifi并将消息发送到Azure ioT Hub。

希望对某人有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.