使用MQTT上传与倾听资料
MQTT is a machine-to-machine (M2M)/”Internet of Things” connectivity protocol. It was designed as an extremely lightweight publish/subscribe messaging transport.
它的架构如下图:
其中它有几个元素
- Publisher: 它通常是带有sensor的装置(Ex. Ameba),经由网路上传到MQTT-Broker,其中MATT-Broker是带有MQTT service的资料库
- Subscriber: 它通常是可以观看讯息的装置,如笔电,手机等
- Topic: 讯息的内容由Topic来分类,比如说Topic可以是PM2.5, 或是Temperature, 而手机可以选择想要接收的Topic
- Ameba x 1
范例说明
这个范例里,我们尝试连上MQTT-Broker,发送topic讯息,并接收来自MQTT-Broker的讯息。
打开MQTT的范例, “File” -> “Examples” -> “AmebaMQTTClient” -> “mqtt_basic”
因为它需要用到WiFi, 所以要设定里面的ssid, pass, 以及连上AP的方式。
此外还有一些MQTT的设定可以修改:
其中mqttServer就是MQTT-broker的位置,这边使用“iot.eclipse.org” 是IBM 的eclipse 提供的MQTT sandbox,供开发者测试MQTT
clientId用来让MQTT-broker辨识连上线的装置
publishTopic是发布的主题,例子里是“outTopic”, 而其它有subscribe “outTopic” 的装置可以接收这份讯息。
publishPayload是发布的内容
subscribeTopic是对MQTT-broker注册要倾听的topic
我们将程式码编译并上传到Ameba之后,按下Reset按钮,然后打开Serial Monitor
可以看到如果连线失败会尝试重连,连上之后, “iot.eclipse.org” 这台server 会传送“SADS”在”inTopic”
程式里也有publish ”outTopic”,所以我们需要另外一个MQTT client 来测试看看是否成功
这边我们使用chrome的外挂程式MQTTLens当作client,你可以在google的扩充程式里找到它
打开它之后,点选左边的Connection的“+”,并在填入这些栏位
- Connection Name: 用来辨识这笔连线,可以任意填
- Hostname: 这边填入MQTT-Broker的server位置, “iot.eclipse.org”
- Client ID: 它预设会随机给你一个ID,我们可以使用预设的ID
填好之后,点选右下角的 “CREATE CONNECTION”
然后它会连上“iot.eclipse.org”, 但由于我们没有注册想要倾听的资讯,所以没有任何讯息进来。我们在Subscribe那边的Topic填入“outTopic”, 并点选右边的“Subscribe”。
“iot.eclipse.org”此时会马上送讯息“hi” 过来,代表已经成功连上。
此时我们等一下Ameba下次传送资料的时间,或是将Ameba Reset并等它的第一次传送资料,等到之后就会看到新一笔的资料“hello world” 出现,这样代表整个机制运作正常。