美文网首页Raspberry Pi
如何在树莓派中使用python和讯飞芯片发出语音

如何在树莓派中使用python和讯飞芯片发出语音

作者: 杜春旺 | 来源:发表于2019-09-28 22:42 被阅读0次

    1. 概述

    最近的项目中需要用到语音播报,本来在电脑上好好的用百度生成mp3然后用pysound播放,但是板子没有3.5mm的音频接口呢,只能另辟他法。

    音频的输出最后都是模拟量的输出而已,要不板子能输出模拟量,要不就是找一个芯片帮我输出模拟量。如果想自己输出模拟量,就只能用DA的gpio口。估计音频数字转模拟没有我想的那么简单吧,网上根本连这样想的都没有;剩下的就只能选择用讯飞芯片了,板子的串口输出到讯飞,让它合成语音模拟量并输出到音响。

    百度和google上的教程比较散也比较杂,没有太多干货,于是坑还是要自己踩,踩完的坑记录好过程,以备后用。

    2. 硬件实图

    先看看装好的实物图片,一个树莓派(pi3),一个XFS5152CE的开发板,一个手工音响。

    全图
    板子的细节图
    主板实物
    讯飞芯片的接线图
    讯飞芯片

    3. 接线图

    讯飞芯片

    如上面表示的几个接线点

    • pi(左1)-->讯飞(2),pi(右3)-->讯飞(1),给讯飞的板子供电。
    • pi(右4)-->讯飞(8),pi(右5)-->讯飞(10),串口的RXD<-->TXD是反接的,一边发一边接受。
    • 讯飞4,6接口接入音响的正负音频线,这个线序没什么讲究。

    开启串口

    硬件接好后,首先要开启树莓派的串口。这里有个概论要清楚就是树莓派的串口原来是给console用的,就是默认我们可以用串口工具当ssh来管理树莓派。所以我们要关闭管理功能而但一般的串口做通信用。

    关于这部分网上的教程也是什么都有,感觉现在抄袭的比较多,也不管对不对就发出来,还是蛮坑的。下面是我自己的方法(特指树莓派的pi3)

    • 进入首选项-->Raspberry Pi Configuration

    • 关闭Interfaces里的Serial Console并开启Serial Port

      串口
    • 打开sudo nano /boot/config.txt文件

      经过上一步的配置在config.txt最后一行可以看到已经添加了enable_uart=1

      在它的下面我们继续加上dtoverlay=pi3-miniuart-bt

      sudo reboot重启后GPIO14和GPIO15就可以用来连接串口通信了

    安装工具

    • 安装minicom

      Minicom是linux下一个非常轻便的串口调试工具,不过用法还是要学一下。因为轻便,安装就比较方便。

      打开终端,输入安装命令

      sudo apt-get install minicom
      

      安装好后,配置端口

      sudo minicom -s
      

      进入Serial port setup

      Serial port setup
      树莓派的串口默认名称为ttyAMA0,所以修改为/dev/ttyAMA0
      AMA0
      回车,回车,再保存
      save
      退出minicom
      exit
      退出之后要重新以十六进制方式打开
      sudo minicom -H
      
    • 使用echo发送数据

      echo是linux的输出命令如echo hello,echo也可以把数据输入到设备,因为这里我们用的是十六进制,所以用到echo的-e,-n参数。-e表示十六进制,-n表示最后不会自动加换行符。

      查看XFS5152CE的芯片开发指南,最简单的就是查看一下芯片的当前状态了

      状态
      在终端输入,用十六进制方式发送数据到ttyAMA0串口
      sudo echo -en "\xfd\x00\x01\x21" > \dev\ttyAMA0
      

      回车后,可以发现minicom收到4F表示芯片处于空闲状态

      再来一个语音播报的例子


      sound
      sudo echo -en "\xfd\x00\x0a\x01\x00\xbf\xc6\xb4\xf3\xd1\xb6\xb7\xc9" > \dev\ttyAMA0
      

      就可以听到动听的科大讯飞的声音了。

    编写代码

    有了上述的步骤之后,我们就可以动手写代码了,人生苦短,只能选python啊:smile:

    • 安装串口包

      这个估计也没得选择,我们只有一个包可以安装

      pip3 install pyserial
      

      当然也有教程说可以这样安装,但如果上面的成功就没有必要安装下面的了

      sudo apt-get install python3-serial
      
    • 编写代码

      直接给出代码,随便了点,并没有用class方法:smile:

      import serial
      try:
        portx="/dev/ttyAMA0"
        bps=115200
        timex=None
        ser=serial.Serial(portx, bps)
        result=ser.write(bytes.formhex("fd000a0100bfc6b4f3d1b6b7c9"))
        print("write len:", result)
        ser.close()
      except Exception as e:
        print("err:", e)
      

    运行效果

    运行享受最后的结果


    效果
    效果gif

    相关文章

      网友评论

        本文标题:如何在树莓派中使用python和讯飞芯片发出语音

        本文链接:https://www.haomeiwen.com/subject/fkqxpctx.html