基于MQTT协议的远程监控-控制系统——ESP/STM32 MCUs 实现

MQTT 单片机移植与远程监控/控制

项目已公开于gitee。访问 jc-io 以了解详情


项目主要内容:

  1. 在ESP8266MOD(ESP12F)以及STM32 MCU上实现MQTT协议(分别使用了pubsubclient 和paho-mqtt库)
  2. 统一传感器数据上传接口
  3. 在单片机上实现简易终端, 可通过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接入点,不过大概率找不到,此时需要自己手动输入。

  1. 在串口监视器中键入_ate=1后回车(输入按键时没有现象),此步将开启串口回显功能
  2. 输入slp 0回车,关闭定时休眠(设备默认会在5秒后休眠)
  3. 输入 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地址,设别唯一,之后将用到。

  1. 登录Canary,如果没有可点击登录窗口的圆形图标注册或者访问注册页面
    在这里插入图片描述
  2. 打开My应用,点击左下角的“+”图标,输入设备ID(即之前输出的Chip ID,确认,完成设备添加。刷新页面,如果无误应该可以看到存在新加入的设备。
    添加设备
    添加设备2

在设备完成初始化后配置信息将保存在本地,之后不需要再重新配置

传感器配置

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=10234Valadc

设置传感器采样速率

如果你需要更改传感器的采样速率(默认为1分钟每次),你可以使用以下指令

rep 600

这条指令的意思为设置600秒读一次传感器数据,此外如果你设置了定时休眠,那么每次休眠的时间也将会改成600秒以维持采样率不变。

数据查看

如果你已经添加了设备,并且设备上传了数据,那么恭喜你

你现在可以在[Scope应用](https://glwang.site/scope/)中查询你的传感器数据了。

下图给出了Scope的一个样例,例子中查询一天中大气压的变化。
Scope应用中查看数据


  1. 本文所用的管脚均值ESP12F/E或Node MCU上所标注的管脚,非GPIO管脚号 ↩︎

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值