【IoT最佳实践】基于小熊派开发板的物联网实战开发(六)-智慧烟感传感器开发
上一期:基于小熊派开发板的物联网实战开发(五)-开发数据上报与命令下发功能
请先完成前几期的实验再来操作本期实验。
将烟雾扩展板用杜邦线接到小熊派开发板上,如图所示:
备注:1号线连接13号口,2号线连接12号口,3号线连接11号口,4号线连接20号口,5号线连接5号口;
打开“config.mk”文件,修改通信方式“NETWORK_TYPE”为NB-IoT通信方式“NB_NEUL95_NO_ATINY”,点击“保存”;
打开“stm32l4xx_hal_conf.h”文件,打开“HAL_ADC_MODULE_ENABLED”和“HAL_TIM_MODULE_ENABLED”的宏定义的注释;
在“Makefile”文件中,添加移植智慧烟感传感器E53_SF1的代码;
$(TOP_DIR)/targets/STM32L431_BearPi/Hardware/E53_SF1/E53_SF1.c \ |
在“Makefile”文件中,添加移植智慧烟感传感器头文件的代码,点击“保存”;
-I $(TOP_DIR)/targets/STM32L431_BearPi/Hardware/E53_SF1 \ |
打开“sys_init.h”,在“sys_init.h”文件中,添加引用智慧烟感驱动的头文件,点击“保存”;
#include "E53_SF1.h" |
在“main.c”文件中,添加烟感传感器读取数据的变量定义,点击“保存”;
E53_SF1_Data_TypeDef E53_SF1_Data; |
在“nb_demo.c”文件中,添加智慧烟感驱动的头文件;
#include "E53_SF1.h" |
在“nb_demo.c”文件中,添加烟感数据发送数组定义;
char E53_SF1_send[4]={0}; |
在“nb_demo.c”的数据收集任务中,添加初始化烟感传感器的代码;
Init_E53_SF1(); |
在“nb_demo.c”的数据收集任务中,添加读取烟感传感器数据的代码;
E53_SF1_Read_Data(); |
在“nb_demo.c”的数据收集任务中,添加打印烟感传感器数据的代码,并将读取到的数据复制到发送数据变量中;
printf("\r\n******************************Smoke Value is %d\r\n", E53_SF1_Data.Smoke_Value); sprintf(E53_SF1_send,"%04X",E53_SF1_Data.Smoke_Value); |
在“nb_demo.c”的数据上报任务中, 添加发送烟感数据上报的代码,点击“保存”;
msgid =8; sprintf(s_report_buf,"%02d", msgid); memcpy(s_report_buf + 2, &E53_SF1_send, sizeof(E53_SF1_send)); msglen = sizeof(E53_SF1_send); los_nb_report((const char*)(&s_report_buf), (msglen+2) / 2);//发送数据到平台 memset(s_report_buf, 0, sizeof(s_report_buf)); uwRet=LOS_TaskDelay(5000); |
打开“nb_cmd_ioctl.c”文件,在“nb_cmd_ioctl.c”中添加智慧烟感传感器驱动头文件;
#include "E53_SF1.h" |
在“nb_cmd_data_ioctl”函数中,添加处理蜂鸣报警器命令的代码;
if(tmpbuf[1] == '9') //messageid for Smoke_Control_Beep { memcpy(recvmid,tmpbuf + 2, 4); memset(recvbuf, 0, 30); if (readlen > 0) { HexStrToStr((const unsigned char *)tmpbuf + 6, (unsigned char *)recvbuf, (readlen - 3) * 2); } AT_LOG("cmd is:%s\n", recvbuf); if(strcmp(recvbuf, "ON") == 0) { E53SF1_Beep(ON); char* respmsgid = "0a"; //messageid for Smoke_Control_Beep reply memcpy(s_resp_buf, respmsgid, 2); memcpy(s_resp_buf + 2, recvmid, 4); char* reply = "0001"; memcpy(s_resp_buf + 6, reply, 4); LOS_SemPost(reply_sem); } if (strcmp(recvbuf, "OFF") == 0) { E53SF1_Beep(OFF); char* respmsgid = "0a";//messageid for Smoke_Control_Beep reply memcpy(s_resp_buf, respmsgid, 2); memcpy(s_resp_buf + 2, recvmid, 4); char* reply = "0000"; memcpy(s_resp_buf + 6, reply, 4); LOS_SemPost(reply_sem); } } |
点击“保存”,点击“编译”,等待提示“编译成功”;
点击“烧录”,等待提示“烧录成功”;
在IoT平台上,设备的“历史数据”中,可以看到实时上报的数据;
打开IoT平台,下发“Smoke”服务的两个命令“Smoke_Control_Beep”,执行成功。
打开设备的“历史命令”,可以看到命令“执行成功”;
下发“Smoke_Control_Beep”命令为“ON”时,可以看到智慧烟感扩展板的蜂鸣器响。
最后,让我们宣传一下:
3月27-28日,华为物联网平台在华为开发者大会静候您的光临。
华为开发者大会2020(Cloud)是华为面向ICT(信息与通信)领域全球开发者的年度顶级旗舰活动。大会旨在搭建一个全球性的交流和实践平台,开放华为30年积累的ICT技术和能力,以“鲲鹏+昇腾”硬核双引擎,为开发者提供澎湃动力,改变世界,变不可能为可能。
我们期待与你共创计算新时代
在一起,梦飞扬!
- 点赞
- 收藏
- 关注作者
评论(0)