当前位置: 首页 > 科技观察

【OpenHarmonyCanary】手机控制的智能灯

时间:2023-03-13 21:27:22 科技观察

更多信息请访问:https://harmonyos.51cto.com,与华为官方共同打造的鸿蒙技术社区,可以通过手机显示和控制设备,手表、平板电脑、电脑等,可以提高操作的便利性和设备的智能化水平。手头有鸿蒙开发版,荣耀手机刚升级鸿蒙系统,可以做一个手机控制的智能灯实验。一、环境准备Windows10设备开发:DevEcoDeviceTool2.2Beta2应用开发:DevEcoStudio2.2Beta1源码:OpenHarmony2.0Canary下载Windows开发环境准备官网OpenHarmony2.0Canary源码开发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-HMNanoHi3861主板2、BEARPIE53_SC1扩展板3、组装如图3简介E53_SC1扩展板的BH1750传感器采集光强,通过I2C传输给Hi3861,Hi3861作为TCP服务器,将光照强度和光照状态信息以常规的方式发送给手机TCP客户端,手机收到后会显示在屏幕上。手机开/关灯的操作指令通过TCP发送给服务器HI3861,解码后控制Gpio7点亮或关闭LED灯。4.Device-sideHi3861code1.IOportinitializationstaticvoidE53_SC1_INT_IO_Init(void){IoTGpioInit(7);IoTGpioSetFunc(7,IOT_GPIO_FUNC_GPIO_7_GPIO);IoTGpioSetDir(7,IOT_GPIO_DIR_OUT);//SetGPIO_7astheoutputmodeIoTGpioInnc(0);,IOT_GPIO_FUNC_GPIO_0_I2C1_SDA);//GPIO_0复用为I2C1_SDAIoTGpioInit(1);IoTGpioSetFunc(1,IOT_GPIO_FUNC_GPIO_1_I2C1_SCL);//GPIO_1复用为I2C1_SCLIoTI2cInit(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);}2.BH1750ThedriveradoptstheofficialdriverofBearPi3.Dataispackagedandreportedstaticvoiddeal_report_msg(report_t*report){char*msg;uint8_tret;profile_service_tservice;profile_kv_tlux;profile_kv_tlight;//配置要发送的数据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("sendererror\r\n");close(new_fd);}return;}4.接收命令处理intdeal_command_task(void){ssize_tret;structsockaddr_inclient_sock;intsin_size;while(1){printf("startaccept\n");sin_size=sizeof(structsockaddr_in);if((new_fd=accept(sock_fd,(structsockaddr*)&client_sock,(socklen_t*)&sin_size))==-1){perror("accept");}printf("acceptsucceed\n");is_accepted=1;while(1){bzero(recvbuf,sizeof(recvbuf));if(recv(new_fd,recvbuf,sizeof(recvbuf),0)<0){printf("recverror\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("LightOn!\r\n");}//关灯elseif(NULL!=strstr(recvbuf,"OFF")){Light_StatusSet(OFF);light_status=0;printf("LightOff!\r\n");}}}}}}5.手机代码1.下载小熊派开源社区源码2.DevEcoStudio打开后,修改应用代码配置文件入口\src\main\config.json中的bundleName为AppGalleryConnect应用中配置的应用包名3.修改entry\src\main\js\default\pages.index\index.js中的bundleName要和config.json中的保持一致。4.定义src/main/js/default/pages/index/index.js文件数据:{title:'鸿联-智能灯',ipaddress:'192.168.',port:"5678",send_value:0,startflag:false,client_statu:false,subscribe_statu:false,property:[{"name":"lighting","propertyName":"Lux","unit":"lux"}],command:[{"name":"花园Light","paraName":"Light","type":"string"}],properties:{"Lux":0,"Light":""}},5.自动签名后,下载到手机6、使用1.编译下载开发版后,重启,会自动连接WiFi,并建立TCP服务器,等待手机客户端访问2.手机连接同一个WiFi,查看开发板的IP为192.168.43.239,并在手机APP上打开智能灯,点击右上角的加号按钮,输入IP192.168.43.239和端口开发板的5678,点击确定,自动连接开发板。3、开发板将采集到的灯光数据传给手机显示,手机开关灯,开发板的LED灯根据指令进行开关。实验完成,后续会继续完善。更多信息请访问:Harmonyos.51cto.com,与华为官方合作打造的鸿蒙技术社区