Loading...
首页专栏正文

鸿蒙手机操控智能灯实验!

老兵 发布于 2021-09-07 13:37:31 浏览 2548 点赞 93 收藏 0

很多物联网设备没有人机界面,这些设备可以通过手机,手表,平板,电脑等来进行显示和操控,能够提升操作的便捷性和设备的智能化水平。

手头有鸿蒙开发版,我的荣耀手机也刚升级了鸿蒙系统,刚好可以做一个手机控制的智能灯实验。

环境准备

①Windows10

②设备开发:DevEco Device Tool 2.2 Beta2

③应用开发:DevEco Studio 2.2 Beta1

④源码:OpenHarmony 2.0 Canary 下载 https://device.harmonyos.com/cn/docs/start/get-code/sourcecode-acquire-0000001050769927

⑤Windows 开发环境准备 https://device.harmonyos.com/cn/docs/ide/user-guides/install_windows-0000001050164976

⑥OpenHarmony 2.0 Canary 源码开发 Hi3861

首先在如下中打开 I2C 和 PWM 开关:

device/hisilicon/hispark_pegasus/sdk_liteos/build/config/usr_config.mk

在 base\iot_hardware\peripheral\interfaces\kits 增加和完善 Adc,I2C,Gpio 的功能和接口。

材料准备

①小熊派 BEARPI-HM Nano Hi3861 主板

②小熊派 E53_SC1 扩展板

装配好如图:

E53_SC1 扩展板的 BH1750 传感器采集光照强度,通过 I2C 传给 Hi3861。

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

设备端 Hi3861 代码

①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);

}

②BH1750 驱动采用小熊派官方驱动。

③数据打包上报: 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; }

④接收命令处理: 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");
} } } } } }

手机代码

①下载小熊派开源社区源码: https://gitee.com/bearpi/HCIA-HarmonyOS-FA/tree/master/smart_home

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

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

④定义 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":"" } },

⑤自动签名后,下载到手机。

使用

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

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

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

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

来源:鸿蒙技术社区

*本文仅代表作者观点,不代表易百纳技术社区立场。系作者授权易百纳技术社区发表,未经许可不得转载。

精彩评论

内容存在敏感词
打赏
打赏作者
老兵
您的支持将鼓励我继续创作!
金额:
¥1 ¥5 ¥10 ¥50 ¥100
支付方式:
微信支付
支付宝支付
微信支付
打赏成功!

感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~

易百纳技术社区
确定要删除此文章、专栏、评论吗?
确定
取消
易百纳技术社区