2020-11-18 11:58:21 [显示全部楼层]
7403浏览
查看: 7403|回复: 7

[教程] 因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...

[复制链接]
            项目起源
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图6
  某一天,日常中午点外卖,送外卖的是一个聋哑人,他给我发了一个送到的短信就走了,我们的场所人还是比较多的,幸好我拿到了外卖,当时就在想,如果外卖被拿错了怎么办呢,送外卖的师傅会不会被投诉,怎么样才能帮助到聋哑人像正常人一样送外卖呢,从那天以后就一直在思考这个问题
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图16
如果有一种装置能够代替聋哑人打电话,这样会比发短信更加直接通知到客户,利用可以语音播报的机器和对方在电话里确认外卖送达的消息,作为创客奶爸的我就琢磨制作一个什么样的作品可以帮到他们
经过网络搜索,查找资料,目前市面上在售的帮助聋哑人沟通的产品大部分为手写板装置,能够代替聋哑人讲话的成熟产品并没有发现(也有可能是我搜索的方式不对)
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图17
继续相关的搜索,发现近几年已经有关于聋哑人手语识别的学术研究出现了,多以手势识别摄像头和手势识别手套的方式将聋哑人的手语转换成语音或文字
详细阅读文章得知由于手势控制的复杂性,目前这些产品仍处于研发阶段,支持的手语翻译的语言种类较少。对于许多其他不同国家的手语使用者来说,沟通壁垒依然存在
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图18
旺仔爸爸从网络还得知聋哑人是既不能听到别人讲话,自己也不能发声的,只有部分声带没有损害的聋人可以发声,通过骨传导的方式可以将自己发出的声音传到听神经,听神经再传给大脑,而且还了解到,上了年龄的聋哑人是不识字的,不过如果能够出来送外卖的话,基本的看图识字和使用手机等数码产品的能力应该是具备的,通过上述了解,视觉识别和手势识别对于旺仔爸爸目前的技术能力还实现不了,旺仔爸爸综合考虑自己的能力后,将满足聋哑人电话通讯场景需求的装置的实现想法大致确定为:制作一个提前建立好送外卖常用语语料库的语音助手装置,聋哑人可以利用语音助手装置与客户进行对话,聋哑人想要知道对方说了什么内容可以通过语音助手的显示屏幕查看信息,如果要进行回话可以将内容通过手写输入的方式发送至语音助手,这样语音助手就承担了一个传话筒的角色
所以我们项目的名字定为——《因一次点外卖的经历“传话筒”》,当然本次作品除了满足送外卖的需求外,还具备智能语音对话功能,就像天猫精灵,小爱同学那样
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图1
  接着,我们开始尝试使用什么样的方式去实现上述想法,语音合成和语音识别技术是实现这个项目的关键,利用本地的算法识别显然需要强大算力的设备,对于旺仔爸爸而言还是网络云计算实现起来比较妥当,尝试了几种能够实现语音对话的平台,经过多次比较后,最终选用了树莓派通过百度AI开放平台实现可以满足普通人与机器人智能对话的功能和特殊群体聋哑人送外卖沟通交流的功能
我们先通过视频来了解一下这个作品
视频演示
  旺仔爸爸做的这个作品可能还有很多不足之处,但旺仔爸爸的出发点之一是希望通过一个作品引起大家对这类特殊人群的关注,共同思考如何帮助他们
下面旺仔爸爸详细介绍一下本次项目的制作过程,感兴趣的伙伴可以一起迭代完善(文章建议阅读时间15-20min)
确定制作方案
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图20
关键词:树莓派,python,多线程,语音识别技术,物联网,AI人工智能,激光造物
    首先我们先来了解一下项目制作的大体流程,语音助手主要有两种模式,普通用户可以选择智能对话模式,聋哑人特殊群体可以选择送外卖模式(送外卖模式为根据送餐时的语境自建的语料对话库,语料库可以不断的丰富)
两种模式都分为四个步骤:采集信息,识别信息,处理信息,反馈信息,在送外卖模式下会稍有不同,需要送餐员先拨通客户电话,再利用机器语音播报的方式与客户进行对话
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图19
下图为两种模式下四个步骤实现流程的思维导图
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图21
接下来我们对语音助手(传话筒)实现的每个步骤进行详细讲解
要完成这几个步骤,首先需要确定主控
为了能够满足声音采集,音频播放,物联网,GPIO控制,我们选择了树莓派(3B及以上)作为语音助手的主控,树莓派很早之前就玩过几次,都是把它当作一个mini电脑的功能来使用的,并没有尝试它的联网、爬虫、计算的功能,本次开发过程又从烧录系统卡开始重新做了一遍,对linux有了更深入的了解
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图3
什么是树莓派呢,简单理解,树莓派就是一个和信用卡差不多大小的小型电脑,而且是全世界第三大畅销的计算机!是基于ARM的单板计算机,默认运行一款称为Raspbian的操作系统,它是基于Linux内核和Debian操作系统开发的开源操作系统。操作系统被装载在一张TF卡上,由USB供电。你只需要再连接上鼠标、键盘和显示器或者电视机,就可以进行基于Linux操作系统的程序设计了
树莓派诞生在2012年,由注册于英国的慈善组织“RaspberryPi 基金会”开发和维护,其设计初衷是用来教孩子们学习程序设计的低成本计算机。至于它的名字,老外比较喜欢用水果给项目起名字,派来自于它第一次跑的是python代码,取了python/“派森”的谐音“派”或“pi”
当然本次项目也可以选择创客教育领域比较火的虚谷号
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图23
虚谷号很早之前就入手了,但一直没有使用,有了树莓派的经验,上手虚谷号应该不难,于是在树莓派尝试成功后,开始移植虚谷号的程序,最终发现只能录音和播放,完整程序还没有调试成功,感兴趣的伙伴可以移植本项目的内容,旺仔爸爸后面也会继续尝试虚谷号来实现本次的项目
主控确定了以后,第一步就是给树莓派烧录系统,由于篇幅的原因旺仔爸爸把树莓派烧录的工作放在文末,如果是树莓派的老手可以跳过此步骤哦,新手的话还是要熟悉一下这个流程,对于后面的程序安装库文件是有帮助的
树莓派的准备工作系统烧录及配置
见文末
声音采集模块
声音的采集在硬件上我们使用下图这种外置麦克风来实现声音的录入
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图22
软件程序上我们使用【pyaudio】库函数实现录音,【wave】库函数实现存储音频文件
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图24
播放的模块
音频的播放在硬件上我们使用外置音响播放
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图125
软件程序上我们使用【pydub】库函数实现播放音频文件
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图124
当然麦克风和音响都是通过3.5mm音频头通过usb外置声卡与树莓派usb连接的
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图126

HDMI
显示屏和3.5寸触摸屏幕的切换
如需启用HDMI输出,需执行以下命令,树莓派会自动重启。再等待约30秒,HDMI显示屏开始显示
cd LCD-show/
sudo ./LCD-hdmi
如需切换回LCD显示方式,则需执行以下命令:
cd LCD-show/
sudo ./LCD35-show
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图127
对话功能模块
对话模块采用百度AI平台的UNIT智能对话技术(使用该功能前需要做些注册申请的准备工作,后面会详细讲解)
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图129
语音识别及合成的模块
识别模块采用百度AI平台的语音技术
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图128
调用百度进行语音识别及语音合成的程序如下图
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图130
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图131
显示的模块
显示模块使用python3自带的GUI界面【tkinter】库函数,为了让GUI界面和语音助手同时运行,程序中还涉及到了多线程【threading】库函数,【tkinter】图形化是比较古老的一种界面,其实还可以尝试更漂亮的第三方库,比如PyQt、wxPython等
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图133
多线程【threading】和【tkinter】程序如下图
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图132
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图134
在语音识别平台方面尝试过图灵,讯飞,百度,青云,思知等平台,最后确定选择百度,因为百度响应快,对话比较顺畅还免费,其他的要么收费,要么运行不流畅
图灵平台,网址如下有兴趣的伙伴可以去尝试一下,免费额度比较少
http://www.turingapi.com/
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图135
讯飞,网址如下,1个月免费,功能强大
https://www.xfyun.cn/services/voicedictation
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图4
青云,目前免费使用,有时候响应速度会比较慢,只是用来学习的话够用了
http://api.qingyunke.com/
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图25
思知,和青云平台类似,目前免费使用,响应速度有时会比较慢,适合学习使用
https://www.ownthink.com/
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图26
下面是青云平台和思知语音平台的尝试过程,通过两个平台实现相互对话交流
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图27
下面是思知和青云平台对话的python程序,在PC端就可以运行,感兴趣的可以学习体验一下
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图144
这两个平台单纯的用来学习其实完全够了,但要做一个小项目还是相对稳定一点比较好,最后选择免费时限和免费额度都比较久的百度AI开放平台(另外腾讯云,华为云,阿里云的服务没有尝试,有兴趣的伙伴可以去试试)
所有模块介绍完毕后,接下来终于到了制作阶段了
展开制作硬件清单
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图28
树莓派3B*1(包含micro sd卡)
18650供电模块*1
喇叭*2
功放*1
usb带线声卡*1
外置麦克风*1
3.5寸音频头*1
磁感应传感器*1
微动开关*1
1K电阻*1
开关*1
DC接头*1
3.5mm音频延长线*1
12mm磁铁*1
杜邦线若干
3.5寸屏幕*1(可选)
3mm椴木板*1(40*60)
五金若干
图纸设计
本次作品主题是语音助手(传话筒),因为有通话模式,所以决定使用一个有复古造型的电话机为主体结构,由听筒、支架和电话主机组成,缺点是不便携,后续可以迭代更便捷的版本,作品效果图如下
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图30
下图为使用cad软件设计好的图纸,可以看出由于lasermaker软件原因导入的部分曲线显示不全,不过这是一个小问题,并无大碍,用曲线工具补全就好了
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图29
下图为切割好的结构实物
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图31
电路设计
本次作品的电源采用了一个可以提供5V2A的18650电池模块,麦克风和音响通过usb声卡与树莓派usb接口连接
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图32
下图为树莓派40个GPIO引脚图,我们程序中使用的GPIO库用到的是中间一列物理引脚BOARD编码(根据python库函数来决定使用哪种形式的编码),微动开关需要制作一个下拉电阻连接GPIO37引脚,磁感应传感器连接GPIO36引脚
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图33
组装制作
首先是拾音的听筒安装,主要装置就是一个有拾音功能的麦克风,安装在听筒上,由于和主控距离较远,而且为了听筒拿取方便,需要增加一根3.5mm的音频延长线,然后预埋在切割好的听筒结构中
下图是一个很久之前买的一个外置麦克风,能用,质量一般般,优点是便宜,但有一个问题就是接头的部位是直角弯,体积太大了,需要进行魔改
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图136
于是把线头外壳剥离,重新焊接了新的3.5mm音频头,线路处理好后就可以进行听筒外壳安装了
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图137
听筒的外壳总共有5层,中间3层是镂空的,为了连接线路使用,前后两层为面板,起到封装美观的作用
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图138
安装完成后如下图所示,在提前设计好的固定孔中安装3mm螺丝,加强固定
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图139
接着,是听筒放置的架子安装,这一步非常的简单,按下图装配即可
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图140
要注意的细节是,我们需要在听筒的架子上安装一个微动开关,起到选择程序的作用,当听筒放置在架子上时正好可以触发开关,这里的微动开关做了一个下拉电阻来保持信号稳定(下拉电阻的连接方式可以看前面的接线图)
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图141
装配方法是,利用两颗M2的螺丝固定在预先设计切割好的孔位中
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图142
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图2
架子和听筒安装好后的样子如下图所示
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图143
接下来是电话主机的安装,为了造型更加美观,在四个角增加了复古的造型结构,安装方式如下
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图5
在壳体的前面板上放置两个支架,用来安装拨号转盘,壳体前面板圆孔用来走线
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图7
拨号盘分为两层,上面一层设有圆孔可以看到下面一层圆盘上的数字,下面一层正面是数字,背面是磁感应传感器
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图8
两层转盘通过螺丝固定
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图9
磁铁安装后的样子如下图所示
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图10
后面的壳体安装开关和电源充电接口
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图11
接下来是播放单元,喇叭的安装,本次作品使用的喇叭为以前购买台式机电脑赠送的小音箱,丢了舍不得,正好拿来用在这个小项目中,把有用的部分拆解出来,原来的壳体就不用了
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图13
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图12
播放单元和拾音听筒与usb声卡连接在一起
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图14
然后,usb声卡和喇叭功放的电源连接到树莓派的usb接口中,接着将供电模块、微动开关和磁感应开关与树莓派连接,由于要安装3.5寸屏幕,所以两个传感器的VCC正极引脚接线只能从GPIO引脚的背面焊接了
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图15
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图35
下图为喇叭安装在外壳上的样子
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图34
下图为最后组装完成的样子
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图36
从图中可以看出树莓派的屏幕并不能很好的安装到位,是因为设计之初没有考虑周全,树莓派接上USB后尺寸已经超范围了,需要改进结构,将树莓派的屏幕整体向右边移动,留出USB接线的空间,改进后的样子如下图所示
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图37
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图38

程序设计
本次作品程序调试使用的树莓派系统自带的【thonny】编程环境,当然你也可以使用【python3 IDLE】来完成程序调试运行
在程序设计开始之前,我们需要先理一下思路,为了帮助聋哑人群体,我们需要做一个装置,可以代替聋哑人打电话,为了让聋哑人自己能够知道对方说了什么内容,可以从装置的屏幕中看到信息,常人可以使用这个装置的智能对话功能
从上面的描述我们可以知道装置有两种功能,送外卖模式和智能对话模式,不同的群体选择不同的模式
下面的思维导图为实现的全部的过程
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图40
采集信息&识别信息
想要实现语音识别和语音对话功能需要先在百度AI开放平台做一些准备工作
百度语音准备工作
1、登陆百度云账号(login.bce.baidu.com),如果是第一次使用百度云,需要先进行注册,可以使用百度网盘账号
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图39
左侧【产品服务】菜单可以看到本次我们需要使用到的【语音技术】、【智能对话智能对话与服务平台UNIT】功能,如下图所示,首先我们点击【语音技术】进行设置
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图41
点击语音技术后会看到下图的界面,我们点击【创建应用】
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图42
接着给创建的技能设置名称,选择接口为默认,语音包名选择不需要,应用归属个人,进行简单的应用描述后点击立即创建
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图43
创建完毕后可以点击返回应用列表,也可以点击查看文档学习调用的方法
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图44
点击返回应用列表后可以看到如下列表信息,其中【AppID】、【APIKey】、【Secret Key】是程序中调用需要的信息
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图45
这里需要注意一点的是,【语音技术】功能需要点击左侧概览菜单,在所列出的菜单中选择自己需要的功能点击立即领取才能获得免费额度,比如【短语音识别】功能,否则程序会调用不成功
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图46
接着我们点击左侧产品服务,选择【智能对话与服务平台UNIT】功能
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图47
选择【智能对话与服务平台UNIT】功能后,我们可以看到如下界面,首先需要点击创建应用
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图48
接着设计应用名称,应用类型,接口选择UNIT和语音技术,语音包名不需要,描述应用后点击立即创建
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图50
创建完毕后可以点击查看文档学习使用的方法
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图49
点击返回应用列表可以看到已经创建好的应用,其中【AppID】、【APIKey】、【Secret Key】是程序中调用需要的信息
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图51
接下来我们需要点击左侧的UNIT配置平台来配置智能对话技能
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图52
点击之后页面会跳转到如下界面,我们接着点击进入UNIT(如果需要登陆,登陆百度云账号就可以)
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图53
然后点击新建技能
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图54
选择对话技能
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图55
设置技能名称,点击创建技能
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图56
之后就可以看到已经新建好的技能了,技能ID是有用的信息
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图57
接着点击我的机器人菜单
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图58
点击+号增加机器人
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图59
创建机器人名称,对话流程选择【技能分发】,接着点击创建机器人
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图60
之后可以看到下面已经新建好的机器人,机器人的ID是有用的信息
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图61
然后点击机器人进入如下界面,我们需要给机器人添加技能
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图62
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图63
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图64
点击左侧的对话可以进行线上技能对话测试
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图65
到此为止我们的百度AI的准备工作就完成了
接下来安装python库文件可以参考下面的思维导图
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图67
下面是程序的具体讲解
程序初始化
需要提前安装好各种库函数
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图66
语音录制
使用【pyaudio】库函数录制音频,使用【wave】库函数保存音频文件
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图68
百度云语音识别
百度云调用的三个参数【AppID】、【API Key】、【Secret Key】是关键数据
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图69
百度语音合成输出
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图70
请求百度unit智能对话
机器人ID和技能ID需要提前申请
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图71
提取有用信息
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图73
多线程
这里需要调用多线程【therading】库函数
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图72
子线程包含两种对话模式
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图76
主程序(tkinter图形化界面)
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图75
在树莓派上的运行结果如下图
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图74
送外卖模式
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图77
智能对话模式
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图78
到此为止,所有功能都介绍完毕,下面我们讲个故事
讲个故事
    本次语音助手(传话筒)的项目从7月份开始有想法,开始构思到制作完成,大概经历了三个多月的时间,时间主要花在想法构思和程序调试上,制作过程踩了很多的坑,从最初的系统烧录开始,印象最深刻的是,在树莓派切换显示器和3.5寸触摸屏幕的时候,【sudo ./LCD-show】一条指令下去,直接导致系统卡死进不去了,然后花了两个晚上重新烧录系统,从头加载各种库,调试程序,欣喜若狂调试成功后,开始设计外壳了,第二天就想着把树莓派带着去上班,白天有空也可以设计图纸,可惜白天没找到时间,晚上悲剧的事情又发生了,树莓派开机上电,一点反应都没有,红灯常亮,绿灯有规律的频闪四次,怀疑系统卡坏了,心情有点悲愤,又要把前两天的工作再来一遍,不愿意接受这个事实,于是拿出来一张新的sd卡,重新烧录系统,很快烧录完毕发现问题依旧,看来不是系统卡的问题,测量电源电压也正常,更换电源问题还是依旧,网络查找问题,说是系统卡未进去,这下怀疑是sd卡槽坏了,可能是放包里挤压到了,于是这东西修理不值得,上闲鱼看看吧,花了125元买来一块二手的,成功用到现在,从这个故事看出,在研究的过程中,遇到问题是很正常的,失败也是难免的,但失败其实只是一个结果,一个现象,不能被结果打击到没有信心,并且要客观的看待这件事情,虽然没有成功,其实在过程中你已经积累了大量的经验了,相信以后再遇到这种问题你会觉得都是小菜一碟,显然客观的评价对自己能够坚持下去有很关键的作用,千万不能放弃,而且要调整好心态,冷静思考,用什么样的方法查找可能存在的原因,才是解决问题的根本办法




树莓派的准备工作硬件准备
1.    树莓派3B/3B+/4,任何一款都可以
2.    micro sd卡(16G及以上,建议class10)
3.    5V2A micro usb电源
4.    笔记本电脑
5.    键盘鼠标,显示器(可选)
软件准备
下载树莓派常用工具
获取方法:旺仔爸爸造物社公众号回复关键字:树莓派常用工具
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图79
常用工具中共有三个文件夹:001基本工具、002树莓派Raspbian系统、常用文件

·     001:基本工具:包括镜像烧录工具、局域网IP扫描器、远程文件传输工具 FileZilla、文本编辑器Notepad++、远程ssh工具putty、SD卡格式化工具 SD Formatter
逐个安装基本工具里的软件:notepad++、putty、VNC-Viewer
·      因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图80
·     002:树莓派官方操作系统Raspbian
·     003:开机常用文件,包括ssh空文件和wifi配置文件
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图81
烧录准备


我们树莓派运行的是linux系统,系统是烧录在一张microSD卡中的,常用的系统有Raspbian、Ubuntu等,
可以在树莓派网站下载喜欢的操作系统,推荐镜像下载地址:raspberrypi.org/downloads
本次我们以Raspbian系统为例进行烧录演示
首先拿到SD卡后通过读卡器插入电脑usb,如果用的是旧的SD卡,需要用到001文件夹中的SDFormatter格式化工具进行格式化。如果用新的SD卡可以跳过此步。
格式化SD卡:
1.    启动格式化软件,选择需要格式化的盘符

因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图82
2.点击格式化,点击确认

因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图83
再点击确定
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图84

第一次会失败
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图85
重复上述步骤再来一次

因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图86
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图87
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图88
格式化成功后会出现如下boot盘符,可以看到SD卡对应的盘变成了空盘。

因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图89


SD卡中烧录树莓派系统
烧录系统
002文件夹中为已经下载好的系统镜像文件,你也可以到树莓派官网下载其他版本的系统镜像文件
打开001文件夹中的镜像烧录工具Win32DiskImager(或者另一个镜像烧录工具balena-etcher)
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图90
选择002文件夹中的镜像文件和要烧录的SD卡对应的盘

SD卡对应盘符号的时候一定要小心,不要选到其它盘或者硬件,不然镜像可能会覆盖写到其它盘里。
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图92
然后点击write,点击yes,开始烧录

因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图91
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图93
等待5-10分钟烧录完成
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图94
烧录成功之后,点击ok

因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图95
再次询问是否格式化,点击取消格式化

因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图96
点击确定

因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图97
之后可以在boot中看到如下文件

因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图100
将空白的ssh文件放入SD卡的boot

鼠标右击创建一个空白记事本.txt文件,命名为ssh,重命名,删掉.txt扩展名。将这个文件放入SD卡的boot盘中。
003文件夹中创建好了ssh文件,可以直接把这个文件复制到SD卡的boot盘中。

因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图98
配置wifi文件,放入SD卡的boot

用同样的方法新建一个空白文件wpa_supplicant.conf(注意要删掉扩展名.txt)
用已经安装好的文本编辑器notepad++打开wpa_supplicant.conf,输入以下配置,可以用多个network{}来配置多个wifi:
比如我家里的Wifi叫guoli,wifi密码是13141516,手机热点的WiFi叫guoli,Wifi密码是13141516,就可以这样写。
priority表示几个wifi同时都搜得到的时候优先连接哪个,数字越大优先级别越高
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图99
将ssh空白文件和wpa_supplicant.conf文件放入SD卡的boot盘中。

因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图101
树莓派开机


通电启动
从电脑上拔出SD卡,插入树莓派,如果有显示屏插好HDMI显示屏线和电源线,通电,如果是老显示器,还需要一个VGA转HDMI的转接线,或者用家里的电视机也可以
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图103
树莓派上的红灯常亮,表示通电。绿灯间歇性亮,表示读写SD卡。

给树莓派通电,如果绿灯闪烁,屏幕上显示出树莓派的logo,说明操作系统正常。
获取树莓派ip的几种方法
知道了树莓派ip地址,就可以用我们的笔记本电脑远程登录树莓派,有很多种方法可以直接获取树莓派的ip地址:
1.    如果树莓派连接到了显示屏上,可以直接鼠标指向右上角网络图标,ip地址会自动显示

因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图102
2.如果树莓派连接到了显示屏上,可以打开树莓派命令行窗口,输入ifconfig

因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图104
3.如果没有显示屏,用手机连到与树莓派同一个网络的wifi下,打开苹果手机APPdataplicity应用上扫描出树莓派的ip地址

4.如果没有显示屏,用电脑连到与树莓派同一个网络的wif或者有线网络下,在电脑上打开局域网ip扫描器,扫描出树莓派ip地址
5.查看开wifi的路由器后台配置界面,找到树莓派,查看ip地址
远程登录树莓派
现在,可以通过远程ssh工具putty远程登陆树莓派了。
例如,如果树莓派的ip地址是192.168.31.239
首先双击打开putty软件
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图105
输入ip地址,端口22,ssh类型,也可以在左侧APPearance修改字体大小等操作,在右侧保存,下次登陆时可以直接点击进入,省去每次输地址的烦恼

因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图106
输入账号pi,密码raspberry,默认密码是不显示的,不要以为自己输错了,放心大胆的输就好了

因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图107
登陆成功如下图所示,现在就可以通过命令行来远程操控树莓派了

因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图108
换源:将下载源从树莓派默认国外源切换到国内清华大学开源软件镜像站


这里简单解释下什么是软件源,以及为什么要更换软件源。
软件源是指 debian 系操作系统的应用程序安装包仓库,很多的软件都会这收录到这个仓库里面。而树莓派的 raspberrypi 操作系统也是基于debian 的,所以树莓派也有自己的软件源,用来收录各种树莓派应用程序。
默认情况下,树莓派软件源地址是http://archive.raspbian.org/,位于欧洲,在国内访问是非常慢的,经常只有几 k 每秒的下载速率。所以我们在玩转树莓派之前,强烈推荐替换成国内的软件源。
树莓派的所有软件源地址可以从这里找到:https://www.raspbian.org/RaspbianMirrors
一般我们找个国内的就行了,比如清华大学开源软件镜像站。(下图表格的第一行)
为什么叫镜像,是因为镜像站每隔一段时间(几分钟)便会使自己和国外源保持同步,维持和国外源一模一样的软件资源列表,就像照镜子一样。
本文将在树莓派上配置apt-get包管理器的镜像和python第三方库下载工具pip的镜像到国内镜像站,除此之外,node.jsnpm等众多编程语言也可以设置国内镜像。
除了清华大学开源软件镜像站之外,还有很多国内镜像站,比如阿里云、同济大学、重庆大学、中科大、豆瓣、淘宝等。
Raspbian的包管理器apt-get换源
在树莓派的命令行界面输入如下指令,按回车键
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图109
sudo nano /etc/apt/sources.list
sudo 是指用系统管理员权限启动,nano 是树莓派内置的轻量文本编辑器,而 /etc/apt/sources.list 就是软件源的配置文件地址了。
使用键盘方向键控制,在第一行开头加一个#,把下面的内容拷贝到最后一行之后,如图中的效果:
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图110
先按键盘上的ctrl+o,再按回车保存,再按ctrl+x退出nano编辑器回到命令行界面。
同样的方法,把 sudo nano/etc/apt/sources.list.d/raspi.list 文件也替换成下面的内容:
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图111
至此,树莓派软件源就替换好了。是不是很简单,就改两行配置即可。

最后,你可以试下执行 sudo apt-get update,会发现更新速度快了很多。
可以更新到清华大学镜像源最新的软件列表。
sudo apt-get update
这个命令,会访问源列表里的每个网址,并读取软件列表,然后保存在树莓派本地。
以上步骤实现了Respbian的包管理器apt-get换源到清华大学软件镜像站,并更新了软件列表,今后在树莓派命令行中执行sudo apt-get install 软件名时便会自动从清华大学开源软件镜像站高速下载。
Python的第三方模块安装工具pip换源方法一:一行命令换源
清华大学开源软件镜像站官方推荐方法,但该方法在树莓派上可能会失效。
只需树莓派命令行中输入下面这一行命令,即可永久设置pip下载源为国内源
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
注意:是https而不是httpsimple不能少
方法二:配置换源脚本
该方法在树莓派上亲测有效
在树莓派的命令行中依次输入运行以下三个命令
sudo mkdir ~/.pip
cd .pip
sudo nano pip.conf
在打开的文件中输入以下内容:
[global]
timeout = 10
index-url = http://mirrors.aliyun.com/pypi/simple/
extra-index-url= http://pypi.douban.com/simple/
[install]
trusted-host=
  mirrors.aliyun.com
  pypi.douban.com
先按键盘上的ctrl+o,再按回车保存,再按ctrl+x退出nano编辑器回到命令行界面。
树莓派内部配置
打开树莓派命令行界面输入命令,进入树莓派配置界面。
sudo raspi-config因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图112
用上下键和左右键切换光标位置。

因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图113
第一行:ChangeUser Password修改密码

按照里面的要求修改成自己的密码即可。默认用户名为pi,密码为raspberry
这个密码会用于远程ssh登陆、VNC远程桌面及需要管理员root权限时输入。
第四行:LocalisationOptions选择地区
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图114
第一行:Change Locale选择所在国家

这是一串很长的列表,到这个列表的最下面,让光标指在zh_CN.UTF-8 UTF-8前面,先按空格,再按回车,回到之前的界面再按回车。

因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图115
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图116
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图117
重新选择第四行Localisation Options
第二行:Change Timezone选择所在时区
选择Asia,再选择Shanghai,回车确定。
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图118
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图119
第四行:Change Wi-fi Country选择wifi国家
选择CN China,回车
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图120
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图121
第五行:InterfacingOptions开启功能
建议下面几个都打开

因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图123
Camera:摄像头
SSHssh远程通信与登陆
VNCVNC远程桌面登陆
Serial:串口控制
Remote GPIO:远程GPIO引脚控制
第七行:Advanced Options高级设置
因一次点外卖的经历成就的“传话筒” ——基于树莓派的A...图122
·     选择Expand Filesystem,将根目录扩展到这个SD卡,充分利用SD卡的存储空间
·     选择Overscan,在整个屏幕上显示
·     选择Audio,选择Force 3.5mm('headphone'jack),树莓派的声音会从耳机孔输出
·     选择Resolution,选择默认设置,自动根据显示屏调整分辨率
·     选择Pixel Doubling,增加桌面显示画质
选择Finish,会跳出对话框问是否重新启动,可以直接回车确定重启,也可以等下次启动时候生效。
安装中文字体及输入法

打开树莓派命令行,输入以下命令
sudo apt-get install fonts-wqy-zenhei
这行命令里的sudo表示使用管理员root权限,apt-get表示使用apt-get包管理器来下载,install表示下载安装,fonts-wqy-zenhei表示软件名字。之后所有的sudo apt-get install 软件名都表示这样的意思。
接下来,安装中文输入法fcitx及Google拼音输入法(大约需要五分钟)
sudo apt-get install fcitx fcitx-googlepinyinfcitx-module-cloudpinyin fcitx-sunpinyin
在跳出的对话框中输入y和回车↩,确定下载安装,需要90MB存储空间。

安装成功之后,会在下一次重启时生效。
在树莓派上可以使用ctrl+空格切换为中文输入法。
升级所有安装的软件
运行下面这行命令,会把本地已安装的软件,与刚下载的软件列表里对应软件进行对比,如果发现已安装的软件版本太低,就会提示你更新。执行这行命令可能需要很长时间。
sudo apt-get upgrade
我们刚刚还运行了sudo apt-get update命令,现在运行sudo apt-get upgrade命令,有什么不同呢?
答:update仅仅是从下载源获取并更新可下载软件列表,相当于更新索引地图。而upgrade是更新软件本身。后者要花费多得多的时间





总结
    虽然本次作品的功能完全实现了,但在还存在很多不足:
1.体积上还存在很大的改进空间,可以使用体积更小的树莓派zero制作便携的作品
2.本次项目是需要连接网络的,在室内有网络的环境是方便使用的,如果要符合送餐员的室外场合,需要以手机热点的方式让语音助手连接网络,后续可以尝试更方便的联网方式或者是本地算法实现
3.让作品在真实的场景中实践验证,根据真实的场景丰富语料库
4.本次作品没有实现最开始设想的手写输入回话的功能,可以再继续尝试改进
5.增加多国语言的版本(百度提供这个功能)
    从本次作品在制作过程中还受到启发,项目开始前需要详细的查阅资料,不仅仅是技术实现方面的知识,所涉及到的各个领域都需要了解,不能想当然,这一点需要在以后的制作过程中注意,还要感谢光光老师的及时提醒,让作品得以改进迭代,总之需要细心谨慎的走好每一步,才能有完整的作品呈现,
造物让生活更美好,希望有更多想法的伙伴能够和旺仔爸爸一起交流迭代
更多精彩内容请关注旺仔爸爸造物社,联系请加18752544995


CVix0XLS  学徒

发表于 2020-11-19 09:38:08

增长一下见识
回复

使用道具 举报

gada888  版主

发表于 2020-11-21 13:11:35

不错
回复

使用道具 举报

rzegkly  版主

发表于 2020-11-22 08:14:21

爱心与技术的结合,很好的文章,学习
回复

使用道具 举报

Mr Guo  初级技神
 楼主|

发表于 2020-11-23 01:03:56

rzegkly 发表于 2020-11-22 08:14
爱心与技术的结合,很好的文章,学习

谢谢康老师
回复

使用道具 举报

RRoy  超级版主

发表于 2020-11-23 11:21:12

老师很用心!
回复

使用道具 举报

Mr Guo  初级技神
 楼主|

发表于 2020-11-24 16:47:15


谢谢你
回复

使用道具 举报

TuTu  高级技师

发表于 2020-12-9 13:53:48

有温度的设计~!看完帖子留意了一下真的遇到了聋哑外卖小哥 拿外卖的时候除了说谢谢也多给些微笑吧~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail