如何在樹莓派中使用python和訊飛芯片發(fā)出語(yǔ)音

1. 概述

最近的項(xiàng)目中需要用到語(yǔ)音播報(bào),本來(lái)在電腦上好好的用百度生成mp3然后用pysound播放,但是板子沒(méi)有3.5mm的音頻接口呢,只能另辟他法。

音頻的輸出最后都是模擬量的輸出而已,要不板子能輸出模擬量,要不就是找一個(gè)芯片幫我輸出模擬量。如果想自己輸出模擬量,就只能用DA的gpio口。估計(jì)音頻數(shù)字轉(zhuǎn)模擬沒(méi)有我想的那么簡(jiǎn)單吧,網(wǎng)上根本連這樣想的都沒(méi)有;剩下的就只能選擇用訊飛芯片了,板子的串口輸出到訊飛,讓它合成語(yǔ)音模擬量并輸出到音響。

百度和google上的教程比較散也比較雜,沒(méi)有太多干貨,于是坑還是要自己踩,踩完的坑記錄好過(guò)程,以備后用。

2. 硬件實(shí)圖

先看看裝好的實(shí)物圖片,一個(gè)樹莓派(pi3),一個(gè)XFS5152CE的開(kāi)發(fā)板,一個(gè)手工音響。

全圖

板子的細(xì)節(jié)圖
主板實(shí)物

訊飛芯片的接線圖
訊飛芯片

3. 接線圖

訊飛芯片

如上面表示的幾個(gè)接線點(diǎn)

  • pi(左1)-->訊飛(2),pi(右3)-->訊飛(1),給訊飛的板子供電。
  • pi(右4)-->訊飛(8),pi(右5)-->訊飛(10),串口的RXD<-->TXD是反接的,一邊發(fā)一邊接受。
  • 訊飛4,6接口接入音響的正負(fù)音頻線,這個(gè)線序沒(méi)什么講究。

開(kāi)啟串口

硬件接好后,首先要開(kāi)啟樹莓派的串口。這里有個(gè)概論要清楚就是樹莓派的串口原來(lái)是給console用的,就是默認(rèn)我們可以用串口工具當(dāng)ssh來(lái)管理樹莓派。所以我們要關(guān)閉管理功能而但一般的串口做通信用。

關(guān)于這部分網(wǎng)上的教程也是什么都有,感覺(jué)現(xiàn)在抄襲的比較多,也不管對(duì)不對(duì)就發(fā)出來(lái),還是蠻坑的。下面是我自己的方法(特指樹莓派的pi3)

  • 進(jìn)入首選項(xiàng)-->Raspberry Pi Configuration

  • 關(guān)閉Interfaces里的Serial Console并開(kāi)啟Serial Port

    串口

  • 打開(kāi)sudo nano /boot/config.txt文件

    經(jīng)過(guò)上一步的配置在config.txt最后一行可以看到已經(jīng)添加了enable_uart=1

    在它的下面我們繼續(xù)加上dtoverlay=pi3-miniuart-bt

    sudo reboot重啟后GPIO14和GPIO15就可以用來(lái)連接串口通信了

安裝工具

  • 安裝minicom

    Minicom是linux下一個(gè)非常輕便的串口調(diào)試工具,不過(guò)用法還是要學(xué)一下。因?yàn)檩p便,安裝就比較方便。

    打開(kāi)終端,輸入安裝命令

    sudo apt-get install minicom
    

    安裝好后,配置端口

    sudo minicom -s
    

    進(jìn)入Serial port setup

    Serial port setup

    樹莓派的串口默認(rèn)名稱為ttyAMA0,所以修改為/dev/ttyAMA0
    AMA0

    回車,回車,再保存
    save

    退出minicom
    exit

    退出之后要重新以十六進(jìn)制方式打開(kāi)

    sudo minicom -H
    
  • 使用echo發(fā)送數(shù)據(jù)

    echo是linux的輸出命令如echo hello,echo也可以把數(shù)據(jù)輸入到設(shè)備,因?yàn)檫@里我們用的是十六進(jìn)制,所以用到echo的-e,-n參數(shù)。-e表示十六進(jìn)制,-n表示最后不會(huì)自動(dòng)加換行符。

    查看XFS5152CE的芯片開(kāi)發(fā)指南,最簡(jiǎn)單的就是查看一下芯片的當(dāng)前狀態(tài)了

    狀態(tài)

    在終端輸入,用十六進(jìn)制方式發(fā)送數(shù)據(jù)到ttyAMA0串口

    sudo echo -en "\xfd\x00\x01\x21" > \dev\ttyAMA0
    

    回車后,可以發(fā)現(xiàn)minicom收到4F表示芯片處于空閑狀態(tài)

    再來(lái)一個(gè)語(yǔ)音播報(bào)的例子


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

    就可以聽(tīng)到動(dòng)聽(tīng)的科大訊飛的聲音了。

編寫代碼

有了上述的步驟之后,我們就可以動(dòng)手寫代碼了,人生苦短,只能選python啊:smile:

  • 安裝串口包

    這個(gè)估計(jì)也沒(méi)得選擇,我們只有一個(gè)包可以安裝

    pip3 install pyserial
    

    當(dāng)然也有教程說(shuō)可以這樣安裝,但如果上面的成功就沒(méi)有必要安裝下面的了

    sudo apt-get install python3-serial
    
  • 編寫代碼

    直接給出代碼,隨便了點(diǎn),并沒(méi)有用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)
    

運(yùn)行效果

運(yùn)行享受最后的結(jié)果


效果

效果gif
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 樹莓派的串口默認(rèn)為串口終端調(diào)試使用,如要正常使用串口則需要修改樹莓派設(shè)置。關(guān)閉串口終端調(diào)試功能后則不能再通過(guò)串口登...
    coolwriter閱讀 6,308評(píng)論 2 6
  • 1、串口連接 這種方式在我樹莓派的第一篇博客有講,這里我簡(jiǎn)單介紹。 連接樹莓派,樹莓派GPIO串口的GND,txd...
    麥牛2013閱讀 1,902評(píng)論 0 0
  • 1.樹莓派串口配置:樹莓派串口默認(rèn)用于終端調(diào)試,如需使用串口,則需要修改樹莓派設(shè)置。執(zhí)行如下命令進(jìn)入樹莓派配置:s...
    高桿python閱讀 8,646評(píng)論 0 4
  • 我亦飄零久,十年來(lái),深恩負(fù)盡,死生師友。 遇到一些事情,總愛(ài)寫下來(lái)感慨。感慨一些東西的不易,感慨生活的艱辛,感慨要...
    楠枝北枝閱讀 213評(píng)論 0 3
  • 今天我在家里找到了一個(gè)小飛機(jī)的玩具,我想研究研究,我就把它底下的螺絲擰開(kāi)了。 它就立刻分成了兩半。一半里面有一個(gè)裝...
    張賀辰閱讀 206評(píng)論 0 0