导入:在Widora上玩MQTT (widora)
-
MQTT是什么?
很火的物联网协议,通俗的讲,这里边有订阅者(接收消息),还有发布者(发出消息),还有服务器。发布者和订阅者唯一的关系纽带就是TOPIC(理解为频道)。只有订阅者和发布者处于同一频道,消息才能被推送过去。
以上是我最浅显的理解。如需详细了解请google或bing之。Widora上哪些准备?
a. openwrt系统
b. Widora连接好公网
c. 安装mosquitto_client
d. 可以折腾了芒果废话很多,跟着步骤一点一点来吧。
- 安装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.
- 安装完会出现两个命令,分别是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很好用。安卓手机应该有很多类似软件。
- 安装mosquitto_client,需要四个IPK:
-
midas-zhou:
试用了一下,自己开两个SSH, 一个运行subscriber ,一个运行publisher, 就可以通信了。
当然,开三个SSH,一个用于pub,2个用于sub分别对应2个topic, 同样ok啦。topic 也可以同名:
买了一个LM75A测温模块挂到widora上的I2C接口上, 通过MQTT发布后, 可以用 mosquitto_sub -h widora.org -t midas 命令来订阅.
我用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上订阅: