Appunti su MQTT

I miei appunti su MQTT e come usarlo su Arietta G25

Banco di prova

Connessioni tra led, pulsanti e Arietta G25 usati per fare il banco di test

Button Pin Led Pin
P1 PB14 Led 0 PC0
P2 PB13 Led 1 PC1
P3 PB12 Led 2 PC2
P4 PB11 Led 3 PC3
P5 PC31 Led 4 PC4
P6 PC27 Led 5 PC28
P7 PA5 Led 6 PA6
P8 PA7 Led 7 PA8

Installazione di paho-mqtt su Arietta G25

git clone https://github.com/eclipse/paho.mqtt.python.git
cd paho.mqtt.python.git
python setup.py install

Esempio client in Python e paho-mqtt

  • Apre una connessione con il broker MQTT pubblico iot.eclipse.org
  • Si sottoscrive a tutti gli eventi "arietta/#".
  • Quando piene premuto un tasto collegato a J4.40 su Arietta (PB14) pubblica il messaggio "on" sul topic "arietta/P1"
  • Cattura il messaggio da arietta/# e accende o spegne il led LED0 collegato su J4.29 (PC0)
import paho.mqtt.client as mqtt
import acmepins

broker="iot.eclipse.org"

LED0=acmepins.GPIO("J4.39","OUTPUT")
LED1=acmepins.GPIO("J4.37","OUTPUT")
LED2=acmepins.GPIO("J4.35","OUTPUT")
LED3=acmepins.GPIO("J4.33","OUTPUT")
LED4=acmepins.GPIO("J4.31","OUTPUT")
LED5=acmepins.GPIO("J4.29","OUTPUT")
LED6=acmepins.GPIO("J4.27","OUTPUT")
LED7=acmepins.GPIO("J4.25","OUTPUT")

P1=acmepins.GPIO("J4.40","INPUT")

def P1_pushed():
    global client
    print "P1 pushed"
    client.publish("arietta/P1", "on")

P1.set_edge("rising",P1_pushed,200)

# The callback for when the client receives a CONNACK response from the server.
def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe("arietta/#")

# The callback for when a PUBLISH message is received from the server.
def on_message(client, userdata, msg):
    global LED0
    
    print(msg.topic+" "+str(msg.payload))
    if msg.topic=="arietta/P1":
        if LED0.digitalRead():
            LED0.off()
        else:
            LED0.on()   

    if msg.topic=="arietta/LED0":
        if msg.payload=="on":
            LED0.on()
        else:
            LED0.off()  

    if msg.topic=="arietta/LED1":
        if msg.payload=="on":
            LED1.on()
        else:
            LED1.off()  

    if msg.topic=="arietta/LED2":
        if msg.payload=="on":
            LED2.on()
        else:
            LED2.off()  

    if msg.topic=="arietta/LED3":
        if msg.payload=="on":
            LED3.on()
        else:
            LED3.off()  

    if msg.topic=="arietta/LED4":
        if msg.payload=="on":
            LED4.on()
        else:
            LED4.off()  
            
    if msg.topic=="arietta/LED5":
        if msg.payload=="on":
            LED5.on()
        else:
            LED5.off()  

    if msg.topic=="arietta/LED6":
        if msg.payload=="on":
            LED6.on()
        else:
            LED6.off()  

    if msg.topic=="arietta/LED7":
        if msg.payload=="on":
            LED7.on()
        else:
            LED7.off()  

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect(broker, 1883, 60)

client.loop_forever()

Pannello Web

Links

Author:
Sergio Tanzilli - tanzilli@acmesystems.it
http://www.tanzilli.com - https://github.com/tanzilli