我正在使用一些C.H.I.P.s(Think Raspberry Pi)开发一个项目,我需要将一些信息从一个从设备无线发送回主板。我使用Paho作为我的Mqtt客户端,并使用Mosquitto作为我的经纪人。我的问题是,当我按下连接到从属板的其中一个按钮时,它会发送我的消息,但是当主板收到它时,似乎是以“b”形式获取它。例如,如果我发送消息“off”,当我打印出msg.payload时,它会打印“b'off'”。这导致了一个问题,因为我无法比较该消息,以便从我的主板上执行命令。
这是我的奴隶委员会代码:
import paho.mqtt.client as paho
import CHIP_IO.GPIO as GPIO
import time
GPIO.cleanup()
GPIO.setup("XIO-P0", GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup("XIO-P2", GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
client = paho.Client()
client.connect("172.20.0.1", 1883)
print ("CONNECTED")
while True:
if (GPIO.input("XIO-P0") == False):
print ("Button P0 Pressed")
client.publish('tipup', 'flag')
time.sleep(1)
if (GPIO.input("XIO-P2") == False):
print ("Button P2 Pressed")
client.publish('tipup', 'off')
time.sleep(1)
这是我的主板代码(经纪人)
import paho.mqtt.client as paho
import CHIP_IO.GPIO as GPIO
GPIO.cleanup()
GPIO.setup("XIO-P2", GPIO.OUT)
GPIO.output("XIO-P2", GPIO.HIGH)
def on_connect(client, userdata, flags, rc):
print("Connected with result code " + str(rc))
client.subscribe("tipup")
print("Subscribed")
def on_message(client, userdata, msg):
print ("Message Received")
print (str(msg.payload))
if (msg.payload == 'flag'):
print("Went through 'flag' if statement")
print("Turning on LED")
GPIO.output("XIO-P2", GPIO.LOW)
if (msg.payload == 'off'):
print ("Turning off LED")
GPIO.output("XIO-P2", GPIO.HIGH)
client = paho.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("172.20.0.1", 1883)
client.loop_forever()
GPIO.cleanup()
当我在主板代码中打印str(msg.payload)时,会出现问题。我应该补充一点,这两个编译都很好并运行良好,这只是我在发现为什么它没有通过我在on_message()中的任何一个if语句时注意到的问题。
答案 0 :(得分:4)
'bXXX'
means bytes。使用前需要convert this to UTF-8:
msg.payload = msg.payload.decode("utf-8")
我不确定为什么有效载荷以字节为单位。