树莓派上的MQTT环境搭建
前言
最近实验室准备招新生,但现在可以拿出来演示诱拐新生的DEMO一个都没,于是老板要求我做一个房间定位的系统。
原理和设备也很简单。一个Beacon收集器,和若干个beacon。通过Beacon收集器收集到的beacon的RSSI值判断是否在房间里面,也是就设定一个阈值,大于这个阈值在房间外面,小于这个阈值就在房间里面。
Beacon收集器是用Wifi连接到路由器,使用MQTT协议传输数据,下面的MQTT的资料:
MQTT定义
MQTT是IBM开发的一个即时通讯协议。MQTT是面向M2M和物联网的连接协议,采用轻量级发布和订阅消息传输机制。Mosquitto是一款实现了 MQTT v3.1 协议的开源消息代理软件,提供轻量级的支持发布/订阅的的消息推送模式,使设备对设备之间的短消息通信简单易用。
MQTT特点
- 【MQTT协议特点——相比于RESTful架构的物联网系统,MQTT协议借助消息推送功能,可以更好地实现远程控制。
- 【MQTT协议角色】——在RESTful架构的物联网系统,包含两个角色客户端和服务器端,而在MQTT协议中包括发布者,代理器(服务器)和订阅者。
- 【MQTT协议消息】——MQTT中的消息可理解为发布者和订阅者交换的内容(负载),这些消息包含具体的内容,可以被订阅者使用。
- 【MQTT协议主题】——MQTT中的主题可理解为相同类型或相似类型的消息集合。
MQTTServer的安装
这里使用的系统是Kail Linux,Mosquitto虽然可以使用apt-get,但是我用apt-get下下来的没有mosquitto_和mosquitto_pub这两个程序,所以直接去官网找了源码包编译安装。
安装前准备
确保安装了libssl-dev,libc-ares-dev,uuid-dev,g++这些编译需要的库。
sudo apt-get install libssl-dev libc-ares-dev uuid-dev g++
安装libssl-dev的小插曲
树莓派已经安装的版本太高会导致安装libssl-dev不成功
解决方法:
sudo apt-get install aptitude
sudo aptitude install libssl-dev
第一个解决方法选no
第二选yes
使用dpkg -l *libssl*
显示当前版本
如果接下来的包也遇到这种情况使用一样方法,全部都把他降级吧少年
安装
去官方网站找到最新的源码包:http://mosquitto.org/files/source/
-
用wget下载源码包,xxx为最新的版本代号
wget http://mosquitto.org/files/source/mosquitto-xxx.tar.gz
-
解压
tar zxfv mosquitto-*-tar.gz
-
进入目录
cd mosquitto*
-
编译
make
-
安装
sudo make install
-
创建连接
sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1
-
更新动态链接库
sudo ldconfig
自此Mosquitto安装完成
测试
一个完整的MQTT示例包括一个总的MQTT代理服务器,一个发布端和一个订阅端。
示例步骤:
-
启动mosquitto服务。
mosquitto -v
- -v:打印更多的调试信息
-
订阅端通过mosquitto_sub订阅指定主题的消息.
mosquitto_sub -v -t BBColle01
- -v:打印更多的调试信息
- -t:订阅的主题(title)
-
发布者通过mosquitto_pub发布指定主题的消息。
mosquitto_pub -v -t BBColle01 -m "{\"id\":\"Nekotter\"}"
-
转发服务器把该主题的消息推送到订阅端。
这里发布端,代理服务器,订阅端都为localhost。
总结
服务器是搭建好了,接下来还要干的事:
- 使用paho-python模块接收beacon收集器发送到值,并用python处理数据。
- 用Flask框架搭建网页,把整个系统的UI做出来。