これまで、音声合成IC(Aques talk pico)で発声させるのにプリセットのメッセージをラズパイのGPIOからコントロールしていたが、ラズパイから直接シリアル通信で発生させるようにセットしてみた。
プリセットメッセージを使うと、メッセージ数にもよるが、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本で接続
回路図は、こちら
写真では、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
と、やると、”おはよー”と挨拶してくれるはず・・・。