Arduino MKRGSM 1400在连接到MQTT时崩溃
我有一个关于Arduino MKRGSM 1400和MQTT的问题 我使用下面的代码通过SIM卡将MKRGSM连接到internet,然后将其连接到Docker上安装的HiveMQ代理。即使代码编译时没有任何错误,但一旦我将其上传到我的板上,它就会崩溃。一旦它崩溃,我必须完全重置我的板。我在VS代码中使用Arduino IDE和Platform.io尝试了这段代码,两者都给出了相同的结果 在我连接MQTT之前,主板成功连接到互联网,DHT11传感器能够毫无问题地读取湿度和温度值 我对Arduino不太在行,这是我第一次尝试自己使用MQTT 有人知道为什么代码不仅不起作用,而且使我的电路板崩溃吗? 提前谢谢Arduino MKRGSM 1400在连接到MQTT时崩溃,arduino,mqtt,Arduino,Mqtt,我有一个关于Arduino MKRGSM 1400和MQTT的问题 我使用下面的代码通过SIM卡将MKRGSM连接到internet,然后将其连接到Docker上安装的HiveMQ代理。即使代码编译时没有任何错误,但一旦我将其上传到我的板上,它就会崩溃。一旦它崩溃,我必须完全重置我的板。我在VS代码中使用Arduino IDE和Platform.io尝试了这段代码,两者都给出了相同的结果 在我连接MQTT之前,主板成功连接到互联网,DHT11传感器能够毫无问题地读取湿度和温度值 我对Arduin
//Includes
#include <PubSubClient.h>
#include <MKRGSM.h>
#include "DHT.h"
#include <Adafruit_Sensor.h>
//Var declaration
//SIM-internet connection
GSMClient net;
GPRS gprs;
GSM gsmAccess;
const char pin[] = "my pin";
const char apn[] = "my apn";
const char login[] = "my login";
const char password[] = "my password";
//MQTT connection
PubSubClient client;
const String serialNumber = "1";
const String mqtt_server = "server_ip";
const String topic = "/prototype/" + serialNumber;
//DHT sensor PIN declaration
#define DHTPIN 2 //DHT is pinned on 2
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void connect() {
//SIM not connected
bool connected = false;
Serial.print("Connecting to cellular network.");
//SIM connecting
while (!connected) {
if ((gsmAccess.begin(pin) == GSM_READY) &&
(gprs.attachGPRS(apn, login, password) == GPRS_READY)) {
//SIM connected
connected = true;
Serial.print("Connected to cellular network.");
}
else {
//If SIM doesn't connect
Serial.print(".");
delay(1000);
}
}
}
void setup() {
Serial.begin(9600);
//Connect to Docker MQTT
client.setServer(mqtt_server.c_str(), 8086);
client.connect(serialNumber.c_str());
Serial.print("MQTT connection state: ");
Serial.println(client.state());
//Start DHT 11
dht.begin();
}
void loop() {
delay(10000);
//Get DHT values
float humidty = dht.readHumidity();
float temperature = dht.readTemperature();
//Create JSON out of values and send it.
const String json = "{\"temperature\": " + String(temperature, 2) + ", \"humidity\": " + String(humidty) + " }";
Serial.println(json);
client.publish(topic.c_str(), json.c_str());
//Check if MQTT connection is holding.
Serial.print("MQTT connection state: ");
Serial.println(client.state());
//Reconnect if MQTT connection is lost.
if (!client.connected()) {
Serial.println("MQTT disconnected! Trying reconnect.");
client.connect("whatever");
}
}
如评论中所述 您从未调用连接功能,因此从未设置GSM网络
然后,您可能需要使用GSMClient初始化PubSubClient,以便它知道如何访问网络。您没有在循环函数中调用client.loop,因此MQTT客户端没有任何时间处理事情。此外,您还应该编辑问题,以包括来自应用程序的串行跟踪,这样我们就有一半的机会猜猜它在哪里坠毁。首先,谢谢你的快速反应。我想发布序列跟踪,但没有。代码上载完成,然后我收到一个Windows通知,说明我的设备已损坏。我必须上传一个干净的Arduino脚本来修复它。它与任何其他脚本一起工作都没有问题。再次检查,您没有调用连接函数或初始化PubSubClient,因此您将永远无法访问第一个Serial.println callYup,就是这样。谢谢你的帮助。