zqy 8ff0c5a445 zz 2 years ago
..
README.md 8ff0c5a445 zz 2 years ago

README.md

智慧儿童管家

项目简介

对于家里的孩子,还要上班的父母总是被不能安安心心,随着物联网的发展和华为生态链的普及,一款基于鸿蒙操作系统的智慧儿童管家机器人呼之欲出。 孩子一方面需要父母抽出时间来陪伴,另一方面需要父母费劲心思来监管,儿童的心智尚不成熟,抗诱惑能力弱,难以高度自律和辨别是非,另一方面,孩子也容易被好奇心驱使,而意外造成一些安全事故,这些都需要一款综合性的机器人来实现对儿童的陪伴和管理,这也是这款儿童管家设计的初衷。 目前的管家功能尚不完善,希望后续的战友可以共同学习进步,完善这个必将走进千家万户的产品。

功能简介

目前智慧儿童管家实现了下面几点功能:

  1. 基本的移动控制功能:如果不能移动的管家,那么一定会受到很多限制吧,所以管家首先需要具备移动功能,这样为后续的图像和语言等功能准备平台条件;
  2. 摄像头图像传输功能:通过视频流的实时传输,可以实现远程对孩子的监护和陪伴,也让使用者放心;
  3. 语言交流功能:如果管家不能对外界做出反应,那么也一定会显得很鸡肋吧,不同层次的语言交流功能将是智慧管家之所以智慧的管家所在;
  4. 其他扩展功能:后续方面,如果能接入家中的智能设备,作为家中的一个智能终端,也未尝不是一件让人快乐的事情。

功能实现路径

1.移动控制-3861

image

移动控制基于3861进行,基本思路是通过对pwm波形的控制,实现对电机的控制,进而实现对小车的移动,为了通信方面的方便,我们采用udp协议进行通信,通过发送对于格式的数据,实现远程对小车的控制。 3861提供了充分的接口对于调用GPIO和引脚复用,以及wifi等模块的驱动示例。可以通过小熊派开源社区的一些资料进行学习。

2.摄像头功能

摄像头部分基于3516进行开发,复刻参考了开源的sig组中的智能猫眼,具体实现代码教程见: https://gitee.com/romachen/knowledge_demo_smart_home/blob/master/dev/docs/smart_door_viewer_3516/README.md

3.语音模块

语言模块目前基于esp-eye(方案二:LD3320模组),通过识别提前导入的关键词话语,通过udp或者串口传输信号(输出GPIO电平高低),实现基本的控制,具体操作路径见docs

4.智能家居功能

此功能还尚未开发,技术路径可以通过小熊派(3861)的数字管家进行,配合鸿蒙手机操作系统,实现对台灯,空调等设备的控制,亦可以接入语音模块

文件说明

示例文件夹下包含camer_out,children,move_control三个部分,具体的操作手册将在docs里面说明,另外,还附上了相关的烧录文件,方面快速体验功能。 B站视频链接:https://www.bilibili.com/video/BV1qm4y1R7oC?spm_id_from=333.999.0.0

写在最后

本次项目开发历时三个月左右,前期在环境配置上面用了不少功夫,参考了许多开源社区的教程,欢迎与各位交流讨论,有任何问题,欢迎邮箱联系:158902477@qq.com 最后,希望鸿蒙和华为能够长足的发展下去,成为国家的脊梁,也能真正给人民的生活带来便利,提高国家的综合影响力和实力。

下面进行具体操作流程的展示

小车移动控制 3861

3861环境配置

方法一:借助小熊派开源社区提供的虚拟机镜像,直接进行开发(最简单) 链接: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

app开发和编译构建

udp开发示例介绍

socket()

sock_fd = socket(AF_INET, SOCK_STREAM, 0)) //AF_INT:ipv4, SOCK_STREAM:tcp协议

描述:

在网络编程中所需要进行的第一件事情就是创建一个socket,无论是客户端还是服务器端,都需要创建一个socket,该函数返回socket文件描述符,类似于文件描述符。socket是一个结构体,被创建在内核中。

sendto()

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热点的连接需要以下几步

  1. 通过 socket 接口创建一个socket,AF_INT表示ipv4,SOCK_STREAM表示使用tcp协议
  2. 调用 sendto 接口发送数据到服务端。
  3. 调用 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);
    
    }
    

编译调试

修改 BUILD.gn 文件

修改 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,将对于文件夹中文件全部放入 image.png 可以看到,对应文件中,move_control.c中调用了move_control.h,并在其中定义了小车的pwm调用函数,和对udp协议过来的数据的反应 image.png 另外在udp_test.c和sta_entry中设定了对应的通信程序,你可以在sta_entry中设置自己的WiFi和密码,以便连接自己的设备: image.png

如果你将修改对于的文件样式框架,请记得修改build.gn中对应的文件以来

另外在加入源代码之后,记得修改bearpi-hm_nano\applications\BearPi\BearPi-HM_Nano\sample中的Build.gn文件,注释掉对应app代码(该文件位于\陈欣宇_智慧儿童管家\dev\teamx\smart_children_housekeeper\code) image.png

摄像头图传 3516

项目在进行过程中,借助了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 方案二:离线语音模块

具体可参见对应模块的开发文档,只要实现对应的gpio变化控制即可。

最终效果

image