基于M5stack远程宠物投喂器

一、项目背景
随着我国社会经济的快速发展,人们的休闲消费和情感寄托方式也呈多样化发展。越来越多的人开始饲养猫狗成为休闲时的玩伴,人与宠物间的关系随着时间的流逝也日益浓厚。但是随着工作与生活的节奏越来越快,大部分人并没有充足的时间来照顾自己的宠物,有时甚至无法按时喂养自己的宠物。若碰上出差、旅游等无法携带宠物的情况,就只能将将宠物寄养或者一次性为宠物放置大量食物。长期以往,不仅会让主人提心吊胆,同时也会对宠物的健康造成不良影响。
同时近年来,物联网技术的发展已经非常成熟,利用局部网络或互联网等通信技术把传感器、控制器、机器、人员和物品通过新的方式联在一起,形成人与物、物与物相联,实现信息化、远程管理控制和智能化的网络。所以在这样的背景下,一个可以物联网远程控制投喂宠物食物的设备就显得尤为重要。

二、项目简介
远程宠物投喂器是一款物联网设备,可以帮助主人远程照料他的宠物。使用者可以事先向投喂器中装入一定量的宠物食品,投喂器可以在wi-fi连接下与远程设备通信,使用者可以和宠物语音交流,可以语音喊宠物进食。同时投喂器会利用红外和激光测距模块检测宠物靠近,打开喂食装置。满足了用户远程喂养宠物的需求,用户可以使用手机,通过网络控制宠物喂食。即便用户身在异地,出差多日,也可以很好的喂养宠物。

三、项目实施技术方案
1.项目技术路线
基于M5stack远程宠物投喂器_第1张图片
2.云服务器部分
远程宠物喂食器使用了阿里云提供的云服务器,服务器具有单核CPU,2GB内存,CentOS 7.3操作系统,可以较好的实现本项目的功能。在服务器主机上安装MQTT软件,来满足数据交换的要求。手机端APP发出指令上传到云端,服务器接收到指令后与硬件部分通信,从而实现喂食宠物与录音等功能。
服务器显示MQTT软件正常运行: 基于M5stack远程宠物投喂器_第2张图片
MQTT控制界面:基于M5stack远程宠物投喂器_第3张图片
3.硬件部分
远程宠物喂食器的M5部分主要实现了两个功能,一个是主体部分物联网功能,可以mqtt和手机端通信,实现播放语音和远程喂食功能,一个是本地录音功能,可以由主人在家时自行录音。
物联网功能实现,M5可以使用对应IP和端口登录云服务器。本地测试时,通过Apollo服务器,在局域网下实现电脑客户端mqttfx和M5通信。通信共有3个主题,control,speak和M5,分别负责手机控制喂食器动作,手机控制语音播放,M5反馈信息。M5订阅前两个主题,发布第三个主题,手机发布前两个主题,订阅第三个主题。为了保证设备一直在线,使用了定时器,在设备掉线后重连。
当M5订阅到control的消息后,根据消息内容是打开还是关闭喂食器,M5启动激光测距单元,根据测距结果判断宠物是否在喂食器面前,从而在合适的时机打开或者关闭喂食器。为了增加鲁棒性,M5会长时间多次检测,即使宠物当时不在喂食器面前,手机也只要按一次打开键即可,关闭键同理。这里原本方案是使用红外检测单元配合激光测距,但是红外检测延迟大,检测距离过长,不能准确反映宠物位置,故不再使用。打开和关闭喂食器使用了5V步进电机,在万用板上引出4条控制线来控制电机的转速和转向。制作了一个简易的喂食器开关模型,用来示意装置的动作。
当M5订阅到speak的消息后,根据消息内容判断播放哪一段录音,这里的播放的是事先存储的测试录音,使用者可以在本地录音功能中重新录音。录音功能的目的是用使用者的声音喊宠物进食,从而提高宠物对喂食装置的认同感。
当检测到宠物到来或者离开时,M5会发布M5主题的消息,通知使用者M5和宠物的当前状态。
本地录音功能的实现主要是sd卡的读取和I2S的使用。sd卡的相关操作在UIflow里列举得很清楚,但是I2S录制和播放wav文件需要自己写。原本安装了esp-idf,实现了I2S的使用,但是考虑到其他功能实现过于复杂,于是在mycropython里面实现了录音wav文件的功能,录音长度默认5秒,录音数量默认3个,可以通过按键选择录音存储在哪个存储栏内。M5自带扬声器和麦克风,因此录音操作可以在本地完成,使用者还可以在其他平台上录制音频,按照格式命名好存储在sd卡中,可以在M5上播放。还可以使用uart的录音模块,在本地获得质量更好的录音。
基于M5stack远程宠物投喂器_第4张图片
基于M5stack远程宠物投喂器_第5张图片
4.软件部分
APP采用eclipse软件编写,利用mqtt协议进行通信。可以通过开关指示灯来打开关闭app传输数据功能,通过右上角按钮可以打开mqtt配置界面,通过写入用户名,密码,IP地址,端口号等信息连接已经建好的阿里云服务器,通过订阅主题,实现远程接受来自已经连上云服务器的宠物投喂机传输的信息,通过发布control主题和speak主题,实现远程控制投喂机工作和播放录音。
首先是app界面的制作,利用app的一个开源代码,简单制作了页面的布局,加入指示灯,开关,发送数据编辑框,发送数据按钮,接受数据编辑框,接受数据按钮,形成app打开后最初始的样子,然后编写mqtt配置对话框,按右上的按钮后弹出,设置对话框的几个参数,用户,密码,IP地址,端口号,订阅主题,发布主题,初值设置为我们自己建立的阿里云服务器的信息,发布主题默认初值为control。然后编写默认按钮功能,如果按下默认按钮,则所有参数变为初始设定参数。编写确认按钮功能,将参数变为输入参数,同时设置一些警告,例如IP地址错误等,页面设计也就完成了。
之后在工程的AndroidManifest这个文件里面添加获取手机信息权限的代码,往sdcard中写入数据的权限,在sdcard中创建/删除文件的权限,访问网络的权限,写外部存储器,改变网络状态等等权限。
最后是mqtt连接设置,因为引用了mqtt的jar库,所以编写起来方便了很多,初始化MQTT配置,连接MQTT服务器,获取手机号IMEI号等一系列MQTT连接配置常用代码,然后对连接的一些情况进行处理等等,这里的连接超时时间设置为10秒,设置会话心跳时间,单位为秒,服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线。这里因为mqtt连接这些代码基本都大差不离,所以对代码部分不多介绍。

App初始界面:
基于M5stack远程宠物投喂器_第6张图片
通过下图红圈部分打开app发送接收数据功能。
基于M5stack远程宠物投喂器_第7张图片
通过点击右上角的符号,进入control/speak功能切换界面
基于M5stack远程宠物投喂器_第8张图片

修改红线处内容(control/speak)可以更改操作功能
基于M5stack远程宠物投喂器_第9张图片基于M5stack远程宠物投喂器_第10张图片

control功能,可以通过下图红圈部分发送eat/full指令给控制器,远程控制喂食器开始工作和停止工作。
基于M5stack远程宠物投喂器_第11张图片

speak功能,通过上图红圈部分,发送speak1/speak2/speak3三种指令,可以播放主人事先录好的三段录音,安抚宠物,招唤宠物吃饭。而喂食器在完成工作后,也会给app返回数据,数据显示在下图中的红圈处。
基于M5stack远程宠物投喂器_第12张图片

四、项目创新点
当前市场上关于宠物喂养的装置较少且功能单一,只是简单的固定时间喂食。用户长时间离开家后,无法实时喂养宠物。为了满足用户远程喂养宠物的需求,设计远程实时智能喂养系统。本系统的创新之处在于,用户可以使用手机通过网络控制宠物喂食。即便用户身在异地,出差多日,也可以很好的喂养宠物。同时可以播放主人的声音稳定宠物的情绪。真正意义上实现科学喂养宠物,让宠物的健康有保障。

五、总结
随着物联网技术的发展,万物互联的趋势逐渐显现,其中M5stack便是非常适合制作物联网相关设备的平台,本项目仅仅运用了其中的少部分功能。

源码分享

你可能感兴趣的:(基于M5stack远程宠物投喂器)