azure - 无法将 esp8266 设备连接到 azure IoT hub
问题描述
我正在尝试使用 arduino 编写的代码将 esp8266(esp-12e 节点 mcu 1.0)连接到 azure iot hub。我创建了一个 iot 集线器和一个使用对称密钥身份验证的设备。使用PubSubClient和 WifiClientSecure 库来提供安全的 mqtt 连接(端口 8883)。为设备生成了一个 SAS 令牌。似乎无法连接到 azure 并不断收到 mqtt 断开连接错误 (-1)。哦,下载并添加天蓝色的巴尔的摩 CyberTrust 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();
}
}
}
解决方案
推荐阅读
- powerapps - Microsoft Power Platform 连接器和提供程序的源代码在哪里?
- r - R:使用 RSelenium 捕获删除线文本
- android - Android Datastore IOException 无法重命名为
- mysql - 有没有办法在 MySQL 上生成 ULID?
- android-mediaplayer - Android 媒体播放器在退出时崩溃
- postgresql - PostgreSQL 规划器不想对布尔列使用布隆索引
- php - 开放 API/Swagger Symfony 注解?
- php - 如何设置默认值下拉选择列表表单leftjoin表
- python - QSQLITE ATTACH DATABASE 挂起的原因可能是什么
- python - 在游戏中实现验证规则的问题