基于瑞萨RA6M5 MCU的环境监测系统设计

描述

 

1设计简介

本项目初步设计思路是打算以瑞萨单片机作为控制和数据处理的单元,使用温湿度,光照传感器去监测周围的环境参数,在屏幕上完成传感器数据和相关信息的显示。同时,使用WIFI无线模组与单片机之间进行数据交互,接入物联网云平台。尝试利用上位机实现对于温度、湿度、光照强度等相关环境参数监测。但是由于时间原因以及个人能力有限制,只完成了部分设计。本项目是基于启明6M5开发板完成了环境监测系统设计,传感器DHT11获取温度湿度的数据;传感器GY39获取光照强度数据;0.96寸OLED屏幕提供显示功能,能够显示传感器数据以及相关信息。编写上位机软件,实现温湿度传感器数据的上报。

2设计框架

    RA6M5    

3项目说明

    3.1 主控板

本项目是基于启明6M5开发板完成设计,RA6M5芯片配置如下:采用 Arm Cortex-M33 内核的瑞萨 RA 系列 32 位 MCU;主芯片为的R7FA6M5BH3CFC,主高达200MHz,2MB的代码闪 存,8KB数据闪存,以及512KB的带奇偶校验/ECC的SRAM。启明6M5开发板具有丰富的接口与外设,例如基本的LED,按键,电容按键,蜂鸣器等,同时也具有RS232,RS485,CAN,以太网接口,板载ESP8266无线WiFi等。

RA6M5

RA6M5

3.2 传感器模块

① 温湿度传感器DHT11是一款有已校准数字信号输出的温湿度传感器。精度湿度+-5%RH, 温度+-2℃,量程湿度20-90%RH, 温度0~50℃。

更多DHT11信息请参考:https://baike.sogou.com/v73984313.htm?fromTitle=DHT11

下图为DHT11的引脚说明图,DATA引脚为信号输入输出。 RA6M5    

② 光照强度传感器GY-39

GY-39 是一款低成本,气压,温湿度,光强度传感器模块。工作电压 3-5v,功耗小,安装方便。

其工作原理是,MCU 收集各种传感器数据,统一处理,直接输出计算后的结果。此模块,有两种方式读取数据,即串口 UART(TTL 电平)或者 IIC(2 线)。串口的波特率有 9600bps 与 115200bps,可配置,有连续,询问输出两种方式,可掉电保存设置。可适应不同的工作环境,与单片机及电脑连接。

模块另外可以设置单独传感器芯片工作模式,作为简单传感器模块,MCU 不参与数据处理工作。

传感器技术参数

RA6M5

GY39-MCU-IIC协议:

RA6M5

传感器接线示意图:

RA6M5

3.3 OLED显示模块

OLED,即有机发光二极管(Organic Light-Emitting Diode),又称为有机电激光显示(Organic Electroluminesence Display, OELD)。OLED 由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快的特点。

目前市面上常用的0.96寸OLED屏幕通讯方式主要有SPI和I2C两种!SPI为4线制较多,而I2C为2线制。2种通讯协议较为浅显的区别:总所周知,SPI的通讯速度明显快于I2C的通讯速度,所以通常使用SPI通讯协议的OLED屏幕可以实现更高的帧数显示,画面更为流畅丝滑。本次实验所采用的0.96寸OLED屏幕为I2C通讯方式,故在此稍微给读者介绍一下I2C通讯原理。IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。   

开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。    

结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。   

应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。

这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。

RA6M5      

4 项目配置

瑞萨RA系列的MCU,提供了图形化配置工具,和STM32CubeMX类似,这大大的方便了开发者配置。同时,瑞萨的Flexible Software Package 旨在以较低的内存占用量提供快速高效的驱动程序和协议栈。FSP 集成了中间件协议栈、独立于 RTOS 的硬件抽象层(HAL)驱动程序, 以及最基础的板级支持包(BSP)驱动程序。在本次的设计中,主要是对于传感器模块,显示模块进行相关的配置,下面是配置过程。

4.1 OLED显示模块

选择了使用EBF模块接口上的I2C接口,因为改接口的布线顺序和OLED的I2C接口一致。可以直接将OLED插上去,减少了接线。该接口使用的是SCI6的I2C功能。

Pin下配置如下:选择SCI6,复用I2C模式。 RA6M5RA6M5RA6M5

4.2 传感器模块

温湿度传感器DHT11,任意配置一个GPIO端口就可以了,不需要其他的配置,只要注意时序问题即可,重点在GY39传感器的配置。Pin下配置如下:选择SCI2,复用I2C模式。

RA6M5RA6M5RA6M5

4.3 主函数代码

主函数的代码主要是传感器的基本配置,OLED模块的配置,调试串口的配置与上位机通信的格式。

 1//--------------------------------------------------------------------------------------------------
 2// 函数头文件    |   0   |   1   |   2   |   3   |   4   |   5   |   6   |   7   |   8   |   9
 3//--------------------------------------------------------------------------------------------------
 4#include "hal_data.h"
 5#include "oled.h"
 6#include "bmp.h"
 7#include "bsp_debug_uart.h"
 8#include "bsp_led.h"
 9#include "bsp_dht11.h"
10#include "bsp_gpt_timing.h"
11
12#define SUCCESS 1
13
14void Hardware_init(void)undefined
15FSP_CPP_HEADER
16void R_BSP_WarmStart(bsp_warm_start_event_t event)undefined
17undefined
18
19/* Callback function */
20i2c_master_event_tundefined
21void sci6_i2c_master_callback(i2c_master_callback_args_t *p_args)
22undefined
23undefined
24undefinedifundefinedNULLundefined
25undefined
26undefined/* capture callback event for validating the i2c transfer event*/
27undefined
28undefined
29
30undefined
31
32void sci2_i2c_master_callback(i2c_master_callback_args_t *p_args)
33undefined
34undefined
35undefinedifundefinedNULLundefined
36undefined
37undefined/* capture callback event for validating the i2c transfer event*/
38undefined
39undefined
40
41undefined
42
43
44fsp_err_tundefined
45uint32_tundefined1000undefined
46
47undefined
48uint8_tundefined
49externundefineduint8_tundefined
50externundefineduint32_tundefined
51typedefundefinedstruct
52{
53undefineduint32_tundefined
54undefineduint16_tundefined
55undefineduint16_tundefined
56undefineduint16_tundefined
57undefined
58undefined
59uint32_tundefined
60floatundefined
61
62//==================================================================================================
63//  函数说明: 硬件初始化
64//  函数备注: Hardware_init
65//--------------------------------------------------------------------------------------------------
66//  |   -   |   -   |   0   |   1   |   2   |   3   |   4   |   5   |   6   |   7   |   8   |   9
67//==================================================================================================
68void Hardware_init(void)
69undefined
70undefined// SCI4 UART 调试串口初始化
71undefined
72undefinedprintfundefined"Debug-UART4-Init OK  "undefined
73undefined
74undefinedprintfundefined"LED_Init    OK  "undefined
75undefinedprintfundefined"IIC-Config  Start  "undefined
76undefined
77undefinedprintfundefined"DHT11_Init OK  "undefined
78undefined/* Initialize the I2C module */
79undefined
80undefined/* Handle any errors. This function should be defined by the user. */
81undefined
82undefinedprintfundefined"IIC-Config OK  "undefined
83undefined//初始化OLED
84undefined
85undefinedprintfundefined"oled-Init OK  "undefined
86
87undefined
88
89
90void read_bme(void)
91undefined
92undefineduint16_tundefined2undefined0undefined
93undefineduint8_tundefined10undefined0x00undefined//接收读取后的数据
94undefineduint8_tundefined0x04undefined//写数据
95undefined
96undefined1undefinedtrueundefined
97undefined
98undefined3undefined
99undefined10undefinedfalseundefined
100undefined3undefined
101undefined
102undefined
103
104undefined0undefined8undefined1undefined
105undefined0undefined2undefined8undefined3undefined
106undefined1undefined4undefined8undefined5undefined
107
108undefineduint32_tundefined0undefined16undefined1undefined
109undefined6undefined8undefined7undefined
110undefined8undefined8undefined9undefined
111undefined
112void read_lux(void)
113undefined
114undefineduint16_tundefined2undefined0undefined
115undefineduint8_tundefined4undefined0undefined
116undefineduint8_tundefined0x00undefined//写数据
117undefined
118undefined1undefinedtrueundefined
119undefined
120undefined3undefined
121undefined4undefinedfalseundefined
122undefined3undefined
123undefined
124undefined
125undefined0undefined0undefined8undefined1undefined
126undefined1undefined2undefined8undefined3undefined
127undefineduint32_tundefined0undefined16undefined1undefined
128
129undefined
130
131//==================================================================================================
132//  函数说明: 主函数入口
133//  函数备注: hal_entry
134//--------------------------------------------------------------------------------------------------
135//  |   -   |   -   |   0   |   1   |   2   |   3   |   4   |   5   |   6   |   7   |   8   |   9
136//==================================================================================================
137
138/*******************************************************************************************************************//**
139 * main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used.  This function
140 * is called by main() when no RTOS is used.
141 **********************************************************************************************************************/
142void hal_entry(void)
143undefined
144undefined/* TODO: add your own code here */
145
146undefined
147undefinedprintfundefined"RA6M5-Board-Init OK  "undefined
148
149undefined0undefined0undefined0undefined//瑞
150undefined16undefined0undefined1undefined//萨
151undefined32undefined0undefined5undefined//电
152undefined48undefined0undefined6undefined//子
153undefined60undefined0undefined"Renesas"undefined16undefined
154undefined0undefined2undefined2023undefined4undefined16undefined//显示ASCII字符的码值
155undefined32undefined2undefined2undefined//中文字->年
156undefined48undefined2undefined8undefined2undefined16undefined//显示ASCII字符的码值
157undefined64undefined2undefined3undefined//中文字->月
158undefined80undefined2undefined5undefined2undefined16undefined//显示ASCII字符的码值
159undefined96undefined2undefined4undefined//中文字->日
160
161undefined0undefined4undefined7undefined//中文字->温
162undefined16undefined4undefined9undefined//中文字->度
163
164undefined64undefined4undefined8undefined//中文字->湿
165undefined80undefined4undefined9undefined//中文字->度
166
167undefined0undefined6undefined"Light:"undefined16undefined
168undefined96undefined6undefined"Lux"undefined16undefined
169undefined
170undefined//DHT11端口配置
171
172
173undefinedwhileundefined1undefined
174undefined
175
176undefinedifundefined1undefined
177undefined
178undefined//printf("time1s_flag ...... ");
179undefinedprintfundefined"T%dPH%dI"undefined
180undefinedprintfundefined" "undefined
181
182undefined
183
184undefined32undefined4undefined2undefined16undefined
185undefined96undefined4undefined2undefined16undefined
186undefined
187undefined//光照传感器
188undefined100undefined
189undefined//printf("LightLux: %.2f lux   ",(float)LightLux );
190undefined48undefined6undefined5undefined16undefined
191undefined
192
193
194
195#if BSP_TZ_SECURE_BUILD
196undefined/* Enter non-secure code */
197undefined
198#endif
199undefined
200
201/*******************************************************************************************************************//**
202 * This function is called at various points during the startup process.  This implementation uses the event that is
203 * called right before main() to set up the pins.
204 *
205 * @param[in]  event    Where at in the start up process the code is currently at
206 **********************************************************************************************************************/
207void R_BSP_WarmStart(bsp_warm_start_event_t event)
208undefined
209undefinedifundefined
210undefined
211#if BSP_FEATURE_FLASH_LP_VERSION != 0
212
213undefined/* Enable reading from data flash. */
214undefined1Uundefined
215
216undefined/* Would normally have to wait tDSTOP(6us) for data flash recovery. Placing the enable here, before clock and
217         * C runtime initialization, should negate the need for a delay since the initialization will typically take more than 6us. */
218#endif
219undefined
220
221undefinedifundefined
222undefined
223undefined/* C runtime environment and system clocks are setup. */
224
225undefined/* Configure pins. */
226undefined
227undefined
228undefined
229
230#if BSP_TZ_SECURE_BUILD
231
232BSP_CMSE_NONSECURE_ENTRY void template_nonsecure_callable ()undefined
233
234/* Trustzone Secure Projects require at least one nonsecure callable function in order to build (Remove this if it is not required to build). */
235BSP_CMSE_NONSECURE_ENTRY void template_nonsecure_callable ()
236undefined
237
238undefined
239#endif

5测试效果

  RA6M5

  RA6M5      

6总结

首先非常感谢野火举办的瑞萨RA MCU创意氛围赛,能让我入围获得这次参赛的机会。本次创意氛围赛学习到了很多东西,对RA6M5单片机的内核以及控制有了了解,野火官方提供的手册例程使用起来也很方便,能够快速上手,便于开发使用。本项目初步设计思路是打算以瑞萨单片机作为控制和数据处理的单元,使用传感器去监测周围的环境参数,在屏幕上完成传感器数据和相关信息的显示。同时,使用无线模组接入物联网云平台。尝试利用上位机实现对于相关环境参数监测。但是由于时间原因以及个人能力有限制,只完成了部分设计。虽然现在完成的功能较为简单,但是希望后面有时间继续完善系统设计,添加实时操作系统,接入云平台,利用微信小程序,app等相关技术完善作品,最后,再次感谢野火和瑞萨举办RA-MCU创意氛围赛,提供了学习机会。

 

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分