我试图在一个ubuntu20系统上的Arduino WifiRev2和python脚本之间建立一个MQTT连接。
为了测试目的,arduino连接了3个超声波传感器和一个陀螺传感器。
mqtt-连接似乎运行良好,arduino确实发布了传感器数据,并且还接收来自python脚本的命令。
但是传感器数据不是同步发送的。首先发送的传感器比其他传感器数据收到的频率要高得多(大约是faktor 4)。
该脚本是从下面的示例代码中采用的:https://docs.arduino.cc/tutorials/uno-wifi-rev2/uno-wifi-r2-mqtt-device-to-device
下面是我的arduino脚本中的循环:
const long interval = 30;
unsigned long previousMillis = 0;
void loop() {
mqttClient.poll();
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
// save the last time a message was sent
previousMillis = currentMillis;
//record random value from A0, A1 and A2
//int Rvalue = analogRead(A0);
int gyroSCL = digitalRead(gryoSCL_PIN);
int gyroSDA = digitalRead(gryoSDA_PIN);
int l_distance = getUSensDistance(USens_L_Trig_Pin,USens_L_Echo_Pin);
int r_distance = getUSensDistance(USens_R_Trig_Pin,USens_R_Echo_Pin);
int f_distance = getUSensDistance(USens_F_Trig_Pin,USens_F_Echo_Pin);
int g_value = getGyro();
mqttClient.beginMessage(topicL);
mqttClient.print(l_distance);
mqttClient.endMessage();
mqttClient.beginMessage(topicR);
mqttClient.print(r_distance);
mqttClient.endMessage();
mqttClient.beginMessage(topicF);
mqttClient.print(f_distance);
mqttClient.endMessage();
mqttClient.beginMessage(topicG);
mqttClient.print(g_value);
mqttClient.endMessage();
//Serial.println();
}
}
python脚本基于以下示例:https://www.emqx.com/en/blog/how-to-use-mqtt-in-python
python订阅服务器中的打印示例如下所示:
Connected to MQTT Broker!
Received `44` from `usens_l` topic (timeDiff: 678024
Received `25` from `usens_f` topic (timeDiff: 882899
Received `44` from `usens_l` topic (timeDiff: 87380
Received `49` from `usens_l` topic (timeDiff: 274183
Received `44` from `usens_l` topic (timeDiff: 501763
Received `44` from `usens_l` topic (timeDiff: 702241
Received `44` from `usens_l` topic (timeDiff: 911118
Received `44` from `usens_l` topic (timeDiff: 113206
Received `44` from `usens_l` topic (timeDiff: 316174
Received `45` from `usens_l` topic (timeDiff: 521477
Received `45` from `usens_l` topic (timeDiff: 725778
Received `45` from `usens_l` topic (timeDiff: 930363
Received `-1` from `gyro` topic (timeDiff: 135167
Received `45` from `usens_l` topic (timeDiff: 354054
Received `54` from `usens_l` topic (timeDiff: 647140
Received `42` from `usens_r` topic (timeDiff: 647306
Received `41` from `usens_r` topic (timeDiff: 852423
Received `55` from `usens_l` topic (timeDiff: 58828
Received `55` from `usens_l` topic (timeDiff: 261107
Received `55` from `usens_l` topic (timeDiff: 465823
Received `55` from `usens_l` topic (timeDiff: 671458
因此,显然有些传感器数据没有发送(或未接收)。我尝试了不同的间隔,但无论如何,usens_l似乎比其他数据频繁得多。
可以有一种更简单的方法来同步发送数据,但是构建一个字符串或计算到单个值来集成数据并立即发送。也许这就是我目前问题的解决方案。但我想了解,为什么这种沟通不像预期的那样有效。
谢谢你的提示!
发布于 2022-05-11 15:18:44
好吧,我找到了解决办法,这比预期的要容易得多:
我只需安装本地的蚊子服务器(作为ubuntu服务),现在日志如下所示:
Received `49` from `usens_l` topic (timeDiff: 305325
Received `82` from `usens_r` topic (timeDiff: 305449
Received `16` from `usens_f` topic (timeDiff: 307354
Received `-1` from `gyro` topic (timeDiff: 309461
Received `49` from `usens_l` topic (timeDiff: 334474
Received `82` from `usens_r` topic (timeDiff: 337135
Received `16` from `usens_f` topic (timeDiff: 337257
Received `-1` from `gyro` topic (timeDiff: 339283
https://stackoverflow.com/questions/72200178
复制相似问题