完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1 简介
本文介绍基于阿里生活物联网平台的W800 智能灯的示例开发。开发完成后的智能灯可通过云智能APP完成对PWM灯的控制,如开关、调解亮度色温等。 应用场景的拓扑如下图 2 环境搭建 环境搭建请参考《W800快速上手手册》。 特别注意:开发板上的3个拨码开关需要拨到ON端。 2.1 PWM 灯硬件原理框图 3 代码示例 W800智能灯具的开发基于生活物联网平台,其在SDK内的位置如下图示意 3.1 相关文件
3.2 PWM管脚定义 PWM管脚定义在app/include/app_config.h中。 #define PWM0_PIN PB0 #define PWM0_PIN_FUNC PB0_PWM #define PWM0_CH 0 #define PWM1_PIN PB1 #define PWM1_PIN_FUNC PB1_PWM #define PWM1_CH 1 #define PWM2_PIN PB2 #define PWM2_PIN_FUNC PB2_PWM #define PWM2_CH 2 3.3 PWM应用接口 在app/src/app_pwm.h中定义了PWM应用接口。 int8_t app_pwm_init(pin_name_e pwm_pin, pin_func_e pin_func, uint8_t ch); int8_t app_pwm_deinit(void); int8_t app_pwm_start(uint8_t ch); int8_t app_pwm_stop(uint8_t ch); int8_t app_pwm_config(uint8_t ch, uint32_t period, uint32_t duty); 3.3.1 接口实现 在app/src/app_pwm.c文件中实现了接口,内部调用底层的PWM驱动。 需要注意的是,实现部分定义了最大能同时支持的PWM数目为3。 #define PWM_NUM 3 /* 支持PWM数目 */ typedef struct { pwm_handle_t handle; /* 底层PWM驱动句柄 */ uint8_t ch; /* PWM channel */ } app_pwm_info_t; static app_pwm_info_t app_pwm_info[PWM_NUM] = { {NULL, -1}, {NULL, -1}, {NULL, -1}, }; 3.4 PWM LED接口 在app/include/app_main.h中定义了PWM LED接口。 int8_t app_pwm_led_init(); int8_t app_pwm_led_control(const uint8_t flag); int8_t app_pwm_led_set_brightness(int32_t brightness); int8_t app_pwm_led_get_brightness(); int8_t app_pwm_led_get_status(); 3.4.1 默认定义 在app/src/app_led.c中定义了PWM LED灯默认使用的PWM。 #define PWM_PERIOD 100 /* PWM周期(us) */ typedef struct pwm_led { uint8_t status; /* 0 - stop, 1 - start */ int32_t brightness; /* 10 - 100 */ uint8_t pin; /* W800对应的管脚 */ uint8_t channel; /* PWM channel */ pin_func_e pin_func; /* PWM管脚功能号 */ } pwm_led_t; // PWM0 static pwm_led_t g_pwm_led_ctx = {0, 60, PWM0_PIN, PWM0_CH, PWM0_PIN_FUNC}; // PWM1 // static pwm_led_t g_pwm_led_ctx = {0, 60, PWM1_PIN, PWM1_CH, PWM1_PIN_FUNC}; // PWM2 // static pwm_led_t g_pwm_led_ctx = {0, 60, PWM2_PIN, PWM2_CH, PWM2_PIN_FUNC}; 本示例使用了PWM0,可修改上面代码使用PWM1或PWM2。 3.4.2 接口实现 在app/src/app_led.c文件中实现了接口,并调用了PWM应用驱动。 3.5 生活物联网平台对接 对接生活物联网平台的内容在app/src/app_smartliving_demo.c文件中。 PWM LED灯实现了接收设置指令和上报状态,更多命令请参考生活物联网平台相关的介绍。 3.5.1 接收设置指令 user_property_set_event_handler函数用于接收从生活物联网平台下发的设置指令。该接口通过生活物联网平台提供的物模型编程函数IOT_RegisterCallback函数注册并作为回调。 指令命令为json格式,可通过cJSON库进行解析。 单路PWM LED灯有开关(LightSwitch)和亮度(Brightness)两个属性;开关是个bool值,亮度为百分比值。 3.5.2 上报状态 user_post_property函数用于上报状态到生活物联网平台,该接口同样是通过IOT_RegisterCallback函数注册。 上报内容需要组装为json格式。 3.5 初始化PWM LED #include "app_main.h" ... // 省略 int main() { ... // 省略 app_pwm_led_init(); ... // 省略 } 在app/src/app_main.c文件的main函数中调用app_pwm_led_init函数完成初始化。 3.6 调试信息 完成上面介绍的开发环节后,可以通过云智能APP对我们所开发的灯具进行控制,灯具产品注册及配网相关请参考W800快速上手手册。 下面的调试信息分别是开关灯及调整亮度的信息打印。 文章转载自:平头哥芯片开放社区 作者:何佩奇 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
【平头哥Sipeed LicheeRV 86开发板试用体验】Waft初体验
15706 浏览 1 评论
13761 浏览 4 评论
【平头哥Sipeed LicheeRV 86开发板试用体验】四、烧写waft系统&搭建waft测试环境
19682 浏览 2 评论
59125 浏览 19 评论
【限时福利】加入芯片开发社区,领100G电子工程师资料大礼包
88170 浏览 121 评论
邀请函 | 3月2日 来上海参加平头哥“玄铁RISC-V生态大会”
786浏览 0评论
读书分享会 | 玄铁RISC-V处理器入门与实战电子书免费下载!
684浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 10:14 , Processed in 0.736114 second(s), Total 59, Slave 46 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号