https://harmonyos.51cto.com/#zz
鸿蒙智能家居项目
一、系统介绍
本系统硬件采用Hispark WiFi开发板,主控芯片为Hi3861,操作系统为Harmony OS,软件上支持MQTT、OneNET接入协议,驱动开发包括按键驱动、OLED驱动、PWD驱动开发,其它功能模块有NV数据存储、WiFi配网功能。
整个系统框架如下:
整个系统主要分为3大部分:
(2)Harmony OS软件开发:在开发板上实现相关功能。
(3)硬件:使用到的硬件有:LED灯、OLED屏幕、按键。
整个鸿蒙开发板的软件分为4层:
(1)应用:实现智能家居的应用逻辑处理部分。
(2)功能组件:包括MQTT、JSON、数据存储、WiFi配网功能等,为智能家居应用提供关键能力。
(3)内核:Harmony OS内核提供关键能力。
(4)驱动:包括PWM驱动、OLED驱动、WiFi驱动、按键驱动等,为硬件控制提供了能力。
二、功能描述
(1)家电控制功能
用户可以通过手机APP或者网页控制开发板的LED亮灭、同时可以控制LED灯的亮度。
网页界面如下:
同时还能监控家里的温度情况。
(2)配网功能
鸿蒙开发板支持一键配网功能,用户只需要按下user按键,即可进入配网模式。
(3)数据存储功能
支持数据存储功能,可以存储配网设置的账户密码等关键数据。
(4)MQTT、OneNET接入协议支持
支持MQTT协议、OneNET接入协议,可实现远程控制、远程监测数据。
(5)驱动能力
支持PWM驱动、I2C驱动等,可实现外围硬件的驱动能力。
三、代码描述
(1)代码流程
整个代码文件目录如下:
代码流程图如下:
(2)家电控制部分
对接收到得网络数据进行解析,这里我用得json数据格式。数据解析处理函数如下:
- void onenet_cmd_rsp_cb(uint8_t *recv_data, size_t recv_size, uint8_t **resp_data, size_t *resp_size)
- {
- cJSON *recvjson;
- printf("recv data is %.*s\n", recv_size, recv_data);
- //进行json解析
- recvjson = cJSON_Parse((const char *)recv_data);
- if(recvjson != NULL)
- {
- if(cJSON_GetObjectItem(recvjson, "ledSwitch") != NULL)
- {
- if(cJSON_GetObjectItem(recvjson, "ledSwitch")->valueint == 1 )
- {
- //GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 0);
- PwmStart(WIFI_IOT_PWM_PORT_PWM0, led_pwm, 65530);
- led_status = 1;
- }else if(cJSON_GetObjectItem(recvjson, "ledSwitch")->valueint == 0 )
- {
- //GpioSetOutputVal(WIFI_IOT_IO_NAME_GPIO_9, 1);
- PwmStart(WIFI_IOT_PWM_PORT_PWM0, 65520, 65530);
- led_status = 0;
- }
- }
- if(cJSON_GetObjectItem(recvjson, "ledLD") != NULL)
- {
- //获取亮度
- led_ld = cJSON_GetObjectItem(recvjson, "ledLD")->valueint;
- led_pwm = 65530 - ((led_ld * 65520) / 100);
- if(led_status == 1)
- {
- PwmStart(WIFI_IOT_PWM_PORT_PWM0, led_pwm, 65530);
- }
- //
- printf("led_ld is %d, led_pwm is %d \r\n", led_ld, led_pwm);
- }
- cJSON_Delete(recvjson);
- }
- *resp_data = NULL;
- *resp_size = 0;
- }
(3)OneNET初始化部分
(4)LED亮度控制
这里LED的亮度我采用PWM控制的方式,PWM初始化代码如下:
控制亮度的代码部分:
(5)数据存储
这里我使用NV来存储配网时的账户和密码,代码如下:
(6)按键处理
这里我使用的是中断触发方式来相应按键。
中断注册:
当用户按下按键时,立即启动配网功能,中断响应函数:
©著作权归作者和HarmonyOS技术社区共同所有,如需转载,请注明出处,否则将追究法律责任
https://harmonyos.51cto.com/#zz
1核1g1m 云服务器 多少钱一个月?1核1g1m这样的配置属于非常非常基础入门的 云服...
FunctionGraph是一项基于事件驱动的函数托管计算服务。使用FunctionGraph函数,...
作者:Mintimate 博客: https://www.mintimate.cn Mintimates Blog,只为与你分...
企业 云服务器 一年多少钱?这个主要是看企业网站的规模如何了,如果网站规模大...
关于 服务器 安全,新手最常遇到的一个问题就是:该选择哪种防火墙?面对种类如...
9月17日,2020云栖大会上,德勤中国首席执行官曾顺福宣布,将成立2500人规模的德...
本文转载自微信公众号「小鹿动画学编程」,作者小鹿同学。转载本文请联系小鹿动...
服务器租用 单ip双线和双ip双线的区别 一个企业在进行 服务器租用 时需要考虑方...
接下来正式开始今天的内容讲解,今天的男主角是计时器 timer。 在实际的应用工程...
Python中的else是基础的语句,它的两种使用形式是: ifcondition: doSomeThings ...