到目前为止,最简单的方法是使用诸如paho-mqtt 之类的库或适用于 Python 的 AWS IoT SDK(参见本文底部),它们是 Python 的 MQTT 客户端库。
链接文档中提供了使用指南。这是一个示例,供参考,您可能会发现它对适应您的目的很有用(它大致基于提供的文档):
import paho.mqtt.client as mqtt
import time
# Runs when the client receives a CONNACK connection acknowledgement.
def on_connect(client, userdata, flags, result_code):
print "Successful connection."
# Subscribe to your topics here.
client.subscribe("sensor/topic_you_want_to_subscribe_to")
# Runs when a message is PUBLISHed from the broker. Any messages you receive
# will run this callback.
def on_message(client, userdata, message):
if message.topic == "sensor/topic_you_want_to_subscribe_to":
if message.payload == "START":
# We've received a message "START" from the sensor.
# You could do something here if you wanted to.
elif message.payload == "STOP":
# Received "STOP". Do the corresponding thing here.
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("yourbrokerurl.com", 1883, 60)
client.loop_start()
while True:
# Your script must loop here, and CAN block the thread.
# For example, you could take a measurement, then sleep 5 seconds
# and publish it.
data_to_broadcast = get_data()
client.publish("cnc/data", data_to_broadcast)
time.sleep(5)
这个例子看起来有点令人难以抗拒……但是当你把它分成几部分时它很容易。从查看行开始client = mqtt.Client()
。这里我们创建了一个 MQTT 客户端。然后我们注册用于连接和接收消息的回调(这些只是在事件发生时运行的函数)。
在我们的连接回调中,我们订阅了传感器主题。然后,在消息接收函数中,我们检查消息是否告诉我们的 CNC 做某事,然后去做(执行留给读者)。
然后,在while True:
循环中,我们每 5 秒发布一次数据。这只是一个例子——你可以在那里做任何你想做的事。请记住client.publish
是发布某些内容所需的功能。
或者,如果您正在寻找专门用于 AWS IoT的库,您可以使用aws-iot-device-sdk-python。这建立在 Paho 的基础上,但可以更轻松地从库中访问额外的要求和功能(例如设备影子)。
还请记住,AWS IoT 要求每个设备都有一个设备证书——他们的 SDK 将帮助您处理这个问题,但 Paho 本身不会。
这是 Amazon 开发工具包的基本发布/订阅示例。您会注意到它与上面的示例大致相似,并且可能会更快开始。