只会抄代码的菜鸟-CBU二次开发感应灯开发简记

更新时间Invalid date520world

概况

功能设定

1.普通智能灯功能:APP开关灯及按键开关灯

2.人体感应功能;

3.根据人体感应自动开关灯;

模组IO设定

P16 ----灯控制(高电平点亮)

P28----按键功能(低电平触发)

P14----PIR人体模块接口(自动模式下:高电平亮灯,低电平熄灯)

DP点设定

DPID:20----灯控制 BOOL型

DPID:101----人体感应状态上报 BOOL型

DPID:102----自动模式 BOOL型

作品视频展示: https://www.bilibili.com/video/BV1QL4y1z7QF/

物料清单

硬件 (2)软件 (3)
  • CBU SOC 三明治板

    数量:1

    CBU SOC 三明治板

  • PIR人体感应模块

    数量:1

    PIR人体感应模块

步骤

bk7231n SDK下载https://github.com/tuya/tuya-iotos-embeded-sdk-wifi-ble-bk7231n.git

bk7231n_light1_io_xx一路灯Demo下载 https://github.com/Tuya-Community/bk7231n_light1_io_xx

准备工作:

编译环境搭建,烧录授权等步骤大家参考三明治开发社区的教程,这里就不再赘述!

light_xx代码分析:

  • 头文件
    • tuya_device.h:产品pid、软件版本号信息和设备初始化API的接口;
    • dp_process.h:DP点上报和下发的API接口;
    • light_system.h:灯的IO口定义,灯的初始化和操作IO相关的API接口;
  • 源文件
    • tuya_device.c:soc的应用整体框架,按键IO定义、初始化,包括正常工作状态、产测模式和app下发控制数据上报等功能;
    • dp_process.c:DP点上报的函数update_all_dp,下发的函数deal_dp_proc;
    • light_system.c:灯的初始化,IO口操作过程;

启动过程,灯的操作过程分析:

首先看tuya_device.c,这个文件最重要,SOC启动以后,

需要重点关注四个函数pre_app_init()、pre_device_init()、app_init()和device_init()。

首先进入pre_app_init函数,这时TuyaIOT还未启动,这里调用了fast_boot(light_system.c里),初始化灯的IO。

进入pre_device_init这个函数,这时TuyaIOT已启动,调用了初始化按键函数,最后调用了wifi_key_process函数监控按键状态。

进入app_init()没有内容;

最后进入device_init,初始化都已完成,这里调用回调函数,基本不用修改!

这个Demo相对来说相当的简单,

1.light_system.h定义灯IO,

2.tuya_device.c定义按键IO,

3.dp_process.h定义DP点,

4.pre_app_init函数初始化灯的IO,并初始开灯状态

5.pre_device_init函数初始化按键,并监控按键状态

6.device_init调用回调函数

本次任务----加一个PIR感应IO,加两个DP点(人体感应状态,感应模式)

参考例程:tuya-iotos-embeded-demo-wifi-ble-environment-monitor,其中火焰感应为电平触发。 调用tuya_environment_monitor.c中get_flame_sensor_value函数,监控火焰电平状态,并动作,上报DP 流程如下:device_init--中调用air_box_device_init:初始化端口、创建信号量、创建传感器数据线程 --acquire_data_task等待信号量while (1) 循环读取各项数据!

涂鸦IOT平台创建产品:

选择照明品类---光源

功能定义如下:

其它步骤请参考三明治开发社区的教程。

模组二次开发修改相关代码:

1.tuya_device.h修改PID:

2.dp_process.h增加DP点:

3.dp_process.c中update_all_dp上报函数和deal_dp_proc下载函数要增加2个DP点,

light_system.c中增加get_pir_status获取人体状态函数,get_mode_status获取模式数据函数,这两函数需要新建,参考get_light_status函数;

增加set_mode_status函数 这里还要增加PIR_STATUS_E结构体(在light_system.h中定义)、

cur_pir_status存储状态函数(在light_system.c最上面有定义)。

4.light_system.h定义人体感应IO,按键IO改成28、灯的IO电平翻转、适配CBU三明治板!

5.tuya_device.c文件中--device_init函数--中调用pir_device_init:初始化PIR端口、PIR线程;

pir_data_task线程在while (1) 循环读取PIR端口数据!作出相应动作!

6.copy到Linux机器上编译测试, 完成开发!

小结

至此,所有代码便修改完毕啦~!是不是相当简单,不懂代码的我也能做完啦!

您正在浏览的内容为涂鸦开发者平台注册用户自主发布,版权归原作者所有,涂鸦开发者平台不拥有其著作权,亦不承担相应法律责任,涂鸦开发者平台不对该等内容作出不违反、不侵权的陈述与保证。您应知晓并了解您对于该等内容的复制、改编、转发传播等任何其他使用行为应当符合法律法规并应取得相关权利人的许可,您的该等行为所造成的全部相应后果(包括但不限于侵权、违约、受损、与第三方的纠纷等)均应由您个人承担。内容知识产权相关条款可查看涂鸦开发者平台用户协议。如果您发现有涉嫌侵权的内容,请立即通过平台上的联系方式联系平台进行举报并发送有关证据,一经查实,平台将立刻删除涉嫌侵权内容。

喜欢举报