嵌入式开发——基于小熊派的智慧农业案例(二)
本组设计的功能描述(含所有实现的模块的功能) |
基于小熊派的智慧农业案例
|
本组设计的主要特色 |
硬件方面:小熊派开发板+NB通信模块+智慧农业拓展模块。 软件模块:华为LiteOS+STM32L431RCT6 LiteOS 面向物联网的操作系统,具有轻量级、低功耗、互联互通等特性。 开发环境为IOT Studio。 小熊派开发板,面向物联网,扩展性强。 基本实现云端互通。 |
本组设计的体系结构 |
||||
|
本组设计中的关键模块流程图及程序实现说明 |
实验整体流程 设备开发与应用开发分双线进行,其中,设备开发在IOT studio上进行,以LiteOS为基础,将智慧农业扩展模块和LPWN的NB通信模块分别进行程序移植,并复制裸机驱动到LiteOS工程并将驱动文件的路径添加到makefile文件,初始化E53_IA1扩展板进行数据采集任务。 应用开发部分,先创建项目、在其中创建产品,定义profile,并在线开发编解码插件,等待设备端开发完毕,进行web端应用开发,将设备入云并进行调试,完善,至此完毕。 |
本组设计的软件程序模块说明与使用手册 |
设备开发部分: 智慧农业E53_IA1扩展板程序: E53_IA1扩展板中使用BH1750 光照强度传感器,SHT30温湿度传感器。 // 说 明:初始化BH1750函数Init_BH1750 void Init_BH1750(void) { uint8_t t_Data = 0x01; HAL_I2C_Master_Transmit(&hi2c1,BH1750_Addr,&t_Data,1,0xff); } // 说 明:启动BH1750函数Start_BH1750 void Start_BH1750(void) { uint8_t t_Data = 0x10; HAL_I2C_Master_Transmit(&hi2c1,BH1750_Addr,&t_Data,1,0xff); } // 说 明: 数值转换函数 float Convert_BH1750(void) { float result_lx; uint8_t BUF[2]; int result; Start_BH1750(); HAL_Delay(180); HAL_I2C_Master_Receive(&hi2c1, BH1750_Addr+1,BUF,2,0xff); result=BUF[0]; result=(result<<8)+BUF[1]; //Synthetic Digital Illumination Intensity Data result_lx=(float)(result/1.2); return result_lx; } // 说 明: SHT30复位函数 void SHT30_reset(void) { uint8_t SHT3X_Resetcommand_Buffer[2]={0x30,0xA2}; //soft reset HAL_I2C_Master_Transmit(&hi2c1,SHT30_Addr<<1,SHT3X_Resetcommand_Buffer,2,0x10); HAL_Delay(15); } // 说 明: 初始化SHT30函数Init_SHT30 void Init_SHT30(void) { uint8_t SHT3X_Modecommand_Buffer[2]={0x22,0x36}; //periodic mode commands HAL_I2C_Master_Transmit(&hi2c1,SHT30_Addr<<1,SHT3X_Modecommand_Buffer,2,0x10); //send periodic mode commands } //检查数据正确性 uint8_t SHT3x_CheckCrc(char data[], char nbrOfBytes, char checksum) { char crc = 0xFF; char bit = 0; char byteCtr ; //calculates 8-Bit checksum with given polynomial for(byteCtr = 0; byteCtr < nbrOfBytes; ++byteCtr) { crc ^= (data[byteCtr]); for ( bit = 8; bit > 0; --bit) { if (crc & 0x80) crc = (crc << 1) ^ POLYNOMIAL; else crc = (crc << 1); } } if(crc != checksum) return 1; else return 0; } //温度计算函数名称: SHT3x_CalcTemperatureC //参数: u16sT:读取到的温度原始数据 float SHT3x_CalcTemperatureC(unsigned short u16sT) { float temperatureC = 0; // variable for result u16sT &= ~0x0003; // clear bits [1..0] (status bits) //-- calculate temperature [℃] -- temperatureC = (175 * (float)u16sT / 65535 - 45); //T = -45 + 175 * rawValue / (2^16-1) return temperatureC; } //湿度计算函数: SHT3x_CalcRH //参 数: u16sRH:读取到的湿度原始数据 // 返 回 值: 计算后的湿度数据 float SHT3x_CalcRH(unsigned short u16sRH) { float humidityRH = 0; // variable for result u16sRH &= ~0x0003; // clear bits [1..0] (status bits) //-- calculate relative humidity [%RH] -- humidityRH = (100 * (float)u16sRH / 65535); // RH = rawValue / (2^16-1) * 10 return humidityRH; } // 初始化Init_E53_IA1的马达 void Init_Motor(void) { GPIO_InitTypeDef GPIO_InitStruct; /* GPIO Ports Clock Enable */ IA1_Motor_GPIO_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(IA1_Motor_GPIO_Port, IA1_Motor_Pin, GPIO_PIN_RESET); /*Configure GPIO pin : PtPin */ GPIO_InitStruct.Pin = IA1_Motor_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(IA1_Motor_GPIO_Port, &GPIO_InitStruct); } //初始化Init_E53_IA1的补光灯 void Init_Light(void) { GPIO_InitTypeDef GPIO_InitStruct; /* GPIO Ports Clock Enable */ IA1_Light_GPIO_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(IA1_Light_GPIO_Port, IA1_Light_Pin, GPIO_PIN_RESET); /*Configure GPIO pin : PtPin */ GPIO_InitStruct.Pin = IA1_Light_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(IA1_Light_GPIO_Port, &GPIO_InitStruct); } //扩展板初始化Init_E53_IA1 void Init_E53_IA1(void) { MX_I2C1_Init(); Init_BH1750(); Init_SHT30(); Init_Motor(); Init_Light(); } 扩展板驱动程序: static void timer1_callback(void *arg)//LCD显示器模块 { qr_code = !qr_code; LCD_Clear(WHITE); if (qr_code == 1) LCD_Show_Image(0,0,240,239,gImage_Huawei_IoT_QR_Code); else { POINT_COLOR = RED; LCD_ShowString(40, 10, 200, 16, 24, "IoTCluB BearPi"); LCD_ShowString(15, 50, 210, 16, 24, "LiteOS NB-IoT Test"); LCD_ShowString(10, 100, 200, 16, 16, "NCDP_IP:"); LCD_ShowString(80, 100, 200, 16, 16, cn_app_server); LCD_ShowString(10, 150, 200, 16, 16, "NCDP_PORT:"); LCD_ShowString(100, 150, 200, 16, 16, cn_app_port); } } //消息处理函数 static int app_msg_deal(void *usr_data, en_oc_lwm2m_msg_t type, void *data, int len) { unsigned char *msg; msg = data; int ret = -1; if(len <= cn_app_rcv_buf_len) { if (msg[0] == 0xaa && msg[1] == 0xaa) { printf("OC respond message received! \n\r"); return ret; } memcpy(s_rcv_buffer,msg,len); s_rcv_datalen = len; osal_semp_post(s_rcv_sync); ret = 0; } return ret; } 驱动程序主函数 //任务管理与创建 int standard_app_demo_main() { osal_semp_create(&s_rcv_sync,1,0); osal_task_create("app_collect",app_collect_task_entry,NULL,0x400,NULL,3); osal_task_create("app_report",app_report_task_entry,NULL,0x1000,NULL,2); osal_task_create("app_command",app_cmd_task_entry,NULL,0x1000,NULL,3); stimer_create("lcdtimer",timer1_callback,NULL,8*1000,cn_stimer_flag_start); return 0; } 添加驱动程序到路径,LiteOS 的整个项目工程使用 make 构建,完成驱动程序后,需要添加驱动文件的路径到 makefile 中,加入工程编译,就完成了驱动的移植。 配置 CONFIG_USER_DEMO 宏定义,将扩展板程序添加到makefile中进行编译,在工程根目录下的 至此,编译、链接并将程序烧录至开发板,完成设备端开发。 云端开发流程: 应用开发部分: 产品创建,定义profile: 在线创建插件程序 在线调试设备: 设备运行情况检测: 设置设备运行规则,云端数据监测,自动发送消息: 串口助手实时显示数据发送 以Motor_ON为例: 手动发送指令到终端: |
本组设计主要测试结果与性能分析 |
云端界面展示 |
课程设计总结(包括设计的总结和还需改进的内容) |
基于小熊派的智慧农业案例总结: 实验中,主要参考小熊派的智慧农业开发案例,基本实现了智慧农业的智能感知、可靠传输、实现了云端的数据可视化、同时可以手动控制终端设备(电机和补光灯)的允许,或者通过设置相应的设备规则,从而实现环境温度、光照的自动调节。
实验不足与改进:
|
嵌入式开发——基于小熊派的智慧农业案例(二)相关推荐
- 基于小熊派的智慧农业
前言 小熊派的智慧农业扩展板E53_IA1,包含光照传感器BH1750和温湿度传感器SHT30,关于BH1750的初始化我在上篇博客有讲到,这篇博客主要说明SHT30的配置. 自己整理的小熊派智慧烟感 ...
- OpenHarmony HDF LED驱动开发 基于小熊派Micro
文章目录 一.效果展示 二.led控制程序 2.1.led驱动程序 2.1.1.驱动程序 2.1.2.驱动配置 2.2.C应用程序 2.3.JS应用 2.3.1.JS代码 2.3.2.C++接口 一. ...
- OpenHarmony HDF 按键中断开发基于小熊派hm micro
文章目录 一.驱动代码 1.1.button驱动 1.2 gpio驱动 1.2.1.gpio核心层 1.2.2.gpio驱动 二.中断处理过程 三.小结 本章使用gpio中断来实现按键驱动,重点在于理 ...
- OpenHarmony HDF Input框架模块 按键控制LED基于小熊派micro
文章目录 摘要 开发环境 KEY驱动程序 KeyConfigInstance: RegisterKeyDevice 中断处理函数 KeyIrqHandle RegisterInputDevice:注册 ...
- 2021物联网开发学习——基于小熊派IoT开发板Bear-Pi-IOT、E53_IA1_智慧农业拓展板与小熊派-鸿蒙·季Bear-Pi-HM Nano并接入Hi-Link
2021物联网开发学习--基于小熊派IoT开发板Bear-Pi-IOT.E53_IA1_智慧农业拓展板与小熊派-鸿蒙·季Bear-Pi-HM Nano并接入Hi-Link 目录 作者介绍 目的 用到的 ...
- 基于小熊派的HarmonyOS鸿蒙开发教程——内核篇
复习时间:貌似很遥远呀!(未定期) 基于小熊派的鸿蒙开发内核篇 一.CMSIS-RTOS2接口 二.HarmonyOS内核开发-任务管理 三.HarmonyOS内核开发-定时器管理 定时器基本概念 定 ...
- 基于RT-Thread Studio 和小熊派 实现智慧农业
1. 硬件分析 1.1 背景平台任务介绍 基于小熊派 BearPi-IOT 硬件平台 采用 RT-Thread Studio 快速搭建软件工程 实现智慧农业:基于 E53_IA1 扩展板 输入:温度. ...
- 开源项目-基于小熊派STM32红外热成像仪
点击上方"嵌入式应用研究院",选择"置顶/星标公众号" 干货福利,第一时间送达! 来源 | 嵌入式应用研究院 整理&排版 | 嵌入式应用研究院 中秋假期 ...
- Qt Creator开发基于小部件的应用程序
Qt Creator开发基于小部件的应用程序 开发基于小部件的应用程序 代码编辑器集成 管理影像资源 指定Qt Designer的设置 使用设备皮肤预览表单 添加小部件 开发基于小部件的应用程序 Qt ...
最新文章
- 一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库
- Android Activity 以及 Application 生命周期
- swift 运算符和控制流程
- EF映射字段类型不一致
- vmware14/15 安装Ubuntu12.04 图文八步法
- 如何打开手机端口_微信接收图纸dwg怎么打开?如何手机查看CAD图纸,三步免费教你...
- 单片机中断程序实例_单片机定时器中断实现长时间定时程序
- 程序员懂算法玩“淮安掼蛋”是否更有优势?
- 猫眼娱乐上市首日破发 收盘价14.64港元
- Exception in thread “main“ java.util.ConcurrentModificationException
- SpreadJS 15.1 CN 与 SpreadJS 15.1 EN
- 元宇宙相关的前端技术
- The Apostle's Creed
- 微博数据解析:综艺节目如何频上微博热搜?以《令人心动的offer》为例
- 将秒数转换为时分秒的c语言程序,秒数换算(c语言输入秒转化为时分秒)
- 帝都某外企裁员,补偿673252.62元 !准备回家躺平了 !
- 全球第一开源云ERP Odoo操作手册 模块安装和界面汉化指南
- linux网络协议栈(四)链路层 vlan处理
- OB2263MP小知识
- 钉钉企业内部机器人python开发(公网部署版本)
热门文章
- 2021计算机没有PS吗,ps2021报错无法在老电脑上运行的解决方法
- 车牌识别数据集(蓝牌、黄牌、绿牌)及相关转换代码
- 解决“远程桌面连接:出现身份验证错误,要求的函数不受支持。。。 ”
- 万众达机械携手中企动力制霸高空作业平台市场
- www.cndigg.com中国掘客 又完成了几个新功能
- 3月28日,www.cndigg.com(中国掘客)第一期上线
- 来自二维世界的忧愁:如何避免康康的悲剧再次重演?
- 点餐系统 软件界面设计
- SAP ABAP 初学者编程 – 在线培训
- [ip核][vivado]串并转换器OSERDES学习