【开发者成长激励计划-基于TencentOS Tiny 智能纸巾盒方案】

2022-08-01 11:15:10 浏览数 (2)

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 和腾讯连连小程序能高效地开发出基于物联网应用技术的智能设备。

TencentOS tiny整体架构TencentOS tiny整体架构
CH32V_EVB RISC-VCH32V_EVB RISC-V

2、方案落地

由于TencentOS Tiny CH32V_EVB RISC-V开发套件功能强大可以通过对接不同的传感器实现不同的功能组合,因此我们这次就通过DHT11传感器和红外检测传感器,实现一个简单的数据据上报系统。

方案架构方案架构

这次我们设想的应用场景是智能纸巾盒,通过DHT11传感器获取环境的温度和湿度并且进行实时上报。而红外检测传感器则负责对纸巾有没进行判断,并将结果进行上报。通过腾讯云物联网开发平台IoT Explorer进行数据交互,并以腾讯连连小程序进行实时反馈。

传统纸巾盒没纸不易发觉传统纸巾盒没纸不易发觉

3、方案组件

3.1  DHT11传感器

DHT11是一款有已校准数字信号输出的温湿度传感器。 其精度湿度±5%RH, 温度±2℃,量程湿度5~95%RH, 温度-20~ 60℃。

DHT11DHT11

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介绍

PPT介绍

8、活动收获

首先很荣幸能参与到这次比赛,让我加深了TencentOS-tiny的开发认知,也对沁恒RISC-VMCUCH32V307VCT6芯片有了深层次的了解。的确沁恒RISC-VMCUCH32V307VCT6芯片是一个不错的国产芯片再配合TencentOS Tiny 是一款不错的物联网开发入门和进阶级的方案。本次方案也只是抛砖引玉,望各位同袍功能努力研究,制作更多优势的物联应用方案。由于本人水平有限,研究动手能力不强;并不太善长表述,且文中有错漏之处望多包涵。

GitHub上不了,,传Gitee算了。。

代码语言:javascript复制
代码地址:https://gitee.com/jmtgj/tencent-os-tiny-ch32-v307.git

0 人点赞