×

树莓派上的MQTT环境搭建

96
酱汁叉烧
2016.08.09 10:45* 字数 1001

前言

最近实验室准备招新生,但现在可以拿出来演示诱拐新生的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代理服务器,一个发布端和一个订阅端。
示例步骤:

  1. 启动mosquitto服务。

    mosquitto -v

    • -v:打印更多的调试信息
  2. 订阅端通过mosquitto_sub订阅指定主题的消息.

    mosquitto_sub -v -t BBColle01

    • -v:打印更多的调试信息
    • -t:订阅的主题(title)
  3. 发布者通过mosquitto_pub发布指定主题的消息。

    mosquitto_pub -v -t BBColle01 -m "{\"id\":\"Nekotter\"}"

  4. 转发服务器把该主题的消息推送到订阅端。

这里发布端,代理服务器,订阅端都为localhost。

总结

服务器是搭建好了,接下来还要干的事:

  1. 使用paho-python模块接收beacon收集器发送到值,并用python处理数据。
  2. 用Flask框架搭建网页,把整个系统的UI做出来。

参考

教程
Web note ad 1