嵌入式以太网社区

 找回密码
 立即注册
搜索
I2C总线监控分析仪,I2C总线数据抓取分析利器!利用Python来控制STM32USB转I2C总线适配器,数据透传!高速USB转SPI适配器,数据透传,速度快!
STM32高速USB数据传输方案,支持多系统!STM32全速USB数据传输方案,支持多系统!Flash高速烧写方案STM32 HID IAP/Bootloader升级方案
查看: 29496|回复: 64

树莓派初级教程——基于MQTT实现物联网功能

  [复制链接]

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
133194
QQ
发表于 2015-8-6 13:41:17 | 显示全部楼层 |阅读模式
本帖最后由 飞鸿踏雪 于 2015-8-6 13:41 编辑

0 前言
    MQTT是IBM开发的一个即时通讯协议。MQTT是面向M2M和物联网的连接协议,采用轻量级发布和订阅消息传输机制。Mosquitto是一款实现了 MQTT v3.1 协议的开源消息代理软件,提供轻量级的,支持发布/订阅的的消息推送模式,使设备对设备之间的短消息通信简单易用。
    若初次接触MQTT协议,可先理解以下概念:
【MQTT协议特点】——相比于RESTful架构的物联网系统,MQTT协议借助消息推送功能,可以更好地实现远程控制。
【MQTT协议角色】——在RESTful架构的物联网系统,包含两个角色客户端和服务器端,而在MQTT协议中包括发布者,代理器(服务器)和订阅者。
【MQTT协议消息】——MQTT中的消息可理解为发布者和订阅者交换的内容(负载),这些消息包含具体的内容,可以被订阅者使用。
【MQTT协议主题】——MQTT中的主题可理解为相同类型或相似类型的消息集合。
20140913162434656.png
本段内容来源于:http://blog.csdn.net/xukai871105/article/details/39252653
其实我们可以这样理解这个系统:
发布者——也就是产生数据者,实际系统中可能就是采集某个信号的小设备,比如一个采集温湿度的设备,但是这个设备是可以连接到网络的,所以它可以向代理(服务器)发布消息。
代理——也就是数据中转服务器,它接收发布者发布的消息数据,比如说具体的温湿度值,然后接收到这些数据之后可以推送给订阅者。
订阅者——也就是接收发布者发布的消息接收者,比如是一部手机或者电脑之类的,它能实时显示发布者通过代理发送过来的数据。
举个简单例子:我做了一个小设备,能采集环境温湿度数据,并具备以太网功能,也就是说它采集到的数据可以发送到以太网,当然我也有一台服务器,这个服务器可以是真实的服务器,也可以用树莓派这样的设备来充当服务器,它主要负责数据的中转,然后我有一个能上网的手机(别告诉我你现在的手机不能上网),这个手机上有我用MQTT协议写的一个软件。然后最终我能实现的目的就是,传感器采集到的温湿度,通过以太网将数据发送到代理(服务器),然后代理(服务器)将该数据推送到我的手机上来,这样,我家里测量的温湿度,我在世界任何有网络的地方都知道了,这就是最简单的应用,目前我们仅仅研究单方的数据采集,后面我们再研究反方向的控制。

1 Mosquitto的安装
1.1 安装
    截止2015年8月,最新版本为mosquitto-1.4.2
    源码下载地址为:http://mosquitto.org/download/
# 下载源代码包
wget http://mosquitto.org/files/source/mosquitto-1.4.2.tar.gz
# 解压
tar zxfv mosquitto-1.4.2.tar.gz
# 进入目录
cd mosquitto-1.3.4
# 编译
make
# 安装
sudo make install

1.2 安装注意点
【1】编译找不到openssl/ssl.h
    【解决方法】——安装openssl
sudo apt-get install libssl-dev
【2】编译过程找不到ares.h
    【解决方法】——修改config.mk中的WITH_SRV:=yes,改为WITH_SRV:=no
【3】使用过程中找不到libmosquitto.so.1
error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory
    【解决方法】——修改libmosquitto.so位置
# 创建链接
sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
# 更新动态链接库
sudo ldconfig
【4】make: g++:命令未找到  
    【解决方法】——安装g++编译器
sudo apt-get install g++
【5】编译过程找不到uuid/uuid.h
    【解决方法】——安装uuid库
sudo apt-get install uuid-dev

2 测试
    一个完整的MQTT示例包括一个代理器,一个发布者和一个订阅者。测试分为以下几个步骤:
【1】启动服务mosquitto。
【2】订阅者通过mosquitto_sub订阅指定主题的消息。
【3】发布者通过mosquitto_pub发布指定主题的消息。
【4】代理服务器把该主题的消息推送到订阅者。
    【测试说明】
        本例使用我现成的服务器作为MQTT的代理器,其功能前面已经说了,就是实现消息的转发;
        本例使用两个树莓派作为发布者和订阅者,也就是说,一个树莓派发送消息,一个树莓派接收消息,当然在实际使用情况下,这两个树莓派可以被自己的带网络功能的传感器板和移动终端(如手机)来代替,其工作示意图如下所示:
20140913205539406.png
2.1 启动代理服务
mosquitto -v
    【-v】打印更多的调试信息
     这个是在我服务器端运行,若提示Error: Invalid user 'mosquitto'.你可以用adduser mosquitto命令在服务器端添加一个用户即可。

2.2 订阅主题
mosquitto_sub -v -t sensor -h www.embed-net.com
    【-t】指定主题,此处为sensor,sensor是用户自己随便取的一个名字,主要用来区分每个消息属于哪一个主题。
    【-v】打印更多的调试信息
    【-h】指定代理器的IP地址或者域名,因为我用自己的网站服务器作为代理,所以这里我可以写成网站域名,当然若你在局域网内测试,你可以直接使用IP地址
     这个命令是在树莓派上执行,运行后控制台就等待代理器发给自己的消息,若等到数据了则打印输出数据。

2.3 发布内容
mosquitto_pub -t sensor -h www.embed-net.com -m  12.6
    【-t】指定主题
    【-m】指定消息内容
    【-h】指定代理器的IP地址或者域名
    这个命令也是在树莓派上发送的,消息的内容就是12.6,当然这个消息也可以通过前面提到的传感器板来发送,这个我后面会通过STM32单片机来实现。

2.4 运行结果
    当发布者推送消息之后,订阅者获得以下内容
sensor 12.6

3 总结
    总的来说MQTT还是很好用的,整个过程并不是很复杂,不过对于玩单片机的人可能理解起来比较麻烦,不过我后面可以做一些基于单片机的示例,服务器端我会一直把这个服务运行起,大家也可以利用我的服务器作数据转发。在整个过程中参考了http://my.csdn.net/xukai871105这个博主的很多资料,本文也未经作者允许引用了一些作者的内容,若有不当之处,还请联系我处理,再次表示感谢!

4 参考资料
【1】MQTT学习笔记——树莓派MQTT客户端 使用Mosquitto和paho-python
【2】MQTT学习笔记——MQTT协议体验 Mosquitto安装和使用
人生到处知何似,应似飞鸿踏雪泥。
回复

使用道具 举报

1

帖子

0

主题

0

金币

新手上路

Rank: 1

积分
1
发表于 2015-8-14 17:11:00 | 显示全部楼层
你好。我想咨询下mqtt的问题。
我在ubuntu下移植了mqtt1.3.4源码,开了3个终端,可以测试成功。
现在我想在ARM linux平台下,使用发布、订阅功能与连接ubuntu下的服务器,请问,是不是也要用您在“ STM32+W5500+MQTT+Android实现远程数据采集及控制”博文里提到的C/C++ MQTT Embedded clients库呢?
网站上说有3种库:MQTTPACKET、mqttClient、MQTTClient-c,
如果我在ARM上使用库,我用哪一种呢?
不太明白,请您指教,谢谢!
回复 支持 反对

使用道具 举报

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
133194
QQ
 楼主| 发表于 2015-8-14 17:27:49 | 显示全部楼层
vivienlw 发表于 2015-8-14 17:11
你好。我想咨询下mqtt的问题。
我在ubuntu下移植了mqtt1.3.4源码,开了3个终端,可以测试成功。
现在我想 ...

如果你想将MQTT集成到自己的代码里面,只需要将MQTTClient-c的文件添加到自己工程里面即可,当然对于网络收发函数需要自己简单封装下
人生到处知何似,应似飞鸿踏雪泥。
回复 支持 反对

使用道具 举报

22

帖子

0

主题

39

金币

注册会员

Rank: 2

积分
79
发表于 2015-8-25 08:46:18 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

9

帖子

0

主题

52

金币

注册会员

Rank: 2

积分
78
发表于 2015-8-30 21:25:16 | 显示全部楼层
长知识了。。。
回复

使用道具 举报

5

帖子

0

主题

4

金币

新手上路

Rank: 1

积分
19
发表于 2015-10-8 14:30:10 | 显示全部楼层
点击购买源码时没有反应?楼主什么情况
回复 支持 反对

使用道具 举报

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
133194
QQ
 楼主| 发表于 2015-10-8 14:40:57 | 显示全部楼层
fdgd 发表于 2015-10-8 14:30
点击购买源码时没有反应?楼主什么情况

多试几次或者换一个浏览器试试
人生到处知何似,应似飞鸿踏雪泥。
回复 支持 反对

使用道具 举报

17

帖子

0

主题

22

金币

注册会员

Rank: 2

积分
58
发表于 2015-10-30 03:11:00 | 显示全部楼层
正在学这方面的东西
回复 支持 反对

使用道具 举报

14

帖子

0

主题

4

金币

新手上路

Rank: 1

积分
38
发表于 2015-11-5 14:20:37 | 显示全部楼层
正在学这方面的东西
回复 支持 反对

使用道具 举报

2

帖子

0

主题

13

金币

新手上路

Rank: 1

积分
19
发表于 2015-11-12 16:54:10 | 显示全部楼层
开始了解mqtt移植
回复 支持 反对

使用道具 举报

2

帖子

0

主题

27

金币

新手上路

Rank: 1

积分
33
发表于 2015-11-16 19:24:46 | 显示全部楼层
非常厉害!学习了
回复 支持 反对

使用道具 举报

10

帖子

1

主题

6

金币

新手上路

Rank: 1

积分
31
发表于 2015-11-26 11:49:12 | 显示全部楼层
说的很好,,
回复

使用道具 举报

10

帖子

1

主题

6

金币

新手上路

Rank: 1

积分
31
发表于 2015-11-26 11:49:47 | 显示全部楼层
好东西。。。。
回复

使用道具 举报

10

帖子

1

主题

6

金币

新手上路

Rank: 1

积分
31
发表于 2015-11-26 11:50:34 | 显示全部楼层
好资料呢。
回复

使用道具 举报

3

帖子

0

主题

18

金币

新手上路

Rank: 1

积分
27
发表于 2015-12-7 11:53:34 | 显示全部楼层
正在学习,非常感谢
回复 支持 反对

使用道具 举报

59

帖子

15

主题

85

金币

中级会员

Rank: 3Rank: 3

积分
400
发表于 2015-12-9 09:43:40 | 显示全部楼层
回复

使用道具 举报

1

帖子

0

主题

18

金币

新手上路

Rank: 1

积分
21
发表于 2015-12-9 17:20:42 | 显示全部楼层
这个要支持双向通讯,如果订阅端想要控制推送端,那订阅端竟是订阅端又是推送端,我看是按主题对消息进行辨别的。  这样我要定义两个主题?
回复 支持 反对

使用道具 举报

1108

帖子

173

主题

13万

金币

超级版主

Rank: 8Rank: 8

积分
133194
QQ
 楼主| 发表于 2015-12-9 19:57:29 | 显示全部楼层
slzm40 发表于 2015-12-9 17:20
这个要支持双向通讯,如果订阅端想要控制推送端,那订阅端竟是订阅端又是推送端,我看是按主题对消息进行辨 ...

是这样的
人生到处知何似,应似飞鸿踏雪泥。
回复 支持 反对

使用道具 举报

38

帖子

0

主题

34

金币

注册会员

Rank: 2

积分
131
发表于 2015-12-11 09:35:05 | 显示全部楼层
最近刚刚好要用到这个mqtt 学习了
回复 支持 反对

使用道具 举报

12

帖子

0

主题

2

金币

新手上路

Rank: 1

积分
24
发表于 2016-2-1 19:35:31 | 显示全部楼层
学习学习,谢谢楼主分享!
回复 支持 反对

使用道具 举报

3

帖子

0

主题

18

金币

新手上路

Rank: 1

积分
27
发表于 2016-2-19 15:11:05 | 显示全部楼层
w5500加MQTT的应用以后感觉会很多
回复 支持 反对

使用道具 举报

6

帖子

2

主题

45

金币

注册会员

Rank: 2

积分
69
发表于 2016-4-8 10:09:55 | 显示全部楼层
正在研究MQTT,非常有用。
回复 支持 反对

使用道具 举报

14

帖子

0

主题

6

金币

新手上路

Rank: 1

积分
42
发表于 2016-4-11 14:47:38 | 显示全部楼层
正在研究IOT,非常有用
回复 支持 反对

使用道具 举报

4

帖子

0

主题

3

金币

新手上路

Rank: 1

积分
15
发表于 2016-4-18 14:10:56 | 显示全部楼层
正在学习MQTT,楼主资料真多,谢谢分享
回复 支持 反对

使用道具 举报

3

帖子

0

主题

4

金币

新手上路

Rank: 1

积分
13
发表于 2016-7-13 13:46:21 | 显示全部楼层
真心不错  楼主有stm32f4+lwip+mqtt的方案吗  能分享一下吗  谢谢
回复 支持 反对

使用道具 举报

17

帖子

1

主题

43

金币

注册会员

Rank: 2

积分
119
发表于 2016-7-17 23:50:15 | 显示全部楼层
正在学习,好资料,非常感谢
回复 支持 反对

使用道具 举报

53

帖子

0

主题

46

金币

注册会员

Rank: 2

积分
197
发表于 2016-8-19 11:28:28 | 显示全部楼层
资料太好了,版主无敌了
回复 支持 反对

使用道具 举报

50

帖子

0

主题

21

金币

注册会员

Rank: 2

积分
147
发表于 2016-8-19 15:44:10 | 显示全部楼层
楼主威武。。。。正在学习
回复 支持 反对

使用道具 举报

18

帖子

0

主题

2

金币

新手上路

Rank: 1

积分
44
发表于 2016-9-18 01:42:28 | 显示全部楼层
好技术,有前途!
回复 支持 反对

使用道具 举报

5

帖子

0

主题

8

金币

新手上路

Rank: 1

积分
23
发表于 2016-9-19 17:02:25 | 显示全部楼层
可以认真玩玩
回复 支持 反对

使用道具 举报

9

帖子

1

主题

44

金币

注册会员

Rank: 2

积分
72
发表于 2016-11-16 15:03:53 | 显示全部楼层
给大大一个大大的赞~
回复 支持 反对

使用道具 举报

6

帖子

0

主题

63

金币

注册会员

Rank: 2

积分
79
发表于 2017-1-19 11:17:33 | 显示全部楼层
非常厉害!学习了
回复 支持 反对

使用道具 举报

15

帖子

0

主题

5

金币

新手上路

Rank: 1

积分
40
发表于 2017-1-23 14:51:52 | 显示全部楼层
很好的东西
回复 支持 反对

使用道具 举报

3

帖子

0

主题

12

金币

新手上路

Rank: 1

积分
21
发表于 2017-2-24 15:22:08 | 显示全部楼层
牛B.致敬
向牛人学习学习
回复 支持 反对

使用道具 举报

1

帖子

0

主题

10

金币

新手上路

Rank: 1

积分
13
发表于 2017-3-8 17:18:44 | 显示全部楼层
  感谢楼主分享
回复 支持 反对

使用道具 举报

30

帖子

0

主题

83

金币

注册会员

Rank: 2

积分
155
发表于 2017-4-21 11:10:32 | 显示全部楼层
好东西 学习了
回复 支持 反对

使用道具 举报

2

帖子

0

主题

9

金币

新手上路

Rank: 1

积分
15
发表于 2017-5-8 15:43:23 | 显示全部楼层
刚开始学习这个,很不错。
回复 支持 反对

使用道具 举报

30

帖子

0

主题

83

金币

注册会员

Rank: 2

积分
155
发表于 2017-5-9 09:05:18 | 显示全部楼层
好东西,学习了
回复 支持 反对

使用道具 举报

20

帖子

3

主题

12

金币

注册会员

Rank: 2

积分
101
发表于 2017-6-23 08:52:22 | 显示全部楼层
最近一直在搞物联网,这个很好。
回复 支持 反对

使用道具 举报

10

帖子

0

主题

0

金币

新手上路

Rank: 1

积分
24
发表于 2017-7-3 15:51:16 | 显示全部楼层
LWIP配合MQTT在尝试,回复几个下载源码深入学习看看
回复 支持 反对

使用道具 举报

10

帖子

0

主题

0

金币

新手上路

Rank: 1

积分
24
发表于 2017-7-3 15:51:55 | 显示全部楼层
最近一直在搞物联网,这个很好。
回复 支持 反对

使用道具 举报

7

帖子

0

主题

4

金币

新手上路

Rank: 1

积分
21
发表于 2017-7-10 15:57:24 | 显示全部楼层
正在学习树莓派,谢谢楼主
回复 支持 反对

使用道具 举报

7

帖子

0

主题

4

金币

新手上路

Rank: 1

积分
21
发表于 2017-7-10 16:16:50 | 显示全部楼层
MQTT实现物联网功能
回复 支持 反对

使用道具 举报

7

帖子

0

主题

4

金币

新手上路

Rank: 1

积分
21
发表于 2017-7-10 16:19:42 | 显示全部楼层
树莓派初级教程——基于MQTT实现物联网功能 [修改]
回复 支持 反对

使用道具 举报

75

帖子

0

主题

156

金币

中级会员

Rank: 3Rank: 3

积分
355
发表于 2017-7-20 11:05:27 | 显示全部楼层

谢谢楼主分享
回复 支持 反对

使用道具 举报

21

帖子

0

主题

77

金币

注册会员

Rank: 2

积分
138
发表于 2017-7-20 14:11:06 | 显示全部楼层
不错,谢谢!!!
回复

使用道具 举报

12

帖子

0

主题

12

金币

新手上路

Rank: 1

积分
40
发表于 2017-11-6 09:55:15 | 显示全部楼层
谢谢分享
回复

使用道具 举报

10

帖子

0

主题

22

金币

注册会员

Rank: 2

积分
82
发表于 2018-1-18 14:42:48 | 显示全部楼层
很不错,感谢分享!!
回复 支持 反对

使用道具 举报

1

帖子

0

主题

15

金币

新手上路

Rank: 1

积分
19
QQ
发表于 2018-1-27 10:34:36 | 显示全部楼层
谢谢分享,感谢
回复 支持 反对

使用道具 举报

12

帖子

0

主题

23

金币

注册会员

Rank: 2

积分
59
发表于 2018-1-29 21:33:30 | 显示全部楼层
最近研究MQTT 谢谢楼主
回复 支持 反对

使用道具 举报

32

帖子

8

主题

403

金币

管理员

Rank: 9Rank: 9Rank: 9

积分
499
QQ
发表于 2018-1-31 16:29:07 | 显示全部楼层
                     
回复 支持 反对

使用道具 举报

190

帖子

1

主题

1523

金币

金牌会员

Rank: 6Rank: 6

积分
2052
发表于 2018-2-1 13:02:37 | 显示全部楼层
标记,有时间仔细看看
回复 支持 反对

使用道具 举报

14

帖子

1

主题

18

金币

注册会员

Rank: 2

积分
57
发表于 2018-2-5 09:08:20 | 显示全部楼层
滴滴。打卡。。谢谢楼主分享
回复 支持 反对

使用道具 举报

6

帖子

0

主题

23

金币

新手上路

Rank: 1

积分
41
发表于 2018-2-7 17:24:33 | 显示全部楼层
讲解很到位
回复 支持 反对

使用道具 举报

17

帖子

0

主题

3

金币

新手上路

Rank: 1

积分
48
发表于 2018-3-2 07:58:17 | 显示全部楼层
真心不错  楼主有stm32f4+lwip+mqtt的方案吗  能分享一下吗  谢谢
回复 支持 反对

使用道具 举报

10

帖子

0

主题

17

金币

新手上路

Rank: 1

积分
43
发表于 2018-3-22 11:52:52 | 显示全部楼层
好好学习,赚积分,下来看看
回复 支持 反对

使用道具 举报

5

帖子

0

主题

13

金币

新手上路

Rank: 1

积分
26
发表于 2018-3-27 15:19:20 | 显示全部楼层
发斯蒂芬斯蒂芬v
回复 支持 反对

使用道具 举报

19

帖子

2

主题

6

金币

注册会员

Rank: 2

积分
60
发表于 2018-4-24 18:14:48 | 显示全部楼层
学习了mark
回复 支持 反对

使用道具 举报

4

帖子

0

主题

13

金币

新手上路

Rank: 1

积分
25
发表于 2018-5-3 10:06:12 | 显示全部楼层
最近才知道mqtt,刚好学习一下
回复 支持 反对

使用道具 举报

4

帖子

0

主题

19

金币

新手上路

Rank: 1

积分
31
发表于 2018-5-23 22:41:14 | 显示全部楼层
谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢
回复 支持 反对

使用道具 举报

8

帖子

4

主题

1

金币

新手上路

Rank: 1

积分
37
QQ
发表于 2018-5-30 11:39:45 | 显示全部楼层
How can I get it?:lit looks cool.What??Raspberry Pi used in Face-ID application is so wondful!
Hans Low
回复 支持 反对

使用道具 举报

198

帖子

1

主题

265

金币

高级会员

Rank: 4

积分
807
发表于 2018-5-31 23:00:13 | 显示全部楼层

长知识了。。。
回复

使用道具 举报

26

帖子

0

主题

41

金币

注册会员

Rank: 2

积分
115
发表于 2018-11-3 16:04:14 | 显示全部楼层
长知识了。。。
回复

使用道具 举报

10

帖子

1

主题

248

金币

中级会员

Rank: 3Rank: 3

积分
281
发表于 2018-11-6 11:18:25 | 显示全部楼层
学习一下!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|嵌入式以太网社区 ( 渝ICP备14007427号

GMT+8, 2019-3-25 11:18 , Processed in 0.087484 second(s), 33 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表