2016-12-01 1 views
3

Je travaille sur un projet en utilisant certains C.H.I.P.s (Think Raspberry Pi) où je dois envoyer sans fil certaines informations d'un esclave à une carte mère. J'utilise Paho comme client Mqtt et j'utilise Mosquitto comme courtier. Mon problème est quand je pousse l'un des boutons connectés à la carte esclave, il envoie mon message, mais quand le tableau maître le reçoit, il semble l'obtenir sous la forme "b '". Par exemple, si j'envoie le message "off", lorsque j'imprime msg.payload, il imprime "b'off '". Cela cause un problème parce que je ne peux pas comparer le message pour faire des commandes hors de ma carte principale.Python - Pourquoi mon message Paho Mqtt est-il différent de celui que j'ai envoyé?

Voici mon code Conseil esclave:

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) 

Et voici mon code Board Master (Broker)

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

Le problème se produit lorsque j'imprime str (msg.payload) dans mon Maître code du tableau. Je devrais ajouter que ces deux compilent bien et s'exécutent bien, c'est juste un problème que j'ai remarqué quand je comprenais pourquoi il ne passait pas par l'une des déclarations if que j'ai dans on_message().

+0

Vous devez d'abord ajouter 'client.loop()' à la boucle while dans le code de la carte esclave. Que se passe-t-il aussi si vous utilisez mosquitto_sub pour voir ce qui est publié? – hardillb

+0

@hardillb: Je peux répondre à cette question, parce que j'ai le ** exact ** même problème. Toutes les charges utiles de mes messages sont enveloppées dans 'b'' et' '' (par exemple 'b'msg''). Mais lorsque vous utilisez mosquitto_sub pour voir ce qui est publié, c'est juste msg, donc c'est quelque chose à voir avec paho-mqtt. – user128216

Répondre