Ameba Arduino: [RTL8195] 使用MQTT上传与倾听资料

MQTT简介

MQTT (Message Queuing Telemetry Transport),它是为IBM和Eurotech共同制定出来的protocol,在MQTT的官网可以看到它对MQTT的介绍:
MQTT is a machine-to-machine (M2M)/"Internet of Things" connectivity protocol. It was designed as an extremely lightweight publish/subscribe messaging transport.
所以它是为了IOT而设计的protocol,它是基于TCP/IP的协定,并且透过publish/subscribe的方式做资料传送与接收。
它的架构如下图:

其中它有几个元素

  • Publisher: 它通常是带有sensor的装置(Ex. Ameba),经由网路上传到MQTT-Broker,其中MATT-Broker是带有MQTT service的资料库
  • Subscriber: 它通常是可以观看讯息的装置,如笔电,手机等
  • Topic: 讯息的内容由Topic来分类,比如说Topic可以是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” 出现,这样代表整个机制运作正常。