最近在看物联网相关方面的协议.了解了mqtt的一点知识,mqtt是一种机器对机器(M2M)/“物联网”连接协议。它被设计成一个非常轻量的发布/订阅消息传输.这使得它适用于物联网信息传递,如低功耗传感器或移动设备,如电话、嵌入式计算机或微控制器。据说,facebook早期聊天基于mqtt ??? 但不管真假,本人作为一个嵌入式的菜鸟,在看代码的同时,觉得有必要实际应用一下.恰好之前有个微信公众号,随决定利用微信公众号+mqtt实现一个远程控制.

搭建MQTT服务端

  mosquitto一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单.因此,我们在服务端选择mosquitto软件.

安装mosquitto

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#下载Mosquitto
weget https://mosquitto.org/files/source/mosquitto-1.6.2.tar.gz
tar -xzvf mosquitto-1.6.2.tar.gz
# 编译程序
yum install gcc-c++
yum install cmake
yum install openssl-devel #mosquitto默认支持openssl
#安装
cd mosquitto-1.6.2 #切换到解压目录
make #编译
make install #安装
#添加路径,防止mosquitto找不到libmosquitto.so.1文件,添加链接库路径
vim /etc/ld.so.conf.d/liblocal.conf
#写入下面内容
/usr/local/lib64
/usr/local/lib
#刷新
ldconfig

程序默认安装位置

程序名字 程序路径
mosquiotto server /usr/local/sbin
configuration /etc/mosquitto
utility command /usr/local/bin

配置mosquitto

  Mosquitto服务器的配置文件为/etc/mosquitto/mosquitto.conf,关于用户认证的方式和读取的配置都在这个文件中进行配置。对配置文件做如下修改:

1
2
3
4
5
6
7
8
9
10
11
12
useradd  mosquiotto #添加用户
passwd mosquitto #添加用户密码
vim /etc/mosquitto/mosquitto.conf
allow_anonymous false #禁用匿名登录
password_file /etc/mosquitto/pwfile.conf  #配置用户密码文件
acl_file /etc/mosquitto/aclfile.conf #配置mqtt topic 和用户
#mosquitto_passwd -c /etc/mosquitto/pwfile.conf admin #添加用户信息
vim aclfile.conf
#写入下面内容,设置topic和用户的关系
user admin
topic read sensor/info/# #订阅topic
topic write sensor/control/#         #发布topic

MQTT通信测试

服务端本地测试

1
2
3
mosquitto -c /etc/mosquitto/mosquitto.conf   #启动mosquitto服务
mosquitto_sub -h 192.168.1.100 -t mqtt #订阅mqtt topic
mosquitto_pub -h 192.168.1.100 -t mqtt -m "hello world, mqtt " #发布mqtt topic

发布消息:
发布消息
订阅消息:
订阅消息

远程测试

要在远程测试首先要安装mqtt.fx软件.

MQTT.Fx参数设置

mqtt 服务器的ip地址和端口号,登录的用户名和密码
 mqtt.fx_config图片

Server与MQTT.Fx软件通信

服务端发布消息:
 server发布消息图片
mqtt.fx软件订阅:
 mqtt.fx订阅消息图片
mqtt.fx发布消息:
 mqtt.fx发布消息图片
服务端订阅消息:
 server订阅消息图片