鸿蒙手机操控智能灯实验!
很多物联网设备没有人机界面,这些设备可以通过手机,手表,平板,电脑等来进行显示和操控,能够提升操作的便捷性和设备的智能化水平。
手头有鸿蒙开发版,我的荣耀手机也刚升级了鸿蒙系统,刚好可以做一个手机控制的智能灯实验。
环境准备
①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 灯按指令亮和灭。
实验完成,后续将不断改进。
来源:鸿蒙技术社区
- 分享
- 举报
-
浏览量:2260次2018-01-29 01:02:10
-
浏览量:2254次2018-06-11 10:56:32
-
浏览量:4272次2021-08-30 16:19:50
-
浏览量:3839次2021-08-20 16:04:48
-
浏览量:3690次2021-08-10 13:48:46
-
浏览量:4347次2021-07-08 14:11:50
-
浏览量:4276次2021-09-09 13:55:49
-
浏览量:1857次2022-02-02 09:00:36
-
浏览量:4122次2021-09-08 15:52:52
-
浏览量:694次2023-08-24 10:03:33
-
浏览量:1939次2018-03-09 14:13:17
-
浏览量:2911次2020-10-16 10:30:25
-
浏览量:3480次2021-07-08 15:30:22
-
浏览量:3988次2021-09-14 13:37:12
-
浏览量:4623次2021-09-15 13:48:53
-
浏览量:2048次2018-07-27 10:07:45
-
浏览量:2030次2017-12-22 21:28:55
-
浏览量:3949次2021-09-27 14:23:45
-
浏览量:4853次2019-12-26 18:08:07
-
广告/SPAM
-
恶意灌水
-
违规内容
-
文不对题
-
重复发帖
老兵
感谢您的打赏,如若您也想被打赏,可前往 发表专栏 哦~
举报类型
- 内容涉黄/赌/毒
- 内容侵权/抄袭
- 政治相关
- 涉嫌广告
- 侮辱谩骂
- 其他
详细说明