Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

Raspberry Pi 上の Python で WebSocket を使用したパブリッシュ

この例では、Python® を実行する Raspberry Pi™ ボードを使用して、ThingSpeak™ チャネルに、ポート 80 で WebSocket を使用してパブリッシュする方法を説明します。ThingSpeak に送信するセンサーの値が複数ある場合には、複数の値をチャネル フィードにパブリッシュするよう選択できます。この例では、Raspberry Pi ボードの CPU および RAM の使用量が 20 秒ごとに収集され、値がチャネル フィードにパブリッシュされます。また、更新する値が 1 つのみの場合は、単一の値をチャネル フィールドにパブリッシュできます。

 完全なコードはここをクリック

  1. 新しいチャネルでデータの収集での説明に従って新しいチャネルを作成します。

  2. Python 用の Paho MQTT クライアント ライブラリをダウンロードします。paho.mqtt.publish as publishpsutilstringrandomprint_function の各ライブラリを Python コードにインクルードします。

    from __future__ import print_function
    import paho.mqtt.publish as publish
    import psutil
    import string
    import random

  3. ThingSpeak と通信するための変数を定義します。チャネル ID、Write API キー、および MQTT API キーを編集します。

    string.alphanum='1234567890avcdefghijklmnopqrstuvwxyzxABCDEFGHIJKLMNOPQRSTUVWXYZ'
    
    # The ThingSpeak Channel ID.
    # Replace <YOUR-CHANNEL-ID> with your channel ID.
    channelID = "<YOUR-CHANNEL-ID>"
    
    # The Write API Key for the channel.
    # Replace <YOUR-CHANNEL-WRITEAPIKEY> with your write API key.
    writeAPIKey = "<YOUR-CHANNEL-WRITEAPIKEY>"
    
    # The Hostname of the ThingSpeak MQTT broker.
    mqttHost = "mqtt.thingspeak.com"
    
    # You can use any Username.
    mqttUsername = "TSMQTTRpiDemo"
    
    # Your MQTT API Key from Account > My Profile.
    mqttAPIKey ="XXXXXXXXXXXXXXXX"

  4. 接続タイプを websockets として定義し、ポートを 80 に設定します。

    tTransport = "websockets"
    tPort = 80

  5. Publish to a Channel Feedに示した形式で、指定したチャネルの Field 1 および Field 2 を同時に更新するトピックの文字列を作成します。

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

  6. システムの RAM と CPU のパフォーマンスを 20 秒ごとに計算し、これらの値をパブリッシュするループを実行します。WebSocket を使用して、指定したチャネルの Field 1 と 2 へ同時にパブリッシュします。

    while(1):
    
        clientID=''
    
    # Create a random clientID.
        for x in range(1,16):
            clientID+=random.choice(string.alphanum)
    
        # get the system performance data over 20 seconds.
        cpuPercent = psutil.cpu_percent(interval=20)
        ramPercent = psutil.virtual_memory().percent
    
        # build the payload string.
        payload = "field1=" + str(cpuPercent) + "&field2=" + str(ramPercent)
    
    
        # attempt to publish this data to the topic.
        try:
            publish.single(topic, payload, hostname=mqttHost, transport=tTransport, port=tPort,auth={'username':mqttUsername,'password':mqttAPIKey})
            print (" Published CPU =",cpuPercent," RAM =", ramPercent," to host: " , mqttHost , " clientID= " , clientID)
    
        except (KeyboardInterrupt):
            break
    
        except:
            print ("There was an error while publishing the data.")

参考

関連する例

詳細