17 Star 59 Fork 24

Talkweb_OpenHarmony / Niobe

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 4.25 KB
一键复制 编辑 原始数据 按行查看 历史

Niobe开发板关照强度-温湿度-马达演示

本案例程序将演示怎么在拓维Niobe WiFi IoT Motor开发板上,演示通过温湿度驱动马达,通过光照强度驱动LED灯。

Motor API分析

本案例主要使用了I2C和GPIO进行通信,功能简单。在基础通信接口之上,封装了以下几个API完成马达板的驱动。

MotorInit()

void MotorInit(void);

描述:

初始化马达开发板的硬件状态。

MotorReadData()

typedef struct
{
    float    Lux;             //光照强度
    float    Humidity;        //湿度
    float    Temperature;     //温度
} Motor_Data_TypeDef;

void MotorReadData(Motor_Data_TypeDef *data);

描述:

读取马达板上的光照强度传感器和温湿度传感器的数据,输出存储在Motor_Data_TypeDef结构体中。

参数:

名字 描述
data 表示马达板上传感器数据,包括温度、湿度和光照强度。

LightStatusSet()

typedef enum
{
    OFF = 0,        //关
    ON              //开
} Motor_Status_ENUM;

void LightStatusSet(Motor_Status_ENUM status);

描述:

设置马达板上LED灯的开关状态。

参数:

名字 描述
status 表示LED的开关状态。

MotorStatusSet()

typedef enum
{
    OFF = 0,        //关
    ON              //开
} Motor_Status_ENUM;

void MotorStatusSet(Motor_Status_ENUM status);

描述:

设置马达板上马达的开关状态。

参数:

名字 描述
status 表示马达的开关状态。

软件设计

主要代码分析

本次程序主要模拟如下场景,当天黑或者下雨天光线暗淡时,自动亮灯;天亮或者天晴光线强时,自动关灯。当天气温度较高时,自动启动风扇(电机),天气温度较低时,自动关闭风扇(电机)。

  1. 调用MotorInit函数初始化马达板硬件状态。
  2. 进入while循环,调用MotorReadData函数获取传感器数据。
  3. 如果关照强度小于20,或者湿度大于70,调用LightStatusSet函数开灯,否则关灯。
  4. 如果温度大于31℃,调用MotorStatusSet函数开启马达,否则关闭马达。
  5. 休眠一秒钟,再进入下一次循环。
static Motor_Data_TypeDef Motor_Data;

static void MotorExampleTask(void)
{
    MotorInit();

    while (1)
    {
        printf("\n=============================================\n");
        printf("\n*************Motor_Example_Task**************\n");
        printf("\n=============================================\n");

        MotorReadData(&Motor_Data);
        printf("\n******************************Lux Value is  %.2f\n", Motor_Data.Lux);
        printf("\n******************************Humidity is  %.2f\n", Motor_Data.Humidity);
        printf("\n******************************Temperature is  %.2f\n", Motor_Data.Temperature);

        if (Motor_Data.Lux < 20 || Motor_Data.Humidity > 70)
        {
            LightStatusSet(ON);
        }
        else
        {
            LightStatusSet(OFF);
        }

        if (Motor_Data.Temperature > 31)
        {
            MotorStatusSet(ON);
        }
        else
        {
            MotorStatusSet(OFF);
        }

        usleep(1000 * 1000);
    }
}

编译调试

修改 BUILD.gn 文件

修改 applications/app/BUILD.gn 路径中的 BUILD.gn 文件,指定 module_motor_example 参与编译。

# "TW201_Module_oled:module_oled_example",
# "TW202_Module_traffic_light:module_traffic_light_example",
# "TW203_Module_tricolor_light:module_tricolor_light_example",
# "TW204_Module_enviroment:module_enviroment_example",
"TW205_Module_motor:module_motor_example",

运行结果

示例代码编译烧录代码后,按下开发板的RESET按键,启动系统。

  • 用手指遮挡马达开发板上的U13光照强度传感器,可以看到LED等开启或者关闭。
  • 用口向马达开发板上的U11温湿度传感器哈气,可以看到LED开启和马达转动。
  • 用干燥手指覆盖在马达开发板上的U11温湿度传感器上,可以看到马达转动。
1
https://gitee.com/talkweb_oh/niobe.git
git@gitee.com:talkweb_oh/niobe.git
talkweb_oh
niobe
Niobe
master

搜索帮助