#include <WiFi.h>
#include <PubSubClient.h>
#include <WiFiClientSecure.h>
// Wi-Fi settings
const char* ssid = "T-HUB2.0";
const char* password = "Innovation";
// Azure IoT Hub settings
const char* mqttServer = "PASSDEMO1.azure-devices.net";
const int mqttPort = 8883;
const char* deviceId = "iotdevice01";
const char* connectionString = "SharedAccessSignature sr=PASSDEMO1.azure-devices.net%2Fdevices%2Fiotdevice01&sig=XXXXX&se=1687851087";
// TLS/SSL client setup
WiFiClientSecure wifiClient;
PubSubClient mqttClient(wifiClient);
// MQTT topics
const char* telemetryTopic = "devices/iotdevice01/messages/events/";
// MQTT callback function
void mqttCallback(char* topic, byte* payload, unsigned int length) {
// Handle incoming MQTT messages here if needed
}
void setup() {
Serial.begin(9600);
// Connect to Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
// Set MQTT server and port
mqttClient.setServer(mqttServer, mqttPort);
// Set MQTT callback function
mqttClient.setCallback(mqttCallback);
// Connect to MQTT broker
connectToMqttBroker();
}
void loop() {
if (!mqttClient.connected()) {
// Reconnect to MQTT broker if the connection is lost
connectToMqttBroker();
}
mqttClient.loop();
// Send telemetry data to Azure IoT Hub
float temperature = readTemperature();
char telemetryMessage[100];
snprintf(telemetryMessage, sizeof(telemetryMessage), "{\"temperature\": %.2f}", temperature);
mqttClient.publish(telemetryTopic, telemetryMessage);
delay(5000);
}
void connectToMqttBroker() {
while (!mqttClient.connected()) {
Serial.println("Connecting to MQTT broker...");
if (mqttClient.connect(deviceId, connectionString, "")) {
Serial.println("Connected to MQTT broker");
//mqttClient.subscribe("devices/your-device-id/messages/devicebound/#");
} else {
Serial.print("Failed, rc=");
Serial.print(mqttClient.state());
Serial.println(" Retrying in 5 seconds...");
delay(5000);
}
}
}
float readTemperature() {
// Code to read temperature from sensor
// Replace this with your own code
return 25.0;
}
我尝试使用上面的代码连接到Azure IoT Hub。它给了我这个错误。
Failed, rc=-2 Retrying in 5 seconds...
Connecting to MQTT broker...
不只是IOT Hub,当我尝试使用MQTT发布/订阅时,IOT Central和Event Grid也会出现相同的错误。首先,它无法连接。有人能解决这个问题吗?esp 32不使用pubsubclient连接到azure服务,或者我应该以某种方式修改mqtt代理吗?
1条答案
按热度按时间qojgxg4l1#
看起来你正在尝试使用
PubSubClient
示例连接到Azure IoT Hub。这是您尝试与IoT Hub建立连接的线路。
if (mqttClient.connect(deviceId, connectionString, ""))
。我已经研究了PubSubClient文件的实现,并且在接受连接字符串作为参数的文件中没有定义connect
方法的实现。你可以在你的机器上找到这个方法,可能在下面的目录下“C:\Users\Documents\Arduino\libraries\PubSubClient\src\PubSubClient. cpp”。我相信这是导致连接失败的原因。如果你使用Arduino IDE来测试这个连接,可以使用azure-sdk-for-c-arduino源代码。链路How to Setup and Run Azure SDK for Embedded C IoT Hub Client on Espressif ESP32提供了建立连接所需的配置和设置步骤。此代码示例使用az_iot_hub_client,用于与IoT Hub建立连接。
如果您不喜欢使用Arduino IDE,请参考Connect an ESPRESSIF ESP32 using Azure IoT Middleware for FreeRTOS中提供的步骤来建立连接。
希望这能帮上忙。干杯!