本组设计的功能描述(含所有实现的模块的功能)

基于小熊派的智慧农业案例

  1. 实时监测环境中温湿度变化及光照变化
  2. 通过NB—IOT通信,将数据传至云端,实现云端实时检测。
  3. 通过控制电机和补光灯的启动条件,实现所需环境要求的动态调节。

本组设计的主要特色

硬件方面:小熊派开发板+NB通信模块+智慧农业拓展模块。

软件模块:华为LiteOS+STM32L431RCT6

LiteOS 面向物联网的操作系统,具有轻量级、低功耗、互联互通等特性。

开发环境为IOT Studio。

小熊派开发板,面向物联网,扩展性强。

基本实现云端互通。

本组设计的体系结构

云端系统实时检测

Web应用

STM32L431RCT6+LiteOS

NB通信扩展板NB35—A

智慧农业扩展板

E53_IA1

本组设计中的关键模块流程图及程序实现说明

实验整体流程

设备开发与应用开发分双线进行,其中,设备开发在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中进行编译,在工程根目录下的.sdkconfig文件中的末尾即可配置:

至此,编译、链接并将程序烧录至开发板,完成设备端开发。

云端开发流程:

应用开发部分:

产品创建,定义profile:

在线创建插件程序

在线调试设备:

设备运行情况检测:

设置设备运行规则,云端数据监测,自动发送消息:

串口助手实时显示数据发送

以Motor_ON为例:

手动发送指令到终端:

本组设计主要测试结果与性能分析

云端界面展示

课程设计总结(包括设计的总结和还需改进的内容)

基于小熊派的智慧农业案例总结:

实验中,主要参考小熊派的智慧农业开发案例,基本实现了智慧农业的智能感知、可靠传输、实现了云端的数据可视化、同时可以手动控制终端设备(电机和补光灯)的允许,或者通过设置相应的设备规则,从而实现环境温度、光照的自动调节。

  1. 就整体完成情况而言,以Lite OS为基础,基本实现了嵌入式系统的各个环节。
  2. 2、在LiteOS操作系统的基础上,实现了感知层的智能感知,传输层的NB通信,以华为云平台作为应用层服务,实现云端数据的实时监测,远程控制。
  3. 通过设置在应用端设置设备规则,可将设备启动控制在特定条件下温度大于一定值,则电机启动,否则电机关闭;设定补光灯在光照小于一定值时,补光灯开启,提高光照,从而实现设备的智能化控制。

实验不足与改进:

  1. 实验中数据发送与接受到云端的延时相对较大,一般无法立即观察到数据的实时显示,即便是手动和自动控制设备(电机和补光灯),仍然会有较大延时,但是通过串口发送到数据显示,数据确实是按照程序中要求的实时发送。
  2. 多次实验发现,只有在复位开发板之后,数据才能通过NB通信,发送到云端,但是最多只能持续很短时间的实时发送,可以在云端实时显示温湿度及光照的变化,之后大概就好像中断了,数据就不能传送到云端了。但是通过串口发送的数据显示,数据仍然在实时发送,这一点未能解决。
  3. 本次实验主要参考了小熊派的智慧农业案例,华为物联网系列的相关课程,在掌握嵌入式开发理论的基础上,验证实现了相关实验,这次的课设并没有实质性的扩展,这确实是不足。望老师见谅。

嵌入式开发——基于小熊派的智慧农业案例(二)相关推荐

  1. 基于小熊派的智慧农业

    前言 小熊派的智慧农业扩展板E53_IA1,包含光照传感器BH1750和温湿度传感器SHT30,关于BH1750的初始化我在上篇博客有讲到,这篇博客主要说明SHT30的配置. 自己整理的小熊派智慧烟感 ...

  2. 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++接口 一. ...

  3. OpenHarmony HDF 按键中断开发基于小熊派hm micro

    文章目录 一.驱动代码 1.1.button驱动 1.2 gpio驱动 1.2.1.gpio核心层 1.2.2.gpio驱动 二.中断处理过程 三.小结 本章使用gpio中断来实现按键驱动,重点在于理 ...

  4. OpenHarmony HDF Input框架模块 按键控制LED基于小熊派micro

    文章目录 摘要 开发环境 KEY驱动程序 KeyConfigInstance: RegisterKeyDevice 中断处理函数 KeyIrqHandle RegisterInputDevice:注册 ...

  5. 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 目录 作者介绍 目的 用到的 ...

  6. 基于小熊派的HarmonyOS鸿蒙开发教程——内核篇

    复习时间:貌似很遥远呀!(未定期) 基于小熊派的鸿蒙开发内核篇 一.CMSIS-RTOS2接口 二.HarmonyOS内核开发-任务管理 三.HarmonyOS内核开发-定时器管理 定时器基本概念 定 ...

  7. 基于RT-Thread Studio 和小熊派 实现智慧农业

    1. 硬件分析 1.1 背景平台任务介绍 基于小熊派 BearPi-IOT 硬件平台 采用 RT-Thread Studio 快速搭建软件工程 实现智慧农业:基于 E53_IA1 扩展板 输入:温度. ...

  8. 开源项目-基于小熊派STM32红外热成像仪

    点击上方"嵌入式应用研究院",选择"置顶/星标公众号" 干货福利,第一时间送达! 来源 | 嵌入式应用研究院 整理&排版 | 嵌入式应用研究院 中秋假期 ...

  9. Qt Creator开发基于小部件的应用程序

    Qt Creator开发基于小部件的应用程序 开发基于小部件的应用程序 代码编辑器集成 管理影像资源 指定Qt Designer的设置 使用设备皮肤预览表单 添加小部件 开发基于小部件的应用程序 Qt ...

最新文章

  1. 一起学微软Power BI系列-使用技巧(1)连接Oracle与Mysql数据库
  2. Android Activity 以及 Application 生命周期
  3. swift 运算符和控制流程
  4. EF映射字段类型不一致
  5. vmware14/15 安装Ubuntu12.04 图文八步法
  6. 如何打开手机端口_微信接收图纸dwg怎么打开?如何手机查看CAD图纸,三步免费教你...
  7. 单片机中断程序实例_单片机定时器中断实现长时间定时程序
  8. 程序员懂算法玩“淮安掼蛋”是否更有优势?
  9. 猫眼娱乐上市首日破发 收盘价14.64港元
  10. Exception in thread “main“ java.util.ConcurrentModificationException
  11. SpreadJS 15.1 CN 与 SpreadJS 15.1 EN
  12. 元宇宙相关的前端技术
  13. The Apostle's Creed
  14. 微博数据解析:综艺节目如何频上微博热搜?以《令人心动的offer》为例
  15. 将秒数转换为时分秒的c语言程序,秒数换算(c语言输入秒转化为时分秒)
  16. 帝都某外企裁员,补偿673252.62元 !准备回家躺平了 !
  17. 全球第一开源云ERP Odoo操作手册 模块安装和界面汉化指南
  18. linux网络协议栈(四)链路层 vlan处理
  19. OB2263MP小知识
  20. 钉钉企业内部机器人python开发(公网部署版本)

热门文章

  1. 2021计算机没有PS吗,ps2021报错无法在老电脑上运行的解决方法
  2. 车牌识别数据集(蓝牌、黄牌、绿牌)及相关转换代码
  3. 解决“远程桌面连接:出现身份验证错误,要求的函数不受支持。。。 ”
  4. 万众达机械携手中企动力制霸高空作业平台市场
  5. www.cndigg.com中国掘客 又完成了几个新功能
  6. 3月28日,www.cndigg.com(中国掘客)第一期上线
  7. 来自二维世界的忧愁:如何避免康康的悲剧再次重演?
  8. 点餐系统 软件界面设计
  9. SAP ABAP 初学者编程 – 在线培训
  10. [ip核][vivado]串并转换器OSERDES学习