导入:在Widora上玩MQTT (widora)


  • administrators

    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服务。😂
      事先想好一个主题名字,比如主题名字为: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


  • administrators

    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