|
2 anos atrás | |
---|---|---|
.. | ||
README.md | 2 anos atrás |
对于家里的孩子,还要上班的父母总是被不能安安心心,随着物联网的发展和华为生态链的普及,一款基于鸿蒙操作系统的智慧儿童管家机器人呼之欲出。 孩子一方面需要父母抽出时间来陪伴,另一方面需要父母费劲心思来监管,儿童的心智尚不成熟,抗诱惑能力弱,难以高度自律和辨别是非,另一方面,孩子也容易被好奇心驱使,而意外造成一些安全事故,这些都需要一款综合性的机器人来实现对儿童的陪伴和管理,这也是这款儿童管家设计的初衷。 目前的管家功能尚不完善,希望后续的战友可以共同学习进步,完善这个必将走进千家万户的产品。
目前智慧儿童管家实现了下面几点功能:
移动控制基于3861进行,基本思路是通过对pwm波形的控制,实现对电机的控制,进而实现对小车的移动,为了通信方面的方便,我们采用udp协议进行通信,通过发送对于格式的数据,实现远程对小车的控制。 3861提供了充分的接口对于调用GPIO和引脚复用,以及wifi等模块的驱动示例。可以通过小熊派开源社区的一些资料进行学习。
摄像头部分基于3516进行开发,复刻参考了开源的sig组中的智能猫眼,具体实现代码教程见: https://gitee.com/romachen/knowledge_demo_smart_home/blob/master/dev/docs/smart_door_viewer_3516/README.md
语言模块目前基于esp-eye(方案二:LD3320模组),通过识别提前导入的关键词话语,通过udp或者串口传输信号(输出GPIO电平高低),实现基本的控制,具体操作路径见docs
此功能还尚未开发,技术路径可以通过小熊派(3861)的数字管家进行,配合鸿蒙手机操作系统,实现对台灯,空调等设备的控制,亦可以接入语音模块
示例文件夹下包含camer_out,children,move_control三个部分,具体的操作手册将在docs里面说明,另外,还附上了相关的烧录文件,方面快速体验功能。 B站视频链接:https://www.bilibili.com/video/BV1qm4y1R7oC?spm_id_from=333.999.0.0
本次项目开发历时三个月左右,前期在环境配置上面用了不少功夫,参考了许多开源社区的教程,欢迎与各位交流讨论,有任何问题,欢迎邮箱联系:158902477@qq.com 最后,希望鸿蒙和华为能够长足的发展下去,成为国家的脊梁,也能真正给人民的生活带来便利,提高国家的综合影响力和实力。
方法一:借助小熊派开源社区提供的虚拟机镜像,直接进行开发(最简单) 链接:https://gitee.com/romachen/bearpi-hm_nano/blob/master/applications/BearPi/BearPi-HM_Nano/docs/quick-start/BearPi-HM_Nano%E5%8D%81%E5%88%86%E9%92%9F%E4%B8%8A%E6%89%8B.md
方法二:基于ubuntu进行环境搭建, 参考链接:https://gitee.com/romachen/docs/blob/master/zh-cn/device-dev/quick-start/Readme-CN.md
sock_fd = socket(AF_INET, SOCK_STREAM, 0)) //AF_INT:ipv4, SOCK_STREAM:tcp协议
描述:
在网络编程中所需要进行的第一件事情就是创建一个socket,无论是客户端还是服务器端,都需要创建一个socket,该函数返回socket文件描述符,类似于文件描述符。socket是一个结构体,被创建在内核中。
int sendto ( socket s , const void * msg, int len, unsigned int flags,
const struct sockaddr * to , int tolen ) ;
描述:
sendto() 用来将数据由指定的socket传给对方主机。参数s为已建好连线的socket。参数msg指向欲连线的数据内容,参数flags 一般设0,
主要代码分析
完成Wifi热点的连接需要以下几步
socket
接口创建一个socket,AF_INT
表示ipv4,SOCK_STREAM
表示使用tcp协议sendto
接口发送数据到服务端。调用 recvfrom
接口接收服务端发来的数据
static void UDPClientTask(void)
{
/* 服务器的地址信息 */
struct sockaddr_in send_addr;
char recvBuf[512];
/* 连接Wifi */
WifiConnect("TP-LINK_65A8","0987654321");
/* 创建socket */
if((sock_fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
{
perror("create socket failed!\r\n");
exit(1);
}
/* 初始化预连接的服务端地址 */
send_addr.sin_family = AF_INET;
send_addr.sin_port = htons(_PROT_);
send_addr.sin_addr.s_addr = inet_addr("192.168.0.175");
while (1)
{
bzero(recvBuf,sizeof(recvBuf));
/* 发送数据到服务端 */
sendto(sock_fd, send_data, strlen(send_data), 0, (struct sockaddr * )&send_addr, addr_length);
/* 线程休眠一段时间 */
sleep(10);
/* 接收服务端返回的字符串*/
recvfrom(sock_fd, recvBuf, sizeof(recvBuf), 0, (struct sockaddr * )&send_addr, &addr_length);
printf("%s:%d=>%s\n", inet_ntoa(send_addr.sin_addr), ntohs(send_addr.sin_port), recvBuf);
}
/* 关闭这个 socket */
closesocket(sock_fd);
}
修改 applications\BearPi\BearPi-HM_Nano\sample
路径下 BUILD.gn 文件,指定 udp_client
参与编译。
#"D1_iot_wifi_sta:wifi_sta",
#"D2_iot_wifi_sta_connect:wifi_sta_connect",
"D3_iot_udp_client:udp_client",
#"D4_iot_tcp_server:tcp_server",
#"D5_iot_mqtt:iot_mqtt",
#"D6_iot_cloud_oc:oc_mqtt",
#"D7_iot_cloud_onenet:onenet_mqtt",
使用 Socket tool 创建UDP服务端用于测试。
示例代码编译烧录代码后,按下开发板的RESET按键,在数据发送窗口输入要发送的数据,点击发送后开发板会回复固定消息,且开发板收到消息后会通过日志打印出来。
192.168.0.175:8888=>Hello! BearPi-HM_nano UDP Client!
在路径bearpi-hm_nano\applications\BearPi\BearPi-HM_Nano\sample下面新建一个项目文件夹,名为move_control,将对于文件夹中文件全部放入
可以看到,对应文件中,move_control.c中调用了move_control.h,并在其中定义了小车的pwm调用函数,和对udp协议过来的数据的反应
另外在udp_test.c和sta_entry中设定了对应的通信程序,你可以在sta_entry中设置自己的WiFi和密码,以便连接自己的设备:
如果你将修改对于的文件样式框架,请记得修改build.gn中对应的文件以来
另外在加入源代码之后,记得修改bearpi-hm_nano\applications\BearPi\BearPi-HM_Nano\sample中的Build.gn文件,注释掉对应app代码(该文件位于\陈欣宇_智慧儿童管家\dev\teamx\smart_children_housekeeper\code)
项目在进行过程中,借助了3516中sig的智能猫眼开源实例,地址链接: https://gitee.com/romachen/knowledge_demo_smart_home/blob/master/dev/docs/smart_door_viewer_3516/README.md https://blog.csdn.net/qq_54472191/article/details/122274793
方案一:ESP-EYE 参考链接,完成对应文件的配置 https://www.espressif.com/zh-hans/products/devkits/esp-eye/overview 方案二:离线语音模块