欢迎光临散文网 会员登陆 & 注册

基于CH32V208WB和CH32V003F4的微型气象站

2023-02-27 03:26 作者:修地球八级工  | 我要投稿

1.前言

    微型气象站主要实现对居住或办公场所内温度、湿度、大气压强和光照等气象变化实时监测,更为准确呈现屋内或办公区域的气象变化,便于直观感知。

    微型气象站由检测端和接收端两部分组成。检测端连接传感器,将传感器测量数据上报至腾讯云物联网平台。在腾讯云物联网平台建立数据流转规则,将检测端上报的数据以MQTT报文形式转发至接收端。接收端处理收到的数据,显示在液晶屏上。实现一处检测,多处查看。

数据流示意图

2.硬件构成

2.1 检测端硬件构成

    检测端围绕CH32V208WBU6评估板,外接AHT21B温湿度传感器、BMP280压力传感器、光敏电阻、1.44"LCD和W25Q64 SPI Flash模块组成。由于作者非电子行业从业者,能力有限,没有设计专门的电路板,所以本项目外接模块均以杜邦线连接。

检测端接线图
检测端运行LCD显示内容

a.CH32V208WBU6评估板:

CH32V208WBU6评估板
系统框图

    主控CH32V208WBU6集成10M以太网 MAC+PHY模块、SPI接口、I2C接口和16路ADC通道等丰富外设;以及最大可配置64KB易失数据存储区SRAM,480KB可配置程序存储区CodeFlash(零等待应用区+非零等待数据区)。满足本项目对外设资源的需求。

    CH32V208WBU6通过I2C接口读取并处理AHT21B和BMP280测量的温湿度和大气压强原始数据成实际值;通过ADC通道采样光敏电阻的电压转换成光照状态,以及采样内置温度传感器的温度并转换成实际值作为参照温度;通过SPI接口接入的LCD和带字库的SPI Flash将传感器测量值显示在LCD上;通过将接入了10M以太网 MAC+PHY模块的RJ45接口连接路由器,接入互联网,以TCP协议连接至腾讯云物联网平台,以MQTT消息传输协议定时上报测量的温湿度和气压数据,实现跨区域消息传递,并定期获取网络时间校准RTC时间。

外设资源使用说明

b.AHT21B温湿度传感器

AHT21B是一款配置了专用的ASIC传感器芯片、高性能的半导体硅基电容式湿度传感器和一个标准的片上温度传感器,使用标准I²C数据输出信号格式。

 AHT21B温度测量范围:-40~+80°C,湿度测量范围:0~100%RH;温度测量精度:±0.5℃,湿度测量精度:±3%RH(25℃);温度分辨率:0.01℃,湿度分辨率:0.024%RH。

    本项目选用是已经引出了电源和I²C接口的AHT21B模块,方便接入CH32V208WB评估板使用。

c.BMP280气压传感器

BMP280压力测量范围:300-1100hPa(海拔高度-500m到9000m);相对精度:±0.12hPa  (950-1050hPa@25℃);绝对精度:±1hPa(950-1050hPa,0~40℃);支持I2C和SPI两种形式通信。

    本项目选用是已经引出了电源和I²C接口的BMP280模块,方便接入CH32V208WB评估板使用。

d.1.44" 128x128像素LCD

    本项目选用的是驱动IC为ST7735S带背光的液晶屏,SPI接口通信。屏幕尺寸1.44寸,分辨率128x128,此尺寸和分辨率显示16像素字高的汉字和ASCII字符具有不错的效果,也可以减少显示内容刷新对主控CH32V208WB过长时间的占用,避免过大的字符或图案刷新占用主控CH32V208WB过长时间,影响实时性要求高的任务刷新。

e.SPI Flash

    存储LCD显示字库,为LCD显示ASCII字符和汉字字符提供字模数据来源。

f.光敏电阻

    光敏电阻器是利用半导体的光电导效应制成的一种电阻值随入射光的强弱而改变的电阻器,利用此特性接入ADC通道采样电阻值变化,即可转换为光照情况。

2.2 接收端硬件构成

    接收端围绕CH32V003F4P6核心板,外接ESP8266-01 802.11b/g/n Wi-Fi通信模块和0.96" 128x64像素OLED液晶屏组成。

接收端接线图
接收端运行效果

a.CH32V003F4P6核心板

CH32V003F4P6核心板
系统框图

    主控CH32V003F4P6集成2个看门狗定时器和1个32位系统时基定时器,以及USART、I2C等常见外设,具有2KB SRAM+16KB Flash,满足外接模块对主控外设资源的需求。

    CH32V003F4P6通过USART1接入ESP8266-01模块,配置ESP8266-01模块连接至腾讯云物联网平台,接收腾讯云物联网平台流转的检测端上报的数据;通过IIC1接口接入OLED屏幕,将接收到的数据现在OLED屏幕上。

外设资源使用说明

b.ESP8266-01模块

    ESP8266-01模块是一款基于乐鑫ESP8266EX的低功耗UART-WiFi芯片模组,在烧录MQTT+AT固件后,可以实现使用AT指令接入云端服务,为连接该模块的设备添加联网功能。

    CH32V003F4P6没有连接以太网相关的外设,为了方便连接互联网,使用一片ESP8266-01模块提供联网功能。

c.0.96" OLED屏幕模块

    本项目选用的是使用IIC模式通信的0.96" OLED屏幕模块,屏幕像素128x64。接收端没有大量的图形或者数据刷新要求,此尺寸和模式满足项目要求

3.程序说明

    检测端和接收端程序均使用MounRiver Studio作为IDE开发编写。文件编码使用默认的GBK,绝大多数文件内都添加了方便理解的汉字注释(如下方systick服务函数所示),如果使用默认文件格式是UTF-8格式的编辑器或者IDE打开出现乱码,请使用增强型文本编辑器转换一下格式即可。

3.1  检测端程序说明

    检测端程序包含两部分,一是传感器检测部分,每5s读取一次传感器测量值,处理成实际值后显示在LCD屏幕上;二是ETH以太网任务部分,同步传感器检测周期5s,将最新一次的测量数据发送至腾讯云物联网平台。任务使用SysTick作为时基定时器,确保周期性任务的准时执行。

    从SPI Flash中读取字模数据和将字模数据发送至LCD主控IC ST7735S均使用SPI DMA功能,提高数据传输效率。因为对ADC采样的三个通道实时性要求不高,同步传读取传感器测量值周期5秒,ADC工作模式配置使用手动触发,单次采样,使用SPI DMA接收采样数据。SysTick作为任务刷新时基定时器,每10ms在中断服务函数中刷新一次以太网通信的时间任务状态(统计TCP超时等),同时更新周期性任务状态机状态。

SysTick中断服务函数

检测端主任务
以太网任务

3.2 接收端程序说明

    接收端因为没有外接过多的模块和涉及大量的数据处理,于是将系统时钟调整至了与CH32V003F4P6核心板上晶振一致的24MHz,节省能耗。

接收端程序框图

    USART1使用TC(发送完成)和IDLE(总线空闲)中断结合DMA功能,形成接发不定长数据(一定范围内的不定长)形式,提高初始化配置ESP8266-01模块工作模式和接收ESP8266-01模块转发的数据的效率。如下代码介绍了TC和IDLE中断对单次启用DMA功能的配置方法。


    ESP8266-01模块配置连接到腾讯云物联网平台使用状态机模式,上一任务ESP8266-01模块返回执行成功后,解锁并开始执行下一任务。如下代码介绍了使用AT指令配置EPS8266-01模块连接至腾讯云物联网平台的流程。

4.腾讯云物联网开发平台

腾讯云物联网开发平台(IoT Explorer)是面向智慧生活与产业互联应用的物联网 PaaS 平台,为基于物联网的各行业设备制造商、方案商及应用开发商提供一站式设备智能化服务。

本项目基于腾讯云物联网开发平台的提供最多50个设备接入的“公共实例”资源实现。

4.1 腾讯云物联网开放平台新建一个产品

启用或新建公共实例
新建一个项目

新建一个产品

4.2 物模型添加自定义功能

物模型中添加自定义功能

4.3 属性上报实现方式

物模型主题

例如:

将标识符后的数据发布至属性上报主题

如果订阅了属性上报响应主题会收到如下图所示的报文内容

属性上报响应主题报文

检测端上报属性由如下部分代码实现

4.4 获取网络时间校准RTC时间的实现方式

获取ntp信息报文

例如:

订阅ntp服务消息下行主题

发布报文:{"type":"get","resource":["time"]}

向ntp服务消息上行主题发布获取ntp信息的主题

收到订阅的ntp服务消息下行主题发布的ntp消息,字符“time”后的数值即为当前UTC时间戳,ntptime1和ntptime2后的数值最后三位为毫秒。

收到订阅ntp服务消息下行主题发布的ntp消息

程序中由如下代码提取出time字符之后的数值字符并转换成整形数字

再将变量UnixTimeStampCount存储的UTC时间戳写入到RTC计数寄存器,实现设备同步网络时间。

4.5 物模型属性云流转实现方式

a.检测端和接收端以新建设备形式添加至“设备调试”列表

新建设备

b.新建一个或者使用一个空闲的自定义主题作为消息云流转目标主题接收检测端上报主题的消息

新建自定义主题

c.“数据流转”→“规则引擎”→“新建规则”,新建一条数据流转规则

新建数据流转规则

d.编辑规则

编辑规则
编辑流转数据源

e.添加行为

添加流转数据的行为

f.启用规则

启用规则

g.订阅自定义主题,等待规则转发数据

设备订阅接收云流转消息的自定义主题
接收端收到流转的数据
对照检测端上报的数据

h.在流转规则“字段”中添加筛选条件(params.Temperature, params.Humidity, params.Atmosphere),只将上报属性报文中“params.Temperature”,“params.Humidity”和“params.Atmosphere”三项内容流转至接收端。

上报的 JSON 数据格式,可以是嵌套的 JSON。例如:{"device_status":{"switch":"on"}},可以通过 device_status.switch 来获取到 switch 的值。

添加流转筛选条件

添加筛选条件后收到的流程消息
对照检测端上报的数据

接收端对流转数据的处理方式如下代码所示:


5.后记

    感谢沁恒公司组织的这次创新应用大赛,让我接触到了沁恒公司推出的外设资源丰富的RISC-V内核的通用微控制器,结合易于上手的IDE和常用开发文档均能找到中文版本,很大程度缩短了学习时间。由于本人水平有限,谬误之处,请不吝批评指正。


基于CH32V208WB和CH32V003F4的微型气象站的评论 (共 条)

分享到微博请遵守国家法律