|
|
|
|
公众号矩阵

【OpenHarmony Canary】手机操控的智能灯

很多物联网设备没有人机界面,这些设备可以通过手机,手表,平板,电脑等来进行显示和操控,能够提升操作的便捷性和设备的智能化水平。手头有鸿蒙开发版,我的荣耀手机也刚升级了鸿蒙系统,刚好可以做一个手机控制的智能灯实验。

作者:鸿联来源:鸿蒙社区|2021-10-13 07:18

想了解更多内容,请访问:

51CTO和华为官方战略合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

很多物联网设备没有人机界面,这些设备可以通过手机,手表,平板,电脑等来进行显示和操控,能够提升操作的便捷性和设备的智能化水平。手头有鸿蒙开发版,我的荣耀手机也刚升级了鸿蒙系统,刚好可以做一个手机控制的智能灯实验。

一、环境准备

Windows10

设备开发: DevEco Device Tool 2.2 Beta2

应用开发: DevEco Studio 2.2 Beta1

源码:OpenHarmony 2.0 Canary 下载

Windows开发环境准备官网

OpenHarmony 2.0 Canary源码开发Hi3861,首先在device/hisilicon/hispark_pegasus/sdk_liteos/build/config/usr_config.mk中打开I2C和PWM开关,在base\iot_hardware\peripheral\interfaces\kits增加和完善Adc,I2C,Gpio的功能和接口。

二、材料准备

1.小熊派 BEARPI-HM Nano Hi3861 主板

2.小熊派 E53_SC1扩展板

3.装配好如图

三、简介

E53_SC1扩展板的BH1750传感器采集光照强度,通过I2C传给Hi3861,Hi3861作为TCP服务器,将光强和灯状态信息定时打包发给手机TCP客户端,手机接收后在屏幕显示,手机端开灯\关灯操作命令,通过TCP发送给服务端HI3861,解码后控制Gpio 7点亮或关闭LED灯。

四、设备端Hi3861代码

1.IO口初始化

  1. static void E53_SC1_INT_IO_Init(void) 
  2. {   
  3.     IoTGpioInit(7); 
  4.     IoTGpioSetFunc(7,IOT_GPIO_FUNC_GPIO_7_GPIO); 
  5.     IoTGpioSetDir(7, IOT_GPIO_DIR_OUT);//设置GPIO_7为输出模式 
  6.  
  7.     IoTGpioInit(0); 
  8.     IoTGpioSetFunc(0, IOT_GPIO_FUNC_GPIO_0_I2C1_SDA);   // GPIO_0复用为I2C1_SDA 
  9.     IoTGpioInit(1); 
  10.     IoTGpioSetFunc(1, IOT_GPIO_FUNC_GPIO_1_I2C1_SCL);   // GPIO_1复用为I2C1_SCL 
  11.     IoTI2cInit(IOT_I2C_IDX_1, 400000); /* baudrate: 400kbps */ 
  12.  
  13.     IoTGpioInit(11); 
  14.     IoTGpioSetFunc(11,IOT_GPIO_FUNC_GPIO_11_GPIO); 
  15.     IoTGpioSetDir(11, IOT_GPIO_DIR_IN);              //设置GPIO_11为输入模式,按键F1本地开灯 
  16.     IoTGpioSetPull(11, IOT_GPIO_PULL_UP); 
  17.     IoTGpioRegisterIsrFunc(11, IOT_INT_TYPE_EDGE, IOT_GPIO_EDGE_FALL_LEVEL_LOW, F1_Pressed, NULL); 
  18.  
  19.     IoTGpioInit(12); 
  20.     IoTGpioSetFunc(12,IOT_GPIO_FUNC_GPIO_12_GPIO); 
  21.     IoTGpioSetDir(12, IOT_GPIO_DIR_IN);             //设置GPIO_12为输入模式,按键F2本地关灯 
  22.     IoTGpioSetPull(12, IOT_GPIO_PULL_UP); 
  23.     IoTGpioRegisterIsrFunc(12, IOT_INT_TYPE_EDGE, IOT_GPIO_EDGE_FALL_LEVEL_LOW, F2_Pressed, NULL); 

2.BH1750驱动采用小熊派官方驱动

3.数据打包上报

  1. static void deal_report_msg(report_t *report) 
  2.     char *msg; 
  3.     uint8_t ret; 
  4.     profile_service_t    service; 
  5.     profile_kv_t         lux; 
  6.     profile_kv_t         light; 
  7.     //配置要发送的数据 
  8.     service.event_time = NULL
  9.     service.service_id = "Smart_Light"
  10.     service.service_property = &lux; 
  11.     service.nxt = NULL
  12.     lux.key = "Lux"
  13.     lux.value = &report->lux; 
  14.     lux.type = PROFILE_VALUE_INT; 
  15.     lux.nxt =  &light; 
  16.     light.key = "Light"
  17.     light.value = light_status ? "ON" : "OFF"
  18.     light.type = PROFILE_VALUE_STRING; 
  19.     light.nxt = NULL
  20.     msg = profile_package_propertyreport(&service); 
  21.     if (send(new_fd, msg, strlen(msg), 0) < 0) 
  22.     { 
  23.         printf("send error\r\n"); 
  24.         close(new_fd); 
  25.     } 
  26.     return

4.接收命令处理

  1. int deal_command_task(void) 
  2.     ssize_t ret; 
  3.     struct sockaddr_in client_sock; 
  4.     int sin_size; 
  5.     while (1) 
  6.     { 
  7.         printf("start accept\n"); 
  8.         sin_size = sizeof(struct sockaddr_in); 
  9.         if ((new_fd = accept(sock_fd, (struct sockaddr *)&client_sock, (socklen_t *)&sin_size)) == -1) 
  10.         { 
  11.             perror("accept"); 
  12.         } 
  13.         printf("accept succeed\n"); 
  14.         is_accepted = 1; 
  15.         while (1) 
  16.         { 
  17.             bzero(recvbuf, sizeof(recvbuf)); 
  18.             if (recv(new_fd, recvbuf, sizeof(recvbuf), 0) < 0) 
  19.             { 
  20.                 printf("recv error\r\n"); 
  21.                 close(new_fd); 
  22.                 is_accepted = 0; 
  23.                 break; 
  24.             } 
  25.             else 
  26.             {   
  27.                 if (NULL != strstr(recvbuf, "Light")) 
  28.                 { 
  29.                     //开启灯 
  30.                     if (NULL != strstr(recvbuf, "ON")) 
  31.                     { 
  32.                         Light_StatusSet(ON); 
  33.                         light_status = 1; 
  34.                         printf("Light On!\r\n"); 
  35.                     } 
  36.                     //关闭灯 
  37.                     else if (NULL != strstr(recvbuf, "OFF")) 
  38.                     { 
  39.                         Light_StatusSet(OFF); 
  40.                         light_status = 0; 
  41.                         printf("Light Off!\r\n");      
  42.                     } 
  43.                 } 
  44.             } 
  45.         } 
  46.     } 

五、手机代码

1.下载小熊派开源社区源码

2.DevEco Studio打开后,修改应用代码配置文件 entry\src\main\config.json 中的 bundleName,为AppGallery Connect 应用中配置的应用包名。

3.修改 entry\src\main\js\default\pages.index\index.js 中的 bundleName,保持和config.json 中一致。

4.定义src/main/js/default/pages/index/index.js文件

  1. data: { 
  2.         title: '鸿联-智能灯'
  3.         ipaddress:'192.168.'
  4.         port:"5678"
  5.         send_value:0, 
  6.         startflag: false
  7.         client_statu: false
  8.         subscribe_statu: false
  9.         property:[ 
  10.             { 
  11.                 "name":"光照"
  12.                 "propertyName":"Lux"
  13.                 "unit":" lux" 
  14.             } 
  15.         ], 
  16.         command:[ 
  17.             { 
  18.                 "name":"庭院灯"
  19.                 "paraName":"Light"
  20.                 "type":"string" 
  21.             } 
  22.         ], 
  23.         properties:{ 
  24.             "Lux":0, 
  25.             "Light":"" 
  26.         } 
  27.     }, 

5.自动签名后,下载到手机

六、使用

1.开发版编译下载后,重启,会自动连接到WiFi,并建立TCP服务器,等待手机客户端接入

 【OpenHarmony  Canary】    手机操控的智能灯-鸿蒙HarmonyOS技术社区

2.手机连接相同 WiFi,查看开发板 IP 为 192.168.43.239,打开手机端的智能灯 APP,点击右上角的加号按钮,输入开发板的 IP 192.168.43.239 和端口5678,点击OK 后会自动连接开发板。

 【OpenHarmony  Canary】    手机操控的智能灯-鸿蒙HarmonyOS技术社区

3.开发板将采集的光照数据传送到手机上显示,手机开关灯,开发板LED灯按指令亮和灭。

 【OpenHarmony  Canary】    手机操控的智能灯-鸿蒙HarmonyOS技术社区

实验完成,后续将不断改进。

想了解更多内容,请访问:

51CTO和华为官方战略合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

【编辑推荐】

  1. 鸿蒙官方战略合作共建——HarmonyOS技术社区
  2. 鸿蒙自动化常见踩坑点及解决方法
  3. HarmonyOS JS应用开发需要关注哪些线程?官方解析来啦
  4. 基于HarmonyOS控制Hi3861小车之信息通信
  5. HarmonyOS 基础之线程管理
  6. HarmonyOS集成支付宝支付sdk
【责任编辑:jianghua TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢
24H热文
一周话题
本月获赞

订阅专栏+更多

带你轻松入门 RabbitMQ

带你轻松入门 RabbitMQ

轻松入门RabbitMQ
共4章 | loong576

50人订阅学习

数据湖与数据仓库的分析实践攻略

数据湖与数据仓库的分析实践攻略

助力现代化数据管理:数据湖与数据仓库的分析实践攻略
共3章 | 创世达人

14人订阅学习

云原生架构实践

云原生架构实践

新技术引领移动互联网进入急速赛道
共3章 | KaliArch

42人订阅学习

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微