python-3.x - Python 脚本没有在树莓派上显示 nodemcu 数据(树莓派角色是 mqtt 代理)
问题描述
对不起,我的英语不好。我在树莓派 3 上安装 mqtt(mosquitto) 并将 nodemcu 数据发送到代理。当我在终端中编写“mosquitto_sub -d -t tester”时,它会显示 nodemcu 数据,但是我有一个 python3 脚本在我运行时运行但不显示任何内容,我不知道是什么问题
节点代码:
#include <ESP8266WiFi.h>
#include <PubSubClient.h>
const char* ssid = "ssid";
const char* wifi_password = "wifi_password";
const char* mqtt_server = "192.168.1.103";
const char* mqtt_topic = "/tmp/room";
const char* clientID = "123";
WiFiClient wifiClient;
PubSubClient client(mqtt_server, 1883, wifiClient);
void setup() {
Serial.begin(115200);
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, wifi_password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (client.connect(clientID)) {
Serial.println("Connected to MQTT Broker!");
}
else {
Serial.println("Connection to MQTT Brokers pressed down");
// (i.e. if the state of the b failed...");
}
}
void loop() {
char ldr_value [10] = {'b', 'd', 'l', 't', 'd'};
delay(5000);
client.publish(mqtt_topic, ldr_value);
}
python3脚本:
import paho.mqtt.client as mqtt
mqtt_topic = "/tmp/room"
mqtt_broker_ip = "localhost"
client = mqtt.Client()
def on_connect(client, userdata, rc):
print("Connected!", str(rc))
client.subscribe(mqtt_topic)
def on_message(client, userdata, msg):
print("Topic: ", msg.topic + "\nMessage: " + str(msg.payload))
client.on_connect = on_connect
client.on_message = on_message
client.connect(mqtt_broker_ip, 1883)
client.loop_forever()
client.disconnect()
我删除 /etc/mosquitto/mosquitto.conf 中的 include_dir 行并编写 linstener 1883
我的操作系统:2018-11-13-raspbian-stretch
解决方案
您使用的 on_connect 方法不正确。我已经修改了您的代码并对其进行了测试。有用
import paho.mqtt.client as mqtt
client = mqtt.Client("123")
def on_connect(client, userdata, flags, rc):
print("Connected!", str(rc))
client.subscribe("test")
def on_message(client, userdata, msg):
print("Topic: ", msg.topic + "\nMessage: " + str(msg.payload))
client.on_connect = on_connect
client.on_message = on_message
client.connect("localhost", 1883, 60)
client.loop_forever()
推荐阅读
- reactjs - 这是存储子集合的正确方法吗?
- sql-server - 如何使用 Transact-SQL 查询获取默认数据库名称?
- data-structures - 二叉树的空指针排列
- javascript - 如何在 ng-map (AngluarJS) 中为我的信息窗口添加悬停效果?
- vb.net - Selenium MoveByOffset 只工作一次
- python - TypeError:“numpy._DTypeMeta”对象不可下标
- php - php curl响应未显示
- reactjs - 如何在 react-redux 中更新对象的状态
- firebase - 规则评估中的 get() 调用是否会为通过 Firestore 查询中提取的每个文档收取额外的读取费用?
- android - ?attr/selectableItemBackgroundBorderless 在 Toolbar Android Studio 内的 ImageView 中不起作用