Main Content

Questa pagina è stata tradotta con la traduzione automatica. Fai clic qui per vedere l’originale in inglese.

Pubblica utilizzando WebSocket in Python su un Raspberry Pi

Questo esempio mostra come utilizzare WebSocket sulla porta 80 per pubblicare su un canale ThingSpeak utilizzando una scheda Raspberry Pi che esegue Python. Se disponi di più valori del sensore che desideri inviare a ThingSpeak, puoi pubblicare più valori in un feed di canale. In questo esempio, i dati sull'utilizzo della CPU e della RAM della scheda Raspberry Pi vengono raccolti ogni 20 secondi e i valori vengono pubblicati su un feed di canale. In alternativa, se hai un solo valore da aggiornare, puoi pubblicare un singolo valore in un campo canale.

Impostazione

1) Crea un nuovo canale come mostrato in Collect Data in a New Channel.

2) Crea un dispositivo MQTT facendo clic su Dispositivi > MQTT nella parte superiore della pagina ThingSpeak , quindi su Aggiungi dispositivo. Durante la configurazione del dispositivo e l'aggiunta del nuovo canale all'elenco autorizzato, fare clic su Scarica credenziali > Testo normale. Per i dettagli, vedere Crea un dispositivo MQTT ThingSpeak. Utilizza le credenziali salvate nella sezione Codice di seguito.

3) Scarica la libreria client Paho MQTT per Python. È possibile utilizzare la riga di comando per installare le librerie. Se stai usando Python 2, usa questo codice:

sudo pip install paho-mqtt
sudo pip install psutil

Se usi Python 3, usa questo codice:

sudo pip3 install paho-mqtt
sudo pip3 install psutil

Codice

1) Includere le librerie paho.mqtt.publish as publish, psutil e string nel codice Python.

import paho.mqtt.publish as publish
import psutil
import string

2) Definire le variabili per comunicare con ThingSpeak. Modifica l'ID del canale e le credenziali del dispositivo MQTT.

# The ThingSpeak Channel ID.
# Replace <YOUR-CHANNEL-ID> with your channel ID.
channel_ID = "<YOUR-CHANNEL-ID>"

# The hostname of the ThingSpeak MQTT broker.
mqtt_host = "mqtt3.thingspeak.com"

# Your MQTT credentials for the device
mqtt_client_ID = "<YOUR-CLIENT-ID>"
mqtt_username  = "<YOUR-USERNAME>"
mqtt_password  = "<YOUR-MQTT-PASSWORD>"

3) Definire il tipo di connessione come websockets e impostare la porta su 80.

t_transport = "websockets"
t_port = 80

4) Creare una stringa di argomento nella forma mostrata in Publish to a Channel Feed che aggiorna simultaneamente il campo 1 e il campo 2 del canale specificato.

# Create the topic string.
topic = "channels/" + channel_ID + "/publish"

5) Esegui un ciclo che calcola le prestazioni della RAM di sistema e della CPU ogni 20 secondi e pubblica i valori calcolati. Pubblica contemporaneamente sui campi 1 e 2 del canale specificato utilizzando WebSocket.

while (True):

    # get the system performance data over 20 seconds.
    cpu_percent = psutil.cpu_percent(interval=20)
    ram_percent = psutil.virtual_memory().percent

    # build the payload string.
    payload = "field1=" + str(cpu_percent) + "&field2=" + str(ram_percent)

    # attempt to publish this data to the topic.
    try:
        print ("Writing Payload = ", payload," to host: ", mqtt_host, " clientID= ", mqtt_client_ID, " User ", mqtt_username, " PWD ", mqtt_password)
        publish.single(topic, payload, hostname=mqtt_host, transport=t_transport, port=t_port, client_id=mqtt_client_ID, auth={'username':mqtt_username,'password':mqtt_password})
    except (keyboardInterrupt)
        break
    except Exception as e:
        print (e) 

Esegui il programma e guarda il canale per aggiornamenti regolari dal tuo dispositivo.

Vedi anche

|

Esempi correlati

Ulteriori informazioni