Main Content

本页采用了机器翻译。点击此处可查看英文原文。

在 Raspberry Pi 上使用 Python 中的 WebSockets 进行发布

此示例展示如何使用端口 80 上的 WebSockets 使用运行 Python 的 Raspberry Pi 板发布到 ThingSpeak 通道。如果您有多个传感器值想要发送到 ThingSpeak,则可以将多个值发布到通道源。在此示例中,每 20 秒收集一次 Raspberry Pi 板的 CPU 和 RAM 使用情况数据,并将这些值发布到通道源。或者,如果您只有一个值需要更新,则可以将单个值发布到通道字段。

设置

1) 创建一个新通道,如在新通道中收集数据所示。

2) 通过点击 ThingSpeak 页面顶部的 Devices > MQTT,然后点击 Add Device 来创建 MQTT 设备。设置设备并将新通道添加到其授权列表时,点击 Download Credentials > Plain Text。详情请参阅创建 ThingSpeak MQTT 设备。使用下面代码部分中保存的凭据。

3) 下载适用于 Python 的 Paho MQTT 客户端库。您可以使用命令行来安装库。如果您使用的是 Python 2,请使用以下代码:

sudo pip install paho-mqtt
sudo pip install psutil

如果您使用 Python 3,请使用以下代码:

sudo pip3 install paho-mqtt
sudo pip3 install psutil

代码

1) 在您的 Python 代码中包含库 paho.mqtt.publish as publishpsutilstring

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

2) 定义与 ThingSpeak 通信的变量。编辑通道 ID 和 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) 定义连接类型为 websockets,并将端口设置为 80

t_transport = "websockets"
t_port = 80

4) 创建一个如发布到通道 Feed 所示形式的主题字符串,同时更新指定通道的字段 1 和字段 2。

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

5) 运行一个循环,每 20 秒计算一次系统 RAM 和 CPU 性能并发布计算值。使用 WebSockets 同时发布到指定通道的字段 1 和 2。

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) 

运行该程序并观看该通道从您的设备获取的定期更新。

另请参阅

|

相关示例

详细信息