树莓派上的MQTT
树莓派上的MQTT
MQTT是一个应用比较广泛的物联网的通信协议,最近还是想自己做一个智能温度控制系统,所以研究了一下Mosquitto这个MQTT的服务端的软件,同时还研究了一下在Micropython下MQTT协议的实现。
这个小工程的基本实现方式是一个MQTT的服务端负责各种消息的分发,两个MQTT的ESP32开发板,一个负责产生温度湿度数据,同时还控制一个台灯,一个负责控制继电器实现加热器的控制。另外还会有一个tornado的
服务端提供一些数据展示和微信接口的功能。
Server端的配置
MQTT的服务端采用Mosquitto
软件实现,安装也十分简单,直接在软件库中即可安装:
sudo apt install mosquitto mosquitto-clients mosquitto-dev
服务端的配置
默认的mosquitto
是没有用户名和密码的,这样是十分危险的,所以第一步我们先来配置一下它的用户名和密码,mosquitto
的配置稍微有点麻烦。
- 修改配置文件:/etc/mosquitto/mosquitto.conf,添加以下内容:
# disable anonymous user
allow_anonymous false
password_file /etc/mosquitto/pwfile
acl_file /etc/mosquitto/acl
- 生成密码文件,
mosquitto
的密码不是明文保存的,所以需要用它的工具生成密码
sudo mosquitto_passwd -c /etc/mosquitto/pwfile major
上述命令就是生成一个major
用户的密码,提醒一下,生成一个随机密码可以通过以下方式实现:
openssl rand -base64 32
- 配置主题访问控制
主题访问控制是控制哪些用户可以访问哪些主题,mosquitto
里面也是一张表,我们在/etc/mosquitto/acl
中添加如下信息即可实现对home
主题的控制
# User access topic
user major
topic write home/#
user major
topic read home/#
- 重启生效新的配置
sudo service mosquitto restart
下位机程序设计
在下位机的程序上我还是费了挺长时间的,最后选择了Micropython
,一方面是因为比较熟悉python
另外也是偶然发现它是可以支持库扩展的,以前一直因为Micropython
没有MQTT
库而烦恼,现在发现
原来Micropython
也可以通过upip安装各种库,真是非常给力。以下就是Micropython
安装mqtt
库的方法:
import network
import upip
sta_if = network.WLAN(network.STA_IF)
sta_if.active(True)
sta_if.connect("Wifi SSID", "Wifi password")
upip.install('micropython-umqtt.simple')
upip.install('micropython-umqtt.robust')
装好之后直接例化MQTTClient就可以定义一个mosquitto
的实例实现MQTT
的功能。
最后更新于 2017-12-08 08:48:27 并被添加「」标签,已有 2550 位童鞋阅读过。
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。