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

1. 概述

最近的項目中需要用到語音播報,本來在電腦上好好的用百度生成mp3然后用pysound播放,但是板子沒有3.5mm的音頻接口呢,只能另辟他法。

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

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

2. 硬件實圖

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

全圖

板子的細節(jié)圖
主板實物

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

3. 接線圖

訊飛芯片

如上面表示的幾個接線點

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

開啟串口

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

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

  • 進入首選項-->Raspberry Pi Configuration

  • 關閉Interfaces里的Serial Console并開啟Serial Port

    串口

  • 打開sudo nano /boot/config.txt文件

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

    在它的下面我們繼續(xù)加上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發(fā)送數(shù)據(jù)

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

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

    狀態(tài)

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

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

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

    再來一個語音播報的例子


    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
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

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

友情鏈接更多精彩內容