4G模块发送AT指令连接onenet显示设备不在线

2024-03-185353
AI 快速预览详细 收起
本文讨论了4G模块通过AT指令连接OneNet时设备不在线的问题。文章详细介绍了如何通过串口调试助手验证AT指令,并将其集成到Arduino代码中。最终目标是确保4G模块能够成功连接到OneNet云平台并上传温度传感器数据。
#include <OneWire.h>
#include <DallasTemperature.h>

OneWire oneWire_2(2);
DallasTemperature sensors_2(&oneWire_2);
DeviceAddress insideThermometer;

const char* mqtt_server = "183.230.40.39"; // OneNet的IP地址
const char* mqtt_devid = "1205002978";     // 设备ID
const char* mqtt_pubid = "628726";         // 产品ID
const char* mqtt_password = "4g";     // 鉴权信息

float ds18b20_2_getTemp(int w) {
  sensors_2.requestTemperatures();
  if(w == 0) {
    return sensors_2.getTempC(insideThermometer);
  }
  else {
    return sensors_2.getTempF(insideThermometer);
  }
}

void setup4G() {

  Serial1.println("AT");
  delay(100);

  // 查询卡状态
  Serial1.println("AT+CPIN?");
  delay(100);

  // 查询网络注册情况
  Serial1.println("AT+CREG?");
  delay(100);

  // 激活网络
  Serial1.println("AT+CSTT");
  delay(100);
  Serial1.println("AT+CIICR");
  delay(100);
  Serial1.println("AT+CIFSR");
  delay(100);
}

void setupMQTT() {
  // 设置 MQTT 相关参数
  Serial1.print("AT+MCONFIG=");
  Serial1.print(mqtt_devid);
  Serial1.print(",");
  Serial1.print(mqtt_pubid);
  Serial1.print(",");
  Serial1.print(mqtt_password);
  Serial1.println();
  delay(200);
}

void connectToServer() {
  // 建立 TCP 连接
  Serial1.print("AT+MIPSTART=");
  Serial1.print(mqtt_server);
  Serial1.print(",6002");
  Serial1.println();
  delay(200);

  // 客户端向服务器请求会话连接
  Serial1.println("AT+MCONNECT=1,60");
  delay(100);
}

void publishMessage(float temp) {
  // 发布消息
  Serial1.print("AT+MPUB=");
  Serial1.print("$dp");
  Serial1.print(",0,0,{\"temp\":");
  Serial1.print(temp);
  Serial1.println("}");
  delay(1000);
}

void setup() {
  Serial1.begin(115200); // 设置串口1波特率
  Serial.begin(9600);
  delay(100);

  sensors_2.begin();
  sensors_2.getAddress(insideThermometer, 0);
  sensors_2.setResolution(insideThermometer, 9);

  setup4G();  // 初始化4G模块
  setupMQTT(); // 设置MQTT参数
}



void loop() {
  connectToServer(); // 连接服务器

  // 获取温度数据
  float temperature = ds18b20_2_getTemp(0);

  // 发布温度数据
  publishMessage(temperature);

  // 查询 MQTT 连接状态
  Serial1.println("AT+MQTTSTATU");
  delay(500);

  // 检查串口是否有数据可读
  if (Serial1.available()) {
    // 读取并打印串口数据
    Serial.println("Received data from Serial1:");
    while (Serial1.available()) {
      char receivedChar = Serial1.read();
      Serial.print(receivedChar);
    }
    Serial.println();
  }
}
代码运行出现乱码,onenet云平台还是没有设备显示在线,用串口调试助手去发送at指令就能连上云平台,写在Arduino上就没有反应,求大神朋友们告知我原因,4g模块的rx和tx连接的ESP32的1号串口,ESP32用的USB线连接电脑,esp32上连了个温度传感器



创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -