导入:在Widora上玩MQTT (widora)

MQTT是什么?

很火的物联网协议,通俗的讲,这里边有订阅者(接收消息),还有发布者(发出消息),还有服务器。发布者和订阅者唯一的关系纽带就是TOPIC(理解为频道)。只有订阅者和发布者处于同一频道,消息才能被推送过去。
以上是我最浅显的理解。如需详细了解请google或bing之。

Widora上哪些准备?

a. openwrt系统
b. Widora连接好公网
c. 安装mosquitto_client
d. 可以折腾了

芒果废话很多,跟着步骤一点一点来吧。

  1. 安装mosquitto_client,需要四个IPK:
    3_1477498553768_mosquitto-client_1.4.9-1_ramips_24kec.ipk 2_1477498553768_libuuid_2.25.2-4_ramips_24kec.ipk 1_1477498553768_libmosquitto_1.4.9-1_ramips_24kec.ipk 0_1477498553768_libcares_1.10.0-1_ramips_24kec.ipk

你可以用U盘拷贝到Widora上,也可以winscp到板子上。假设放到了/tmp目录,辣么就执行opkg安装它。

root@Widora:~# opkg install /tmp/libuuid_2.25.2-4_ramips_24kec.ipk
Installing libuuid (2.25.2-4) to root...
Configuring libuuid.
root@Widora:~# opkg install /tmp/libcares_1.10.0-1_ramips_24kec.ipk
Installing libcares (1.10.0-1) to root...
Configuring libcares.
root@Widora:~# opkg install /tmp/libmosquitto_1.4.9-1_ramips_24kec.ipk
Installing libmosquitto (1.4.9-1) to root...
Configuring libmosquitto.
root@Widora:~# opkg install /tmp/mosquitto-client_1.4.9-1_ramips_24kec.ipk
Installing mosquitto-client (1.4.9-1) to root...
Configuring mosquitto-client.
  1. 安装完会出现两个命令,分别是mosquitto_sub、mosquitto_pub,订阅者和发布者都有了,还缺个服务器,其实这个难不倒芒果,widora.org服务器早就运行了一个MQTT服务。:joy:
    事先想好一个主题名字,比如主题名字为:xoxo,接着我们需要拿两个widora做实验,A作为发布者,需要运行:
root@Widora:~# mosquitto_pub -h widora.org -t xoxo -l

B作为订阅者,需要运行:

root@Widora:~# mosquitto_sub -h widora.org -t xoxo

至此,只要Widora能上网,消息就会实时的从A推送到B了。
3. 如果手里Widora不够的朋友,可以到QQ群里找人协助,或是用手机APP也可以。水果手机有个MQTTool很好用。安卓手机应该有很多类似软件。
0_1477498573871_1c5c762d6613539b3c1282dc1e107af229aab939_1_690x177.png

midas-zhou:
试用了一下,自己开两个SSH, 一个运行subscriber ,一个运行publisher, 就可以通信了。
当然,开三个SSH,一个用于pub,2个用于sub分别对应2个topic, 同样ok啦。

topic 也可以同名:
0_1477498622857_00db364469a5ee72f852053c27bf162f80c0ee77_1_689x397.JPG
买了一个LM75A测温模块挂到widora上的I2C接口上, 通过MQTT发布后, 可以用 mosquitto_sub -h widora.org -t midas 命令来订阅.
0_1477498649026_303a27fbb382e1844ee3a61aa10cdc69dfa3d88d.JPG
0_1477498657178_f0c6dda64726f8d5c401f8efc83410f0fa45e756_1_690x453.JPG
我用python写了几句代码,就是调用i2cget命令和mosquitto_pub命令,然后循环发布温度,写得不严谨,纯粹觉得好玩而已。

#!/usr/bin/env python
import os
import time
import subprocess

while(1):
        fos=os.popen('i2cget -y 0 0x48 0x00 w')
        strTemp=fos.readlines()
        fos.close()
        strTemp=strTemp[0].strip()
        print time.ctime()
        strTempL=strTemp[0:4]
        strTempH=strTemp[4:6]
        TempL=int(strTempL,16)
        TempH=int('0x'+strTempH,16)
        Temp=TempL/256.0+TempH
        print 'Current Temperature: %.2f C'%(Temp)
        fm=subprocess.Popen(["mosquitto_pub","-h","widora.org","-t","midas","-l"],stdin=subprocess.PIPE)
        fm.communicate('midas.Temp='+str(Temp)+'\n')
        time.sleep(6)

在SSH上订阅:
0_1477498700788_826dd3e6651f621f1d8a3b8bc539a3468141acc3_1_432x500.JPG