概述
MQTT 单片机移植与远程监控/控制
项目已公开于gitee。访问 jc-io 以了解详情
项目主要内容:
- 在ESP8266MOD(ESP12F)以及STM32 MCU上实现MQTT协议(分别使用了pubsubclient 和paho-mqtt库)
- 统一传感器数据上传接口
- 在单片机上实现简易终端, 可通过mqtt下发指令完成复杂功能
下载
通过以下指令克隆jc-io
项目
git clone https://gitee.com/eglwang/jc-io.git
cd jc-io
git submodule init
git submodule update
使用
jc-io
项目运行于ESP8266单片机, 使用platformIO(arduino)平台开发
jc-st
运行于STM32单片机,测试时为STM32G491,使用HAL库+FREERTOS V2开发
以下介绍 jc-io
项目的使用。
首次使用-配置
在VSCode中安装platformIO插件,打开jc-io文件夹
直接编译,如提示缺少某些库文件则下载到 lib文件夹
下载程序至 Node MCU, 按 Ctrl+Alt+S
打开串口监视器
首次使用时,设备将进行初始化,包括建立文件系统,创建配置文件,注册设备(需要连接到网络)等
format begin
format done
[scanning]:
..................[timeout]
[scanning]:
..................[timeout]
max try time exceed
在开机后设备将自动搜索可用Wi-Fi接入点,不过大概率找不到,此时需要自己手动输入。
- 在串口监视器中键入
_ate=1
后回车(输入按键时没有现象),此步将开启串口回显功能 - 输入
slp 0
回车,关闭定时休眠(设备默认会在5秒后休眠) - 输入
wifi [ssid] [password]
连接WiFi,此处将ssid于password 替换掉
如果连接WiFi成功,设备应该会自动注册,输出类似于下面的信息
no config file, regist now
chip ID:xxxxxx
.........
Connected to server, start registing, this may takes a bit long time.
==========
{"ok": 0, "msg": "ok", "username": "xxxxxxxxxxx", "password": "xxxxxxxxxxxxxx", "time": "2022/3/20 18:17:20", "dev": "xxxxx"}
==========
如果注册成功则表明设备已经在服务器完成注册,并且申请到了一套连接到MQTT代理的配置。输出中的
chip ID
即设备的ID号,也是MAC地址,设别唯一,之后将用到。
- 登录Canary,如果没有可点击登录窗口的圆形图标注册或者访问注册页面。
- 打开My应用,点击左下角的“+”图标,输入设备ID(即之前输出的Chip ID,确认,完成设备添加。刷新页面,如果无误应该可以看到存在新加入的设备。
在设备完成初始化后配置信息将保存在本地,之后不需要再重新配置
传感器配置
jc-io
内置了一些传感器的驱动,如果你手头恰好有这些传感器,那么你无需写一行代码即可直接使用。
DHT11 温湿度传感器
默认情况下设备将添加一个DHT11传感器,并配置在D21管脚,如果你有一个DHT11,可将其连接到D2管脚。
如果你发现你的设备已经休眠,不要奇怪,这可能是因为设备多次尝试读取DHT11数据失败而触发故障机制进入休眠。没关系,重启设备在D2管脚接上一个DHT11传感器即可。
如果你需要更改DHT11管脚,首次键入sensor -
,之后键入sensor dht11:d5
更改管脚,d5为D5管脚,可自定义。
如果你需要让配置持久生效,需要将指令保存到本地的配置文件中,执行这一功能的指令是 file
, 你可以键入file -h
查看用例。
例如,如果你需要更改默认的传感器配置,输入以下内容
file -d sensor
file sensor dht11:d5
第一条指令删除配置文件中以sensor开头的行。
第二条指令则向配置文件写入“sensor dht11:d5”,设备将在下一次启动时执行这条指令以在D5管脚上建立一个DHT11传感器对象,或者你可以使用load
指令重新加载配置文件使其立即生效。
BMP280 大气压-温度传感器
除了DHT11传感器外,jc-io还内置了BMP280传感器以及通用的ADC传感器。BMP280连接方式为
CS --> VCC
SDO --> VCC
SDA --> SD3
SCL --> SD2
使用I2C通信,设备地址MLB位为1
配置指令为 sensor bmp
通用模拟量传感器
而对于一般输出模拟信号的传感器,使用ADC对信号采样(A0管脚),指令为sensor adc:[label]
,其中“label”是采样数据的名称,你可以设置为你所使用传感器的类型或者其他有意义的值,该项数据的值是0-1023,对应电压从0-Vcc。如果不巧你使用的传感器输出的电压是负逻辑,那你可以使用 sensor nadc:[label]
来配置,该类型的传感器对象输出值是
V
a
l
=
10234
−
V
a
l
a
d
c
Val= 10234-Val_{adc}
Val=10234−Valadc
设置传感器采样速率
如果你需要更改传感器的采样速率(默认为1分钟每次),你可以使用以下指令
rep 600
这条指令的意思为设置600秒读一次传感器数据,此外如果你设置了定时休眠,那么每次休眠的时间也将会改成600秒以维持采样率不变。
数据查看
如果你已经添加了设备,并且设备上传了数据,那么恭喜你
你现在可以在[Scope应用](https://glwang.site/scope/)中查询你的传感器数据了。下图给出了Scope的一个样例,例子中查询一天中大气压的变化。
本文所用的管脚均值ESP12F/E或Node MCU上所标注的管脚,非GPIO管脚号 ↩︎
最后
以上就是紧张铃铛为你收集整理的基于MQTT协议的远程监控-控制系统——ESP/STM32 MCUs 实现MQTT 单片机移植与远程监控/控制的全部内容,希望文章能够帮你解决基于MQTT协议的远程监控-控制系统——ESP/STM32 MCUs 实现MQTT 单片机移植与远程监控/控制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复