前言

原创文章,转载引用务必注明链接。如有疏漏,欢迎斧正。

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 ~/mqtt
wget http://mosquitto.org/files/source/mosquitto-1.4.9.tar.gz
# 目前最新版是1.4.9,可以去链接中的mosquito.org官网查看。

1.2 解压缩源代码文件

tar xzf mosquitto-1.4.9 && cd mosquitto-1.4.9

1.4 进行编译

make WITH_SRV=no
# 编译过程大约需要5min

1.5 安装编译好的mosquito

# 安全起见创建mosquito用户
adduser mosquitto
# 安装
cp client/mosquitto_pub /usr/bin
cp client/mosquitto_sub /usr/bin
cp lib/libmosquitto.so.1 /usr/lib
cp src/mosquitto /usr/bin

2、安装手机控制端

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

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

手机客户端初始界面:

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

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

Caution

公共MQTT Broker服务器仅作演示用,因为很容易被别人嗅探到内容最好搭建自己的Broker或者使用后文即将介绍的PubNub服务

MQTT dashboard是我试用几个之后符合要求,自定义强的方案,如果有对其他方案感兴趣的可以PM我

3、Galileo服务端

这个类似微信公众号后台,负责对命令进行响应、发送反馈信息。

在嵌入式设备上自己写服务端,除了C、C++、汇编语言之外,还有其他选择:

  1. eLua

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

  2. Micro Python

    人生苦短,继续用 Python。

  3. Espruino

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

(作者:tangram 链接:https://www.zhihu.com/question/27835930/answer/41125908)

后文我们将选择一门编程语言进行演示。

4、基本的MQTT交互功能演示

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

手机收到了:

天气预报小示例

每小时从百度API获取一次天气,如果下雨,就向手机推送信息提醒带伞或者控制小灯来显示天气情况(绿色——晴天;红色——下雨;蓝色——阴天)。

因为平时喜欢使用shell脚本编程,这里用curl来调用百度API

从百度API上随便找一个免费的天气服务,记下自己的apikey,下面有详细的调用方法,这里用curl调用。查询天气脚本内容如下:

#/bin/sh
curl --get -s --include 'http://apis.baidu.com/apistore/weatherservice/weather?citypinyin=nanjing' -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协议入门与理解,这个博客真的非常棒,感谢博主的分享!

https://software.intel.com/en-us/blogs/2015/02/20/building-and-running-mosquitto-mqtt-on-intel-edison

https://communities.intel.com/thread/64058

https://software.intel.com/en-us/iot/hardware/devkit

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

  • Intel® XDK IoT Edition(JavaScript*/Node.js)

  • Intel® System Studio IoT Edition(C/C++/Java)

  • Arduino

两种控制IO接口的库:

密码要求比较高,至少8位,包含大小写字母、特殊字符各一

Galileo Gen2 之MQTT通讯的更多相关文章

  1. 【Qt官方MQTT库的使用,附一个MqttClient例子】

    Qt官方MQTT库的使用,附一个MqttClient例子 开发环境:win7 64 + Qt5.9 记录时间:2018年3月11日 00:48:42 联系邮箱: yexiaopeng1992@126. ...

  2. 玩转MQTT-阿里云之MQTT使用

    引言 前两年买一款物联网控制板,当时把玩了一阵之后,验证了下串口通讯.MODBUS协议实现.TCP/UDP/DNS/MQTT通讯(基于GPRS)后,就放到角落里吃灰了呵. 最近收到阿里云的优惠推送,说 ...

  3. Using 1-Wire device with Intel Galileo

    Using 1-Wire device with Intel Galileo 3 Replies Many people have had trouble with getting 1-Wire de ...

  4. Intel Galileo驱动单总线设备(DHT11\DHT22)(转)

    Intel Galileo一代的IO翻转速度不够,无法直接驱动单总线设备,二代听说改进了,但没有库,于是国外开发者想出了另一种法子,转过来给大家学习下.如果后面有时间,再来翻译.原文地址:http:/ ...

  5. 使用RabbitMQ搭建MQTT服务

    由于近期公司需要搭建一套物联网采集环境,底层设备采用MQTT协议传输数据.服务器环境为linux,考虑到现有环境已经有RabbitMQ环境,Rabbit是基于AMQP协议开发的一套高效的消息传输队列. ...

  6. DFRobot万物互联大赛第一轮

    前言 原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正. DF搞的这个比赛还挺有趣:micro:bit × OBLOQ DF创客社区玩转物联网挑战赛,一边在写文章一边在爱奇艺上看着印度电影 ...

  7. ObjectiveC-MQTT初次接触

    首先iOS与mac端用的框架是:https://github.com/ckrey/MQTT-Client-Framework 使用CocoaPods导入 pod 'MQTTClient/Websock ...

  8. Arduino 翻译系列 - LED 灯闪烁

    原文地址 - https://www.arduino.cc/en/Tutorial/Blink 闪烁 这个例子展示了你能拿 Arduino / Genuino 板子来干的最简单的事:使开发板上的 LE ...

  9. 阿里云ACE共创空间——MQ消息队列产品测试

    一.产品背景消息队列是阿里巴巴集团自主研发的专业消息中间件. 产品基于高可用分布式集群技术,提供消息订阅和发布.消息轨迹查询.定时(延时)消息.资源统计.监控报警等一系列消息云服务,是企业级互联网架构 ...

随机推荐

  1. MySql数据库 - 4.可视化操作数据库

    创建表 对表中数据进行  增.删.改.查 查 右键刚刚创建的表 - 选择查看前 1000 条数据 增.改 表格必须有主键才能添加数据,主键是不能重复的 1. 右键表 - 查看前 1000 条数据 2. ...

  2. html5中checkbox的选中状态的设置与获取

    获取checkbox是否选中: $("#checkbox").is(":checked"); 获得的值为true或false. 设置checkbox是否选中: ...

  3. mapserver+openlayers实现左键点击查询

    效果图 第一步,配置自己的mapfile,在要查询的图层LAYER对象内加上HEADER,TEMPLATE,FOOTER三个参数,同时,TEMPLATE fooOnlyForWMSGetFeature ...

  4. Codeforces Round #402 (Div. 2) D. String Game(二分答案水题)

    D. String Game time limit per test 2 seconds memory limit per test 512 megabytes input standard inpu ...

  5. [ZZOJ#31]类欧几里得

    [ZZOJ#31]类欧几里得 试题描述 这是一道模板题. 给出 \(a, b, c, n\),请你求出 \(\sum_{x=0}^n{\lfloor \frac{a \cdot x + b}{c} \ ...

  6. 纯js实现网页tab选项卡切换效果

    纯js实现网页tab选项卡切换效果 百度搜索     js 点击菜单项就可以切换内容的效果

  7. 一种极简的异步超时处理机制设计与实现(C#版)

    1.引言 当执行某些动作之后,会期待反馈.最终要么是得到了结果,要么就是超时了.当超时发生时,可能是期望得到通知,或是希望能自动重试,等等.于是设计了一种通用的异步超时的处理机制,以期通过简洁易理解的 ...

  8. Linux笔记:vim

    文件搜索后显示高亮,即使退出编辑高亮依然存在.使用以下几个方法: 1)指令模式下运行:nohlsearch 2)运行set nohlsearc,可永久关闭搜索高亮 3)搜索任意不存在的字符串

  9. [CF665F]Four Divisors

    题目大意: 给定$n(n\leq10^{11})$,求$\displaystyle\sum_{i=1}^n[\tau(i)=4]$. 思路: 设$p,q$为不相等的质数,则满足$\tau(i)=4$的 ...

  10. Akka Stream之Graph

    最近在项目中需要实现图的一些操作,因此,初步考虑使用Akka Stream的Graph实现.从而学习了下: 一.介绍 我们知道在Akka Stream中有三种简单的线性数据流操作:Source/Flo ...