MQTT - 设置 MQTT 客户端与 Broker 通信
范例说明
介绍
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可以是PM2.5, 或是Temperature, 而手机可以选择想要接收的Topic
这个范例里,我们尝试连上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位置, “test.mosquitto.org”
- Client ID: 它预设会随机给你一个 ID,我们可以使用预设的ID
填好之后,点选右下角的 “CREATE CONNECTION”
然后它会连上 “iot.eclipse.org”, 但由于我们没有注册想要倾听的资讯,所以没有任何讯息进来。我们在Subscribe那边的Topic填入 “outTopic”, 并点选右边的 “Subscribe”。
“iot.eclipse.org”此时会马上送讯息 “hi” 过来,代表已经成功连上。
此时我们等一下Ameba下次传送资料的时间,或是将Ameba Reset并等它的第一次传送资料,等到之后就会看到新一笔的资料 “hello world” 出现,这样代表整个机制运作正常。