首页 > 解决方案 > 无法将 esp8266 设备连接到 azure IoT hub

问题描述

我正在尝试使用 arduino 编写的代码将 esp8266(esp-12e 节点 mcu 1.0)连接到 azure iot hub。我创建了一个 iot 集线器和一个使用对称密钥身份验证的设备。使用PubSubClient和 WifiClientSecure 库来提供安全的 mqtt 连接(端口 8883)。为设备生成了一个 SAS 令牌。似乎无法连接到 azure 并不断收到 mqtt 断开连接错误 (-1)。哦,下载并添加天蓝色的巴尔的摩 Cyber​​Trust Root CA

#define AZURE
//#define AWS

#ifdef AZURE
#include "secretsAzure.h"
#elif defined(AWS)
#include "secretsAws.h"
#endif

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <ArduinoJson.h>
#include <PubSubClient.h>

BearSSL::WiFiClientSecure net;
BearSSL::X509List cert(cacert);
PubSubClient client(net);

void connectToWiFi()
{
    Serial.print("connecting to wifi");
    while (WiFi.status() != WL_CONNECTED)
    {
        Serial.print(".");
        delay(1000);
    }
    Serial.println("ok!");
}


void connectToMqtt()
{
    Serial.print("MQTT connecting ");
    while (!client.connected())
    {
        if (client.connect(THINGNAME, USER, SAS_TOKEN))
        {
            Serial.println("connected!");
            if (!client.subscribe(MQTT_SUB_TOPIC))
                Serial.println(client.state());
        }
        else
        {
            Serial.print("failed ");
            Serial.println(client.state());
            delay(5000);
        }
    }
}

void setup()
{
    pinMode(MYPIN, OUTPUT);
    Serial.begin(115200);

    WiFi.hostname(THINGNAME);
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, pass);
    connectToWiFi();

    net.setTrustAnchors(&cert);

    client.setServer(MQTT_HOST, MQTT_PORT);
    delay(5000);

    connectToMqtt();
}

unsigned long lastMillis = 0;
void loop()
{
    if (!client.connected())
        connectToMqtt();
    else
    {
        client.loop();
        if (millis() - lastMillis > 5000)
        {
            lastMillis = millis();
            //sendData();
        }
    }
}

标签: azurearduinomqttiotesp8266

解决方案


推荐阅读