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

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

[[423896]]

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

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口初始化

static void E53_SC1_INT_IO_Init(void) 
{   
    IoTGpioInit(7); 
    IoTGpioSetFunc(7,IOT_GPIO_FUNC_GPIO_7_GPIO); 
    IoTGpioSetDir(7, IOT_GPIO_DIR_OUT);//设置GPIO_7为输出模式 
 
    IoTGpioInit(0); 
    IoTGpioSetFunc(0, IOT_GPIO_FUNC_GPIO_0_I2C1_SDA);   // GPIO_0复用为I2C1_SDA 
    IoTGpioInit(1); 
    IoTGpioSetFunc(1, IOT_GPIO_FUNC_GPIO_1_I2C1_SCL);   // GPIO_1复用为I2C1_SCL 
    IoTI2cInit(IOT_I2C_IDX_1, 400000); /* baudrate: 400kbps */ 
 
    IoTGpioInit(11); 
    IoTGpioSetFunc(11,IOT_GPIO_FUNC_GPIO_11_GPIO); 
    IoTGpioSetDir(11, IOT_GPIO_DIR_IN);              //设置GPIO_11为输入模式,按键F1本地开灯 
    IoTGpioSetPull(11, IOT_GPIO_PULL_UP); 
    IoTGpioRegisterIsrFunc(11, IOT_INT_TYPE_EDGE, IOT_GPIO_EDGE_FALL_LEVEL_LOW, F1_Pressed, NULL); 
 
    IoTGpioInit(12); 
    IoTGpioSetFunc(12,IOT_GPIO_FUNC_GPIO_12_GPIO); 
    IoTGpioSetDir(12, IOT_GPIO_DIR_IN);             //设置GPIO_12为输入模式,按键F2本地关灯 
    IoTGpioSetPull(12, IOT_GPIO_PULL_UP); 
    IoTGpioRegisterIsrFunc(12, IOT_INT_TYPE_EDGE, IOT_GPIO_EDGE_FALL_LEVEL_LOW, F2_Pressed, NULL); 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.

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

3.数据打包上报

static void deal_report_msg(report_t *report) 

    char *msg; 
    uint8_t ret; 
    profile_service_t    service; 
    profile_kv_t         lux; 
    profile_kv_t         light; 
    //配置要发送的数据 
    service.event_time = NULL
    service.service_id = "Smart_Light"
    service.service_property = &lux; 
    service.nxt = NULL
    lux.key = "Lux"
    lux.value = &report->lux; 
    lux.type = PROFILE_VALUE_INT; 
    lux.nxt =  &light; 
    light.key = "Light"
    light.value = light_status ? "ON" : "OFF"
    light.type = PROFILE_VALUE_STRING; 
    light.nxt = NULL
    msg = profile_package_propertyreport(&service); 
    if (send(new_fd, msg, strlen(msg), 0) < 0) 
    { 
        printf("send error\r\n"); 
        close(new_fd); 
    } 
    return

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.

4.接收命令处理

int deal_command_task(void) 

    ssize_t ret; 
    struct sockaddr_in client_sock; 
    int sin_size; 
    while (1) 
    { 
        printf("start accept\n"); 
        sin_size = sizeof(struct sockaddr_in); 
        if ((new_fd = accept(sock_fd, (struct sockaddr *)&client_sock, (socklen_t *)&sin_size)) == -1) 
        { 
            perror("accept"); 
        } 
        printf("accept succeed\n"); 
        is_accepted = 1; 
        while (1) 
        { 
            bzero(recvbuf, sizeof(recvbuf)); 
            if (recv(new_fd, recvbuf, sizeof(recvbuf), 0) < 0) 
            { 
                printf("recv error\r\n"); 
                close(new_fd); 
                is_accepted = 0; 
                break; 
            } 
            else 
            {   
                if (NULL != strstr(recvbuf, "Light")) 
                { 
                    //开启灯 
                    if (NULL != strstr(recvbuf, "ON")) 
                    { 
                        Light_StatusSet(ON); 
                        light_status = 1; 
                        printf("Light On!\r\n"); 
                    } 
                    //关闭灯 
                    else if (NULL != strstr(recvbuf, "OFF")) 
                    { 
                        Light_StatusSet(OFF); 
                        light_status = 0; 
                        printf("Light Off!\r\n");      
                    } 
                } 
            } 
        } 
    } 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.

五、手机代码

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文件

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

 

责任编辑:jianghua 来源: 鸿蒙社区
相关推荐

2021-07-02 14:16:04

鸿蒙HarmonyOS应用

2021-09-16 15:04:28

鸿蒙HarmonyOS应用

2021-06-28 09:38:50

鸿蒙HarmonyOS应用

2021-06-11 14:16:21

Windows 10WSL OpenHarmon

2023-05-08 15:48:13

智能音箱鸿蒙

2024-09-02 14:00:00

2023-09-06 15:35:14

2024-03-04 15:06:38

鸿蒙智能教室应用开发

2023-01-13 16:54:38

2018-04-09 11:11:03

RGB台式机主机

2024-08-14 15:00:00

模型数据

2019-09-04 09:18:08

2022-04-11 11:30:33

智能交通灯操作系统鸿蒙

2022-01-07 09:56:16

鸿蒙HarmonyOS应用

2022-08-05 19:37:59

鸿蒙Api框架

2022-10-08 16:19:40

智能喂食器鸿蒙

2020-02-27 16:34:34

人工智能算法数据

2023-04-17 16:21:58

操作系统鸿蒙

2022-09-29 15:24:11

物联网MQTT

2012-04-25 13:39:23

智能电视
点赞
收藏

51CTO技术栈公众号