
基于梁山派(GD32F470)的无线手持环境检测仪
简介
基于梁山派微控制器的无线手持环境检测仪,复刻官方项目
简介:基于梁山派微控制器的无线手持环境检测仪,复刻官方项目开源协议
:GPL 3.0
描述
2023.10.8日更新内容(按键+功耗测试)
按键
在之前的程序中,按键按动是支持连按的,所以按一下按键可能会多次触发,尤其是在使用开关按键的时候,按下按键大概率会连续触发两次,导致无法实现开关功能,体验非常不好
所以我修改了一下程序的按键判断程序,将按键按动设置为不支持连按
具体实现是参考正点原子按键设计,参考链接如下:正点原子-按键输入实验
具体程序请参考附件“软件程序_主机_按键.7z”文件中的bsp_key.c文件中的all_key_scan函数
功耗测试
在本项目中使用的电池的容量为250mAh
在亮度开到最大且同时开启云端上传功能和从机显示功能时的平均功率约为535mW,即最大功率
在亮度开到最小且同时关闭云端上传功能和从机显示功能时的平均功率约为417mW,即最小功率
电池续航时间计算公式:续航时间=电池容量/设备功率
由该公式可得:
本项目手持环境检测仪的理论最长续航时间=250/417 = 0.59h
实际时间如下图所示,约为36m=0.6h
本项目手持环境检测仪的理论最短续航时间=250/535 = 0.46h
实际时间如下图所示,约为28m=0.46h
所以在满电状态下,本环境监测仪预计可工作时间在28-36分钟
测试设备为合宙CC表
-------2023年10月8日手动分割线-------
1、项目分析
本项目是基于梁山派微控制器制作的无线手持环境检测仪,参加立创开发板电子设计训练营-基础营,复刻官方项目
官方项目链接:
1、环境检测扩展板
实现功能:
1、采集温湿度、大气压以及有害气体等参数
2、通过LVGL显示以上信息
3、通过NB模块将采集的信息上传到阿里云平台,并能通过手机APP实时查看
4、通过NF-03无线模块将采集的信息发送到从机上并显示
5、通过LVGL实现人机交互界面
本项目基于官方案例设计,本人所作的工作如下:
1、基于手头的NB模块-BC260Y绘制对应原理图
2、根据原理图绘制PCB,并根据PCB布局相应修改原理图连线
3、打板焊接调试三件套
4、移植BC260Y驱动(基于原本EC-01F的驱动)
5、根据教程配置生活物联网平台
6、完成BC260Y与云平台的连接
7、适配本项目与官方例程函数
2、原理图设计说明
2.1 BC260Y原理图
通过串口与BC260Y建立连接,由于使用的是现成的模块,所以无需搭建其他外围电路
注意电源输入使用3.3V或者5V都可以,内部有电源电路,无需担心
2.2 各部分与梁山派建立的连接
这部分主要是因为在绘制PCB时方便连接,对官方案例的连接进行了一些修改
其他部分基本与官方案例一致,在此不做赘述【环境仪扩展板】资料
3、PCB设计说明
3.1 电池接口
电池接口这里需要注意的是留空,因为电池接线向内,需要注意不要在这个区域放置器件,以影响电池连接
3.2 BC260Y封装
BC260Y的封装接口并不是居中的,而是有一些偏右,放置时不能居中放置
3.3 BC260Y模块
BC260Y模块买来是直插排针,而在本项目中为了将该模块放进梁山派与扩展版之间,所以将直插排针更换为弯插排针
4、软件说明
BC260Y连接阿里云平台代码
void bc260Y_connect_aliyun(void)
{
char at_cmd[500]={0};
//初始化BC260Y
//RST:
//测试指令AT
bc260Y_send_cmd("AT\r\n","OK",100,5);
//断开MQTT服务器
if( bc260Y_send_cmd("AT+QMTDISC=0\r\n","",100,5) == 0 )
printf("AT+QMTDISC=0 fail\r\n");
//关闭飞行模式
if( bc260Y_send_cmd("AT+CFUN=1\r\n","OK",100,5) == 0 )
printf("AT+CFUN=1 fail\r\n");
//获取卡号,类似是否存在卡的意思,比较重要,返460,表明识别到卡了
if( bc260Y_send_cmd("AT+CIMI\r\n","460",100,5) == 0 )
printf("AT+CIMI fail\r\n");
//查询激活状态 如果注册成功,会返回 1,如果失败,返回 0
if( bc260Y_send_cmd("AT+CGATT=1\r\n","OK",100,5) == 0 )
printf("AT+CGATT=1 fail\r\n");
//查询激活状态
if( bc260Y_send_cmd("AT+CGATT?\r\n","+CGATT: 1",100,5) == 0 )
printf("AT+CGATT? fail\r\n");
//查看获取CSQ值 是查询信号的,如果注册网络成功,会有信号产生,最大 31,如果信号小于 10
if( bc260Y_send_cmd("AT+CSQ\r\n","+CSQ:",100,5) == 0 )
printf("AT+CSQ fail\r\n");
//MQTT初始化
//连接设备证书
sprintf(at_cmd, "AT+QMTCFG=\"aliauth\",0,\"%s\",\"%s\",\"%s\"\r\n",ProductKey,DeviceName,DeviceSecret);
if( bc260Y_send_cmd(at_cmd,"OK",100,5) == 0 )
printf("%s fail\r\n",at_cmd);
//打开客户端连接
sprintf(at_cmd, "AT+QMTOPEN=0, \"%s.iot-as-mqtt.cn-shanghai.aliyuncs.com\",1883\r\n", ProductKey);
if( bc260Y_send_cmd(at_cmd,"+QMTOPEN: 0,0",100,20) == 0 )
printf("Unable to connect to Aliyun\r\n");
//连接客户端到 MQTT 服务器
if( bc260Y_send_cmd("AT+QMTCONN=0, \"460083501703296\"\r\n","OK",100,100) == 0 )
printf("Unable to log in to MQTT server\r\n");
// //订阅一次即可
// sprintf(at_cmd, "AT+QMTSUB=0,1,\"/sys/%s/%s/thing/service/property/set\",2\r\n", ProductKey, DeviceName);
// ec01f_send_cmd(at_cmd,"+QMTSUB: 0,1,0",100,10);
printf("连接aliyu成功\r\n");
bc260Y_rx_buff_clear();//清除串口接收缓存
//while(1);
}
在连接客户端到MQTT服务器时,可以将用户名更换为物联网卡号,以防止用户名重复导致的连接失败
在订阅时注意订阅成功一次即可,之后将订阅代码注释掉即可,第一次使用时记得将订阅代码解开注释(这里我已经订阅成功,所以将订阅代码注释掉了)
注意将设备证书更换为自己的
实物展示说明
正面
反面
注意事项
1、本项目中的TYPE-C接口仅有VCC和GND两个接口,不支持快充协议充电器,建议使用普通充电器,不然可能无法为电池充电
2、与梁山派连接的排母和2.4G无线通信模块的焊接顺序,建议先焊接排母后再焊接2.4G模块,不然可能会影响排母的焊接
制作从机只需要焊接屏幕部分和2.4G模块部分即可,如图所示
项目总结
我通过本项目学习到了很多知识,总结如下:
梁山派硬件电路知识
3.3V电池充放一体电路设计
1.69寸IPS屏幕的使用
PCB设计
GD32F450/470使用
多种传感器学习
NB模块使用
生活物联网平台学习使用
LVGL移植使用
无线2.4G通信模块使用
C语言开发知识
系统程序开发
非常感谢嘉立创提供的学习平台,还要感谢为梁山派移植各种模块并开源的大佬
参考链接
1、环境检测扩展板
设计图

BOM


评论