ardiuno小车收到mqtt信息“1”的时候停留7秒,收到mqtt发布消息停留14秒代码
时间: 2024-10-01 08:13:19 浏览: 6
在Arduino项目中,要实现当接收到MQTT主题为"1"的信息时小车停止并保持7秒,以及接收到任意其他消息时停留14秒,你需要使用`PubSubClient`库连接到MQTT服务器,并编写一个循环监听消息的回调函数。以下是一个简单的示例代码:
```cpp
#include <WiFi.h>
#include <PubSubClient.h>
// WiFi 和 MQTT 设置
const char* ssid = "your_wifi_ssid";
const char* password = "your_wifi_password";
const char* mqtt_server = "your_mqtt_server";
const int mqtt_port = 1883;
const char* mqtt_topic = "your_topic"; // 接收数据的主题
WiFiClient wifiClient;
PubSubClient client(wifiClient);
unsigned long lastMessageTime = 0; // 上次接收消息的时间
bool isMessageOne = false;
void setup() {
Serial.begin(9600);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
client.setServer(mqtt_server, mqtt_port);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop(); // 检查新的MQTT消息
// 检查是否收到新消息
String message = client.readStringUntil('\n');
if (message.startsWith("1")) {
isMessageOne = true;
lastMessageTime = millis();
} else {
isMessageOne = false;
}
// 根据消息内容调整停留时间
unsigned long currentTime = millis();
if (isMessageOne) {
if (currentTime - lastMessageTime > 7000) { // 7秒后继续
client.publish(mqtt_topic, "ack_1"); // 发送确认信息
isMessageOne = false;
}
} else {
if (currentTime - lastMessageTime > 28000) { // 14秒后继续
client.publish(mqtt_topic, "ack_other"); // 发送确认信息
lastMessageTime = 0; // 更新上次接收时间
}
}
// 其他小车控制逻辑放在这里...
}
void reconnect() {
while (!client.connect("ESPClient")) {
delay(5000);
Serial.print("Attempting MQTT connection... ");
}
Serial.println("connected");
}
```