树莓派上的MQTT

树莓派上的MQTT

MQTT是一个应用比较广泛的物联网的通信协议,最近还是想自己做一个智能温度控制系统,所以研究了一下Mosquitto这个MQTT的服务端的软件,同时还研究了一下在Micropython下MQTT协议的实现。

这个小工程的基本实现方式是一个MQTT的服务端负责各种消息的分发,两个MQTT的ESP32开发板,一个负责产生温度湿度数据,同时还控制一个台灯,一个负责控制继电器实现加热器的控制。另外还会有一个tornado的
服务端提供一些数据展示和微信接口的功能。

Server端的配置

MQTT的服务端采用Mosquitto软件实现,安装也十分简单,直接在软件库中即可安装:

sudo apt install mosquitto mosquitto-clients mosquitto-dev

服务端的配置

默认的mosquitto是没有用户名和密码的,这样是十分危险的,所以第一步我们先来配置一下它的用户名和密码,mosquitto的配置稍微有点麻烦。

  1. 修改配置文件:/etc/mosquitto/mosquitto.conf,添加以下内容:
# disable anonymous user
allow_anonymous false

password_file /etc/mosquitto/pwfile
acl_file /etc/mosquitto/acl
  1. 生成密码文件,mosquitto的密码不是明文保存的,所以需要用它的工具生成密码
sudo mosquitto_passwd -c /etc/mosquitto/pwfile major

上述命令就是生成一个major用户的密码,提醒一下,生成一个随机密码可以通过以下方式实现:

openssl rand -base64 32
  1. 配置主题访问控制

主题访问控制是控制哪些用户可以访问哪些主题,mosquitto里面也是一张表,我们在/etc/mosquitto/acl中添加如下信息即可实现对home主题的控制

# User access topic
user major
topic write home/#

user major
topic read home/#
  1. 重启生效新的配置
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的功能。

发表新评论