我们要使用ESP8266使得STM32能够和服务器之间传递数据,需要有一台MQTT服务器。当然读者可以使用腾讯云、阿里云、OneNet等平台提供的MQTT服务更方便一些。
逻辑是这样的:我们首先需要一台服务器A作为中转站,然后我们的STM32作为客户端能够发送和接收,那么我们还需要另外一台客户端来发送接收,因此,我创建了两个虚拟机,一个用作服务器,一个用作客户端与我们的STM32交互数据。
1. 安装Ubuntu虚拟机服务器
如何将虚拟机配置成服务器
这步操作重要的地方是网络的配置,至于将虚拟机配置成服务器,主要是因为实际情况下我们往往是要通过远程访问服务器的,所以把虚拟机配置成服务器,以便能够远程访问。但我们用不到远程访问。
2. 在Ubuntu虚拟机上配置MQTT服务器
我们在两台虚拟机上安装mosquitto服务器。安装步骤如下:
(1)先切换到root用户
su root
(2)更新一下安装源
apt update
(3)安装mosquitto服务器
apt install mosquitto
(4)修改一下mosquitto默认配置文件,按下图修改
gedit /etc/mosquitto/pwfile.example
allow_anonymous false:否定了匿名登录;
/etc/mosquitto/pwfile.example:用户名和密码保存在这里。
(5)创建用户名和密码
mosquitto -c /etc/mosquitto/pwfile.example test
执行上述代码会把文件里的内容清掉并创建一个名为“test”的用户,如果不加“-c”就是在文件里加一个用户。 然后需要配置一下密码,后面用得到。
(6)启动/重启mosquitto服务器
service mosquitto restart
(7)查看有几个设备接入这个服务器
lsof -i | grep mosquitto
如果只有上面两个表示没有人连接,我的已经连接了一个客户端;注意一定要是*号 ,才表示允许被所有的IP地址访问,对公网也有用。如果没带*号,重新配置下虚拟机的网络设置。
(8) 安装mosquitto客户端
apt install mosquitto-clients
经过以上操作我们就在这台虚拟机上安装好MQTT服务器了,既可以当作服务器也可以当作客户端使用。我们再在另一台虚拟机上执行以上步骤安装 一下,当然也可以不安装,因为我这里是想用虚拟机当作客户端,读者也可以研究一下把真机当作客户端。
(9)服务器运行状态查看
ps -ef | grep mosq
3. mosquitto服务器的简单使用
3.1 订阅
mosquitto_sub -h "服务器IP地址" -p "端口号" -u "用户名" -P "密码" -t "主题"
例:
mosquitto_sub -h "192.168.171.179" -p 1883 -u test -P test -t "A"
上述意思就是:我这台客户端订阅了 "192.168.171.179"这台服务器上名为“test”这个用户的“A”主题。
3.2 发布
mosquitto_pub -h "服务器IP地址" -p "端口" -u "用户名" -P "密码" -t "主题" -m "消息"
例:
mosquitto_pub -h "192.168.171.179" -p 1883 -u test -P test -t "A" -m "HelloWrld"
经过上述配置和验证以后,就可以 把虚拟机当作服务器来提供MQTT服务供STM32访问了。