1.E53_IA1扩展板及其驱动
关于E53标准接口
E53_IA1智慧农业扩展板
2. 移植E53_IA1驱动到LiteOS
复制裸机驱动文件到LiteOS工程
添加驱动文件路径
因为SC1和IA1的驱动中都包含BH1750的驱动,所以添加的时候需要注意去掉E53_SC1 的驱动文件E53_SC1.c和E53_SC1.h,否则会引起冲突。
3. E53_IA1裸机驱动的使用
初始化E53_IA1扩展板
操作E53_IA1扩展板
#include <osal.h>
#include "lcd.h"
#include "E53_IA1.h"
/* 存放E53_IA1扩展板传感器数据,可在E53_IA1.h中查看定义 */
E53_IA1_Data_TypeDef E53_IA1_Data;
/* 用于数据采集和数据处理任务间同步的信号量 */
osal_semp_t sync_semp;
/* 数据采集任务-低优先级 */
static int data_collect_task_entry()
{
/* 初始化扩展板 */
Init_E53_IA1();
while (1)
{
/* 读取扩展板板载数据,存到数据结构体E53_IA1_Data中 */
E53_IA1_Read_Data();
/* 数据读取完毕,释放信号量,唤醒数据处理任务 */
osal_semp_post(sync_semp);
/* 任务睡眠2s */
osal_task_sleep(2*1000);
}
}
/* 数据处理任务-高优先级 */
static int data_deal_task_entry()
{
/* lux- 当次数据,old-lux-上次数据 */
int lux = 0, old_lux = 0;
int temperature = 0, old_temperature = 0;;
int humidity;
/* LCD清屏,防止干扰显示 */
LCD_Clear(WHITE);
while (1)
{
/* 等待信号量,未等到说明数据还未采集,阻塞等待 */
osal_semp_pend(sync_semp, cn_osal_timeout_forever);
/* 信号量等待,被唤醒,开始处理数据 */
//处理光照强度
old_lux = lux;
lux = (int)E53_IA1_Data.Lux;
printf("BH1750 Value is %d\r\n", lux);
LCD_ShowString(10, 100, 200, 16, 16, "BH1750 Value is:");
LCD_ShowNum(140, 100, lux, 5, 16);
/* 光照阈值为1000,自动点亮或者熄灭路灯 */
if(old_lux < 1000 && lux > 1000)
{
HAL_GPIO_WritePin(IA1_Light_GPIO_Port, IA1_Light_Pin, GPIO_PIN_RESET);
printf("Light OFF!\r\n");
}
else if(old_lux > 1000 && lux < 1000)
{
HAL_GPIO_WritePin(IA1_Light_GPIO_Port, IA1_Light_Pin, GPIO_PIN_SET);
printf("Light ON!\r\n");
}
//处理湿度数据
humidity = E53_IA1_Data.Humidity;
printf("Humidity is %d\r\n", humidity);
LCD_ShowString(10, 120, 200, 16, 16, "Humidity: ");
LCD_ShowNum(140, 120, humidity, 5, 16);
//处理温度数据
old_temperature = temperature;
temperature = E53_IA1_Data.Temperature;
printf("Temperature is %d\r\n", temperature);
LCD_ShowString(10, 140, 200, 16, 16, "Temperature: ");
LCD_ShowNum(140, 140, temperature, 5, 16);
/* 温度阈值为30,自动开启或者关闭电机 */
if(old_temperature < 30 && temperature >= 30)
{
HAL_GPIO_WritePin(IA1_Motor_GPIO_Port, IA1_Motor_Pin, GPIO_PIN_SET);
printf("Motor ON!\r\n");
}
else if(old_temperature >= 30 && temperature < 30)
{
HAL_GPIO_WritePin(IA1_Motor_GPIO_Port, IA1_Motor_Pin, GPIO_PIN_RESET);
printf("Motor OFF!\r\n");
}
}
}
/* 标准demo启动函数,函数名不要修改,否则会影响下一步实验 */
int standard_app_demo_main()
{
/* 创建信号量 */
osal_semp_create(&sync_semp, 1, 0);
/* 数据处理任务的优先级应高于数据采集任务 */
osal_task_create("data_collect",data_collect_task_entry,NULL,0x400,NULL,3);
osal_task_create("data_deal",data_deal_task_entry,NULL,0x400,NULL,2);
return 0;
}
在调节温度的时候,可以用手按着SHT30温湿度传感器,天干物燥,务必提前触摸一下金属物体,释放静电,防止静电破坏传感器!
linkmain:V1.2.1 AT 10:40:09 ON Dec 5 2019
BH1750 Value is 237
Humidity is 19
Temperature is 28
WELCOME TO IOT_LINK SHELL
LiteOS:/>BH1750 Value is 1074
Light OFF!
Humidity is 19
Temperature is 29
BH1750 Value is 14086
Humidity is 20
Temperature is 30
Motor ON!
BH1750 Value is 284
Light ON!
Humidity is 21
Temperature is 30
BH1750 Value is 303
Humidity is 21
Temperature is 29
Motor OFF!
……
关注“小熊派开源社区”微信公众号,回复“LiteOS内核实战”获取实战源代码。
-------------------------------------END--------------------------------------