【OpenHarmony Canary】手機(jī)操控的智能燈
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)
很多物聯(lián)網(wǎng)設(shè)備沒有人機(jī)界面,這些設(shè)備可以通過手機(jī),手表,平板,電腦等來進(jìn)行顯示和操控,能夠提升操作的便捷性和設(shè)備的智能化水平。手頭有鴻蒙開發(fā)版,我的榮耀手機(jī)也剛升級了鴻蒙系統(tǒng),剛好可以做一個手機(jī)控制的智能燈實(shí)驗(yàn)。
一、環(huán)境準(zhǔn)備
Windows10
設(shè)備開發(fā): DevEco Device Tool 2.2 Beta2
應(yīng)用開發(fā): DevEco Studio 2.2 Beta1
源碼:OpenHarmony 2.0 Canary 下載
Windows開發(fā)環(huán)境準(zhǔn)備官網(wǎng)
OpenHarmony 2.0 Canary源碼開發(fā)Hi3861,首先在device/hisilicon/hispark_pegasus/sdk_liteos/build/config/usr_config.mk中打開I2C和PWM開關(guān),在base\iot_hardware\peripheral\interfaces\kits增加和完善Adc,I2C,Gpio的功能和接口。
二、材料準(zhǔn)備
1.小熊派 BEARPI-HM Nano Hi3861 主板
2.小熊派 E53_SC1擴(kuò)展板
3.裝配好如圖
三、簡介
E53_SC1擴(kuò)展板的BH1750傳感器采集光照強(qiáng)度,通過I2C傳給Hi3861,Hi3861作為TCP服務(wù)器,將光強(qiáng)和燈狀態(tài)信息定時打包發(fā)給手機(jī)TCP客戶端,手機(jī)接收后在屏幕顯示,手機(jī)端開燈\關(guān)燈操作命令,通過TCP發(fā)送給服務(wù)端HI3861,解碼后控制Gpio 7點(diǎn)亮或關(guān)閉LED燈。
四、設(shè)備端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);//設(shè)置GPIO_7為輸出模式
 - IoTGpioInit(0);
 - IoTGpioSetFunc(0, IOT_GPIO_FUNC_GPIO_0_I2C1_SDA); // GPIO_0復(fù)用為I2C1_SDA
 - IoTGpioInit(1);
 - IoTGpioSetFunc(1, IOT_GPIO_FUNC_GPIO_1_I2C1_SCL); // GPIO_1復(fù)用為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); //設(shè)置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); //設(shè)置GPIO_12為輸入模式,按鍵F2本地關(guān)燈
 - IoTGpioSetPull(12, IOT_GPIO_PULL_UP);
 - IoTGpioRegisterIsrFunc(12, IOT_INT_TYPE_EDGE, IOT_GPIO_EDGE_FALL_LEVEL_LOW, F2_Pressed, NULL);
 - }
 
2.BH1750驅(qū)動采用小熊派官方驅(qū)動
3.數(shù)據(jù)打包上報
- 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;
 - //配置要發(fā)送的數(shù)據(jù)
 - 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;
 - }
 
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");
 - }
 - //關(guān)閉燈
 - else if (NULL != strstr(recvbuf, "OFF"))
 - {
 - Light_StatusSet(OFF);
 - light_status = 0;
 - printf("Light Off!\r\n");
 - }
 - }
 - }
 - }
 - }
 - }
 
五、手機(jī)代碼
1.下載小熊派開源社區(qū)源碼
2.DevEco Studio打開后,修改應(yīng)用代碼配置文件 entry\src\main\config.json 中的 bundleName,為AppGallery Connect 應(yīng)用中配置的應(yīng)用包名。
3.修改 entry\src\main\js\default\pages.index\index.js 中的 bundleName,保持和config.json 中一致。
4.定義src/main/js/default/pages/index/index.js文件
- data: {
 - title: '鴻聯(lián)-智能燈',
 - 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":""
 - }
 - },
 
5.自動簽名后,下載到手機(jī)
六、使用
1.開發(fā)版編譯下載后,重啟,會自動連接到WiFi,并建立TCP服務(wù)器,等待手機(jī)客戶端接入

2.手機(jī)連接相同 WiFi,查看開發(fā)板 IP 為 192.168.43.239,打開手機(jī)端的智能燈 APP,點(diǎn)擊右上角的加號按鈕,輸入開發(fā)板的 IP 192.168.43.239 和端口5678,點(diǎn)擊OK 后會自動連接開發(fā)板。

3.開發(fā)板將采集的光照數(shù)據(jù)傳送到手機(jī)上顯示,手機(jī)開關(guān)燈,開發(fā)板LED燈按指令亮和滅。

實(shí)驗(yàn)完成,后續(xù)將不斷改進(jìn)。
51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)

















 
 
 













 
 
 
 