csa 发表于 2024-3-18 09:55:30

4G模块发送AT指令连接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上连了个温度传感器



页: [1]
查看完整版本: 4G模块发送AT指令连接onenet显示设备不在线