【发布时间】:2021-09-20 04:26:12
【问题描述】:
我正在开展一个项目,我需要通过 MQTT SIMCOM SIM7000E 将数据从 Arduino 传感器发送到 Azure IoT 中心。
设备连接良好,但发送任何内容时都失败了。我认为这可能是我配置凭据的方式?
IP:“hub.azure-devices.net”
客户端:“Sensor_0001”
用户名:“hub.azure-devices.net/Sensor_0001/?api-version=2018-06-30”
密钥:“SharedAccessSignature sr=Hub.azure-devices.net%2Fdevices%2FSensor_0001&sig=****”
主题:“Hub/devices/Sensor_0001/messages/events”
我对此很陌生,如果有任何帮助或建议,我将不胜感激。
谢谢
#include <Wire.h>
#include <DFRobot_SIM7000.h>
#include "Adafruit_FONA.h"
#include <SoftwareSerial.h>
#define serverIP "EEWHub.azure-devices.net"
#define IOT_CLIENT "EEW_Sensor_0001"
#define IOT_USERNAME "EEWHub.azure-devices.net/EEW_Sensor_0001/?api-version=2018-06-30"
#define IOT_KEY "SharedAccessSignature sr=EEWHub.azure-devices.net%2Fdevices%2FEEW_Sensor_0001&sig=ayW2DcT3YOJGQK6Ch8hEJyNF7MIaT%2BukyfJY03J1Y%2BM%3D&se=1632246687"
#define IOT_TOPIC "devices/EEW_Sensor_0001/messages/events/"
#define PIN_TX 7
#define PIN_RX 8
SoftwareSerial mySerial(PIN_RX, PIN_TX);
DFRobot_SIM7000 sim7000;
void simconnect() {
Serial.begin(115200);
while (!Serial);
sim7000.begin(mySerial);
Serial.println("Turn ON SIM7000......");
if (sim7000.turnON()) { //Turn ON SIM7000
Serial.println("Turn ON !");
}
delay(10000);
Serial.println("Set baud rate......");
while (1) {
if (sim7000.setBaudRate(19200)) { //Set SIM7000 baud rate from 115200 to 19200 reduce the baud rate to avoid distortion
Serial.println("Set baud rate:19200");
break;
} else {
Serial.println("Fail to set baud rate");
delay(1000);
}
}
Serial.println("Attaching service......");
while (1) {
if (sim7000.attachService()) { //Open the connection
Serial.println("Attach service");
break;
} else {
Serial.println("Fail to Attach service");
delay(1000);
}
}
}
void loop() {
String sendData;
Serial.print("Connect to :");
Serial.println(serverIP);
if (sim7000.openNetwork(TCP, serverIP, 8883)) { //Connect to server
Serial.println("Connected !");
} else {
Serial.println("Failed to connect");
return;
}
delay(200);
Serial.print("Connect to : ");
Serial.println(IOT_USERNAME);
if (sim7000.mqttConnect(IOT_CLIENT, IOT_USERNAME, IOT_KEY)) { //MQTT connect request
Serial.println("Connected !");
} else {
Serial.println("Failed to connect");
return;
}
delay(200);
Serial.println("Input data end with CRLF : ");
sendData = readSerial(sendData);
Serial.print("Send data : ");
Serial.print(sendData);
Serial.println(" ......");
if (sim7000.mqttPublish(IOT_TOPIC, sendData)) { //Send data to topic
Serial.println("Send OK");
} else {
Serial.println("Failed to send");
return;
}
delay(200);
Serial.println("Close connection......");
if (sim7000.closeNetwork()) { //Close connection
Serial.println("Close connection !");
} else {
Serial.println("Fail to close connection !");
return;
}
delay(2000);
}
String readSerial(String result) {
int i = 0;
while (1) {
while (Serial.available() > 0) {
char inChar = Serial.read();
if (inChar == '\n') {
result += '\0';
while (Serial.read() >= 0);
return result;
}
if (i == 50) {
Serial.println("The data is too long");
result += '\0';
while (Serial.read() >= 0);
return result;
}
if (inChar != '\r') {
result += inChar;
i++;
}
}
}
}
【问题讨论】:
-
它失败了怎么办?你得到什么错误?代码在哪里?
-
连接时显示“已连接!”但是当它发送任何内容时,它会显示“发送失败”。我已经上传了代码,但是我使用的是 Sim7000e 附带的库。它上升到 AT+CIPSEND,我认为这就是它停止的地方。
标签: azure arduino azure-iot-hub