1、方案概述
此方案是建基于TencentOS Tiny CH32V_EVB RISC-V开发套件。开发板是采用沁恒RISC-VMCUCH32V307VCT6芯片,CH32V305/7系列是基于沁恒自研RISC-V架构微处理器青稞V4系列设计的32位工业级互联型微控制器,配备了硬件堆栈区、快速中断入口,在标准RISC-V基础上大大提高了中断响应速度。加入单精度浮点指令集,扩充堆栈区,具有更高的运算性能。扩展串口UART数量到8组,定时器到10组,其中4组高级定时器。提供USB2.0高速接口(480Mbps)并内置了PHY收发器,而以太网MAC升级到千兆并集成了10M-PHY模块,并且板载有esp8266 WiFi模组,支持腾讯云固件,这样提供了强大多元化的网络传输能力。同时板载有1.54寸 IPS高清显示屏,支持240*240分辨率,可以即时反馈相关的数据信息。再结合TencentOS Tiny开源物联网操作系统简便快速的开发如虎添翼。配合腾讯云物联网开发平台IoT Explorer 和腾讯连连小程序能高效地开发出基于物联网应用技术的智能设备。
2、方案落地
由于TencentOS Tiny CH32V_EVB RISC-V开发套件功能强大可以通过对接不同的传感器实现不同的功能组合,因此我们这次就通过DHT11传感器和红外检测传感器,实现一个简单的数据据上报系统。
这次我们设想的应用场景是智能纸巾盒,通过DHT11传感器获取环境的温度和湿度并且进行实时上报。而红外检测传感器则负责对纸巾有没进行判断,并将结果进行上报。通过腾讯云物联网开发平台IoT Explorer进行数据交互,并以腾讯连连小程序进行实时反馈。
3、方案组件
3.1 DHT11传感器
DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度±5%RH, 温度±2℃,量程湿度5~95%RH, 温度-20~ 60℃。
3.2 红外检测传感器
红外检测传感器对环境光线适应能力强,其具有一对红外线发射与接收管,发射管发射出一定频率的红外线,当检测方向遇到障碍物(反射面)时,红外线反射回来被接收管接收,经过比较器电路处理之后,绿色指示灯会亮起,同时信号输出接口输出数字信号(一个低电平信号),可通过电位器旋钮调节检测距离,有效距离范围2~30cm,工作电压为3.3V-5V。
4、方案亮点
- 软件业务设计解耦,可拓展性强
- 支持多平台快速适配与工程迁移
- 支持腾讯连连小程序数据上下行(温湿度、纸巾状态)
- 支持腾讯云IoT Explorer平台实时查看上报数据信息(对接腾讯连连小程序数据上行)
- 支持腾讯连连微信公众号、腾讯连连小程序信息推送(没纸)
- 采用腾讯云可视化编辑器进行腾讯连连小程序界面的布局、事件、属性关联等。
5、方案实现
方案的核心主要在于TencentOS Tiny与传感器的联通和数据通MQTT传输协议上报到腾讯云IoT Explorer,并通过腾讯连连小程序进行反馈。
5.1 TencentOS Tiny与传感器的联通
与传感器进行联通首先要对传感器进行初始化,就是告诉TencentOS Tiny那些GPIO口是有数据上报的,我们这里就红外检测传感器举个例子吧。
代码语言:javascript复制#define infrared_PORT GPIOD
#define infrared_PIN GPIO_Pin_7 //设置GPIO 口
#define infrared_RCC RCC_APB2Periph_GPIOD
#define INFRARED_STATE() GPIO_ReadInputDataBit(infrared_PORT,infrared_PIN)//读红外的状态
void infrared_INIT(void)//红外测试
{
GPIO_InitTypeDef GPIO_InitStructure;//定义结构体变量
RCC_APB2PeriphClockCmd(infrared_RCC,ENABLE);
GPIO_InitStructure.GPIO_Pin=infrared_PIN; //选择你要设置的IO口
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING; //设置浮空输入
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //设置传输速率
GPIO_Init(infrared_PORT,&GPIO_InitStructure); /* 初始化GPIO */
}
PS.如果对GPIO陌生请参阅我之前的文章吧【什么是GPIO,它有什么用】
这样就初始化了GPIO的端口,那怎么获得红外检测传感器的数值呢?就通过INFRARED_STATE()可以获得了,好吧上代码。
代码语言:javascript复制if(INFRARED_STATE()==1){
LCD_ShowChinese(20,20 42 38,"当前没障碍物",BLACK,WHITE,32,0);
}else{
LCD_ShowChinese(20,20 42 38,"当前有障碍物 ",YELLOW,RED,32,0);
}
5.2 连通腾讯云物联网开发平台IoT Explorer
在获得数据后就需要上报,我们这里就直接调用mqtt_iot_explorer.c这个文件。改一下就是了,首先必须改的是wifi连接,然后就是注册腾讯云物联网开发平台IoT Explorer
代码语言:javascript复制 esp8266_tencent_firmware_join_ap("SSID", "15875012590"); //修改你的WIFI热点
注册腾讯云物联网开发平台IoT Explorer 三元素:
代码语言:javascript复制#define PRODUCT_ID "产品ID"
#define DEVICE_NAME "设备名称"
#define DEVICE_KEY "设备秘钥"
5.3数据通MQTT传输协议上报到腾讯云
数据是通过MQTT进行JSON格式的传输,所以必须将相关的JSON换为你腾讯云上物型JSON格式。
代码语言:javascript复制#define REPORT_DATA_TEMPLATE "{\"method\":\"report\"\,\"clientToken\":\"20220729\"\,\"params\":{\"motionAlarm_state\":%d\,\"temperature\":%d\,\"humidity\":%d}}"
最近后就推送到腾讯云的物联网开发平台IoT Explorer 。
代码语言:javascript复制memset(payload, 0, sizeof(payload));
snprintf(payload, sizeof(payload), REPORT_DATA_TEMPLATE,INFRARED_STATE(), temperature,humidity);
tos_tf_module_mqtt_pub(report_topic_name, QOS0, payload)
这样假设一切顺利的就可以再设备云端日志,上面看到实时发送来的数据
还是看看我的效果吧【视频播放地址】。。
6、关于屏显示汉字
由于是移值了系统自带的LCD模块驱动代码,所以如果中文显示是需要在lcdfont.h中植入相关的字模,字模可以通过字模
软件PCtoLCD2002进行生成,要注意一点的就是字体的大小16、24、32。
7、PPT介绍
8、活动收获
首先很荣幸能参与到这次比赛,让我加深了TencentOS-tiny的开发认知,也对沁恒RISC-VMCUCH32V307VCT6芯片有了深层次的了解。的确沁恒RISC-VMCUCH32V307VCT6芯片是一个不错的国产芯片再配合TencentOS Tiny 是一款不错的物联网开发入门和进阶级的方案。本次方案也只是抛砖引玉,望各位同袍功能努力研究,制作更多优势的物联应用方案。由于本人水平有限,研究动手能力不强;并不太善长表述,且文中有错漏之处望多包涵。
GitHub上不了,,传Gitee算了。。
代码语言:javascript复制代码地址:https://gitee.com/jmtgj/tencent-os-tiny-ch32-v307.git