【问题标题】:Python script didn't show nodemcu data on raspberry pi (raspberry role is mqtt broker)Python 脚本没有在树莓派上显示 nodemcu 数据(树莓派角色是 mqtt 代理)
【发布时间】:2019-07-02 17:32:24
【问题描述】:

对不起,我的英语不好。 我在树莓派 3 上安装 mqtt(mosquitto) 并将 nodemcu 数据发送到代理。当我在终端中编写“mosquitto_sub -d -t tester”时,它会显示 nodemcu 数据,但我有一个 python3 脚本在我运行时运行但不显示任何内容,我不知道是什么问题

nodemcu 代码:

#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()

我删除了 include_dir 行 /etc/mosquitto/mosquitto.conf 并编写 linstener 1883

我的操作系统:2018-11-13-raspbian-stretch

【问题讨论】:

  • 你说过你使用'mosquitto_sub -d -t tester'来打印nodemcu数据。通过 python 客户端订阅 /tmp/room 主题。两者似乎都不一样。在 python 客户端中使用正确的主题?
  • 我再次编辑文本。是的,我使用相同的主题 /tmp/room
  • 你可以尝试删除python代码中的断开连接线并尝试吗?
  • MQTT 主题真的不应该以 / 开头
  • 我测试了有 / 和没有 /。该脚本对两者都没有响应

标签: python-3.x mqtt raspberry-pi3


【解决方案1】:

您使用的 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()

【讨论】:

  • 它只是不再显示连接的消息,并且每次重置 nodemcu 它都会重复连接的消息
猜你喜欢
  • 1970-01-01
  • 2022-08-06
  • 2018-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-28
  • 2016-10-22
  • 2015-03-22
相关资源
最近更新 更多