【问题标题】:Can't send anything to Azure IoT hub无法向 Azure IoT 中心发送任何内容
【发布时间】: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


【解决方案1】:

您的主题似乎不正确。请尝试以下操作:

devices/Sensor_0001/messages/events/

查看doc 了解更多详情。

以下屏幕 sn-p 显示 MQTTBox 客户端示例:

更新:

我已经根据您的示例测试了连接性,以下屏幕显示了结果:

【讨论】:

  • 感谢您的回复。我已将主题更改为该主题,但仍然没有发送...也许它是调制解调器附带的坏库?不太确定
  • 如果主题不正确,则设备与 Azure IoT 中心断开连接。我建议使用 MQTTBox 客户端工具进行测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 2018-10-15
  • 2022-01-19
  • 1970-01-01
相关资源
最近更新 更多