ラズベリーパイからシリアル通信で音声合成ICを発声させてみた

これまで、音声合成IC(Aques talk pico)で発声させるのにプリセットのメッセージをラズパイのGPIOからコントロールしていたが、ラズパイから直接シリアル通信で発生させるようにセットしてみた。
f:id:manpukukoji:20160306114053j:plain
プリセットメッセージを使うと、メッセージ数にもよるが、GPIOのピンを3つ、4つ使うことになるけどシリアル通信で直接メッセージを送ると、送信だけで良いのでGPIO14のピン1本で事足りるので節約になるね。
シリアル通信のための設定は、いろいろなサイトで説明してくれているが、なんと、今回、僕の環境では、何もしなくてもそのまま通信できちゃったよ???

これまでのWebの情報だとシリアル通信するためには、以下の3つが必要だそうです。
1.シリアルコンソールのdisable化
2./boot/cmdline.txt の編集
3./etc/inittab の編集

僕の環境は、
Raspberry Pi2
NOOBS ver. 1.7.0. (Raspbian Kernel 4.1.17)
になっているが、上記の設定をしなくてもできちゃうみたい・・・?!

ちなみに、NOOBSのバージョンは、もう、1.8.0になっていた。
で、現在の/boot/cmdline.txt は、以下のようになっていた。
/etc/inittab は、そもそも、はじめから見つからなかった。

pi@raspberrypi:~$ cat /boot/cmdline.txt
dwc_otg.lpm_enable=0 console=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

ラズパイとATP3011との接続は、電源用の3.3VとGround、ラズパイのTxd Pin#08(GPIO14) の3本で接続
回路図は、こちら
f:id:manpukukoji:20160306113408j:plain
写真では、IR受信用のセンサとリモコンコード解読用のPICが付いているが、今回は、使わないので回路図からは、はずしてある。

簡単な発声プログラムは、Pythonで以下のようなプログラムを書いてみた。

pi@raspberrypi:~ $ cat wrserial.py
import serial
import time

def main():
    con=serial.Serial('/dev/ttyAMA0', 9600, timeout=10)
    print con.portstr
    time.sleep(1)
    str="? ohayo-\r\n"
    con.write(str)

if __name__ == '__main__':
    main()

これで、

 $sudo python wrserial.py

と、やると、”おはよー”と挨拶してくれるはず・・・。