can';t将esp8266设备连接到azure IoT集线器
我正在尝试使用arduino编写的代码将esp8266(esp-12e节点mcu 1.0)连接到azure iot hub。我已经创建了一个物联网集线器和一个使用对称密钥身份验证的设备。使用WifiClientSecure库提供安全的mqtt连接(端口8883)。已为设备生成SAS令牌。似乎无法连接到azure并继续获取mqtt断开连接错误(-1)。哦,下载并添加azure Baltimore CyberTrust根CAcan';t将esp8266设备连接到azure IoT集线器,azure,arduino,mqtt,iot,esp8266,Azure,Arduino,Mqtt,Iot,Esp8266,我正在尝试使用arduino编写的代码将esp8266(esp-12e节点mcu 1.0)连接到azure iot hub。我已经创建了一个物联网集线器和一个使用对称密钥身份验证的设备。使用WifiClientSecure库提供安全的mqtt连接(端口8883)。已为设备生成SAS令牌。似乎无法连接到azure并继续获取mqtt断开连接错误(-1)。哦,下载并添加azure Baltimore CyberTrust根CA #define AZURE //#define AWS #ifdef A
#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();
}
}
}
#定义AZURE
//#定义AWS
#ifdef AZURE
#包括“secretsAzure.h”
#定义的elif(AWS)
#包括“secretsAws.h”
#恩迪夫
#包括
#包括
#包括
#包括
BearSSL::WiFiClientSecure网络;
BearSSL::X509List证书(cacert);
PubSubClient客户端(网络);
void connectToWiFi()
{
串行打印(“连接到wifi”);
while(WiFi.status()!=WL_已连接)
{
连续打印(“.”);
延迟(1000);
}
Serial.println(“ok!”);
}
void connectToMqtt()
{
串行打印(“MQTT连接”);
而(!client.connected())
{
if(client.connect(THINGNAME、USER、SAS_令牌))
{
Serial.println(“已连接!”);
if(!client.subscribe(MQTT_子主题))
Serial.println(client.state());
}
其他的
{
串行打印(“失败”);
Serial.println(client.state());
延迟(5000);
}
}
}
无效设置()
{
pinMode(MYPIN,输出);
序列号开始(115200);
WiFi.hostname(THINGNAME);
WiFi.模式(WiFi_STA);
WiFi.begin(ssid,pass);
connectToWiFi();
net.setTrustAnchors(&cert);
setServer(MQTT_主机、MQTT_端口);
延迟(5000);
connectToMqtt();
}
无符号长lastMillis=0;
void循环()
{
如果(!client.connected())
connectToMqtt();
其他的
{
client.loop();
如果(毫秒()-lastMillis>5000)
{
lastMillis=millis();
//sendData();
}
}
}
编辑问题以显示您的代码,我们无法调试看不到的内容。添加,谢谢@hardillbI在一年前尝试做类似的事情,但失败了,因为esp8266无法处理azure要求的令牌大小。我不知道这是不是同样的情况,但我会调查一下。