查看: 1259|回复: 0

使用MQTT协议与Galileo G2交互(1)

[复制链接]
  • TA的每日心情
    开心
    2018-8-25 16:46
  • 签到天数: 28 天

    连续签到: 1 天

    [LV.4]偶尔看看III

    发表于 2016-7-11 09:36:42 | 显示全部楼层 |阅读模式
    分享到:
    前言

    原创文章,转载引用务必注明链接。如有疏漏,欢迎斧正。
    Galileo系统:完整版Yocto,内核版本3.8.7-yocto-standard;宿主机:Windows 7 64 bit
    这期讲如何与Galileo G2进行交互。主要学习MQTT协议。

    这里手机和Galileo通过网络(无线或者有线网)连接,当然也可以选用BLE或者ZigBee之类。然后是通讯协议的选择,固然TCP/IP协议很成熟,但是对于物联网嵌入式应用来说,略显臃肿。目前物联网常用的协议包括CoAP、MQTT、XMPP、RESTful HTTP等,这里介绍应用最为广泛的MQTT协议。关于各种协议之间的差别,可以查看这篇文章
    MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。Mosquitto是一款实现了 MQTT v3.1 协议的开源消息代理软件,提供轻量级的,支持发布/订阅的的消息推送模式,使设备对设备之间的短消息通信简单易用。MQTT协议的基本概念:【MQTT协议特点】——相比于RESTful架构的物联网系统,MQTT协议借助消息推送功能,可以更好地实现远程控制。【MQTT协议角色】——在RESTful架构的物联网系统,包含两个角色客户端和服务器端,而在MQTT协议中包括发布者_pub(lisher),代理器(服务器)-broker和订阅者-subcriber。【MQTT协议消息-m(essage)】——MQTT中的消息可理解为发布者和订阅者交换的内容(负载),这些消息包含具体的内容,可以被订阅者使用。【MQTT协议主题-t(opic)】——MQTT中的主题可理解为相同类型或相似类型的消息集合。
    Via
    注意:以下仅作功能演示,暂时不要用于生产环境。记得开启密码验证。
    1、 Galileo G2 安装mosquito

    Galileo G2的系统镜像及软件仓库里没有预编译的mosquito程序包,需要手动编译。好在编译步骤并不复杂,过程比较顺利没有出错。
    1.1 更新系统并下载程序源代码

    opkg update && mkdir ~/mqtt && cd ~/mqttwget <a href="https://mosquitto.org/files/source/mosquitto-1.4.9.tar.gz">https://mosquitto.org/files/source/mosquitto-1.4.9....</a> # 目前最新版是1.4.9,可以去链接中的mosquito.org官网查看。1.2 解压缩源代码文件

    tar xzf mosquitto-1.4.9 && cd mosquitto-1.4.91.4 进行编译

    make WITH_SRV=no# 编译过程大约需要5min1.5 安装编译好的mosquito
    <span style="font-size: 10px;"># 安全起见创建mosquito用户adduser mosquitto# 安装cp client/mosquitto_pub /usr/bincp client/mosquitto_sub /usr/bincp lib/libmosquitto.so.1 /usr/libcp src/mosquitto /usr/bin</span>
    2、安装手机控制端

    这里以安卓为例,使用MQTT Dashboard程序,MQTT Broker 用https://www.mqtt-dashboard.com/演示,端口号1883。当然,也可以在Galileo上启用broker,以下截图部分借用之前我发表的博客文章。

    MQTT Dashboard是我用过几个后能满足要求的APP,谷歌商店有,如果无法访问Google Play可以从这里下载手动或者使用apkpure.com提供的软件市场,包含了大部分谷歌商店的应用内容。我上传的百度网盘地址:链接: https://pan.baidu.com/s/1c2oL6DE 密码: 4kb2

    手机客户端初始界面:

    Subcribe界面很简单,就是简单的接收信息。

    Publish界面(这些控件都可以自定义):

    Caution
    公共MQTT Broker服务器仅作演示用,因为很容易被别人嗅探到内容最好搭建自己的Broker或者使用后文即将介绍的PubNub服务
    MQTT dashboard是我试用几个之后符合要求,自定义强的方案,如果有对其他方案感兴趣的可以PM我
    3、Galileo服务端

    这个类似微信公众号后台,负责对命令进行响应、发送反馈信息。
    在嵌入式设备上自己写服务端,除了C、C++、汇编语言之外,还有其他选择:

    • eLuaLua本来就很小,Embedded Lua更小。

    • Micro Python人生苦短,继续用 Python。

    • EspruinoJavascript 凭借 NodeJs 入侵服务器攻势正猛,同时抢滩登陆嵌入式。

    (作者:tangram 链接:https://www.zhihu.com/question/27835930/answer/41125908
    后文我们将选择一门编程语言进行演示。
    4、基本的MQTT交互功能演示

    从Galileo上发送消息给订阅者们(这里是我的安卓手机):

    手机收到了:

    天气预报小示例

    每小时从百度API获取一次天气,如果下雨,就向手机推送信息提醒带伞或者控制小灯来显示天气情况(绿色——晴天;红色——下雨;蓝色——阴天)。
    因为平时喜欢使用shell脚本编程,这里用curl来调用百度API
    从百度API上随便找一个免费的天气服务,记下自己的apikey,下面有详细的调用方法,这里用curl调用。查询天气脚本内容如下:
    #/bin/shcurl --get -s --include '<a href="https://apis.baidu.com/apistore/weatherservice/weather?citypinyin=nanjing'">https://apis.baidu.com/apistore/weatherservice/weat...</a> -H 'apikey:你的APIKEY' |grep -q "u96e8" && /usr/bin/mosquitto_pub -t galileo -m "It was going to rain!" -h broker.hivemq.com
    增加执行权限并添加计划任务。效果就是每小时获取南京的天气,如果有雨,就向订阅者发送信息。

    • |、&&、||操作符比较有意思,有兴趣的可以看看。
    • 注意-s 和 -q选项哟。“u96e8”是unicode”雨“的意思
    5、下一步计划

    5.1 完善“使用mqtt协议控制台灯”

    官方提供了三种IDE集成开发环境:

    • Intel® XDK IoT Edition(JavaScript/Node.js)
    • Intel® System Studio IoT Edition(C/C++/Java)
    • Arduino
    两种控制IO接口的库:
    下一步将演示使用Intel XDK IoT Editon, 通过node.js和MQTT broker平台PubNub搭建响应端,通过手机控制台灯开关,以及读取传感器数值。

    5.2 使用wyliodrin

    之前使用Udoo Neo的时候看到这个项目,很不错,烧录程序、编程可以摆脱数据线的束缚了,基本完成了,有些问题待解决,近期分享出来。

    5.3 编译Yocto镜像

    之前一段时间在折腾这个,但是遇到了许多问题,下面将会把这个搞定,不然很多事情做不了。
    6、拓展阅读

    非常棒的MQTT协议入门与理解,这个博客真的非常棒,感谢博主的分享!
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-4-16 14:45 , Processed in 0.117821 second(s), 17 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.