用MQTT和Python控制程序

贡扎洛格

你们好 因此,我是Python的新手,并且是MQTT的新手。因此,我试图通过MQTT建立两个程序的简单连接。程序之一是发布者:

   import paho.mqtt.client as mqtt
   import sys, tty, termios 
   ## Publisher reads a keyboard input 
   def getch():
       fd = sys.stdin.fileno()
       old_settings = termios.tcgetattr(fd)
       try:
           tty.setraw(sys.stdin.fileno())
           ch = sys.stdin.read(1)
       finally:
           termios.tcsetattr(fd,termios.TCSADRAIN, old_settings)
           return ch

   while True:
   ##Publisher connects to MQTT broker
       mqttc= mqtt.Client("python_pub")
       mqttc.connect("iot.eclipse.org", 1883)
       char= getch()
       mqttc.publish("Labbo/control", str(char))
       mqtt.Client()

因此,基本上,发布者读取密钥输入并将其发送给代理。客户端程序应该读取按键并做出相应的反应:

   import paho.mqtt.client as mqtt

   def on_connect(client, userdata, flags, rc):
       print("Connected with result code "+str(rc))
       client.subscribe("Labbo/control")

   def on_message(client, userdata, msg):
       print(msg.topic+" "+str(msg.payload))
   ## v v PROBLEM LINE v v ## 
   char=str(msg.payload)
   ## ^ ^ PROBLEM LINE ^ ^ ##
   client = mqtt.Client()
   client.on_connect = on_connect
   client.on_message = on_message  
   client.connect("iot.eclipse.org", 1883, 60)
   ##The program just needs to close itself upon entering "x" on the Publisher
   while True:
       if char=="x":
          break

这是一个简单的测试程序,但是尝试“读取” MQTT有效负载时遇到了很多麻烦。

沙津

您的订户代码正在循环,没有做任何有效果的工作。必须进行如下更改

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
   print("Connected with result code "+str(rc))
   client.subscribe("Labbo/control")

def on_message(client, userdata, msg):
   print(msg.topic+" "+str(msg.payload))
   char = str(msg.payload)
   if char == 'x':
       client.disconnect()

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("iot.eclipse.org", 1883, 60)
client.loop_forever()

您的发布者代码也在其中,它在其中创建了一个新客户以发送一封信,这有点过头了

import paho.mqtt.client as mqtt
import sys, tty, termios
## Publisher reads a keyboard input 
def getch():
    fd = sys.stdin.fileno()
    old_settings = termios.tcgetattr(fd)
    try:
        tty.setraw(sys.stdin.fileno())
        ch = sys.stdin.read(1)
    finally:
        termios.tcsetattr(fd,termios.TCSADRAIN, old_settings)
    return ch


##Publisher connects to MQTT broker
mqttc= mqtt.Client("python_pub")
mqttc.connect("iot.eclipse.org", 1883)
mqttc.loop_start()

while True:
    char= getch()
    mqttc.publish("Labbo/control", str(char))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

控制程序生成平方的变体和衰减

来自分类Dev

C ++中的数据控制程序

来自分类Dev

到期日控制程序

来自分类Dev

当角色在Rails中枚举时,使用表单和控制程序操作来更改用户角色

来自分类Dev

使用Ubuntu桌面作为Upnp DMC(数字媒体控制程序)

来自分类Dev

使用Ubuntu桌面作为Upnp DMC(数字媒体控制程序)

来自分类Dev

从.NET Core 2.2升级到3.1时,无法禁用默认的API版本控制程序

来自分类Dev

用Django控制python程序

来自分类Dev

自制程序包管理器和sudo

来自分类Dev

如何使用定制程序_cloneDeepWith_和添加属性

来自分类Dev

如何使用定制程序_cloneDeepWith_和添加属性

来自分类Dev

如何创建文件比较和复制程序?

来自分类Dev

复制程序

来自分类Dev

轻松访问自制程序

来自分类Dev

无法更新自制程序

来自分类Dev

脚本和C二进制程序之间的竞争条件

来自分类Dev

绘制程序未使用并行数组正确存储大小和颜色

来自分类Dev

无需重新编译,是否强制程序和相关的DLL加载到较低的内存中?

来自分类Dev

在Mac OS X 10.8.4上使用自制程序和pip安装VirtualEnv

来自分类Dev

Python(Flask)和MQTT侦听

来自分类Dev

在python中控制ruby程序的stdin和stdout

来自分类Dev

二进制程序包控制文件的字段标识符中的有效字符

来自分类Dev

用python控制vlc

来自分类Dev

在SICP中创建强制程序

来自分类Dev

JavaFX:使用Canvas绘制程序

来自分类Dev

自制程序不会链接git

来自分类Dev

自制程序无法安装节点0.10.24

来自分类Dev

自动完成:抑制程序的热情

来自分类Dev

自制程序找不到XCode 4.3