ラズパイ(Raspberry Pi)を使って、黒電話をスマホの子機にする工作をしています。
ちょっとお知らせ
実はこの作品を、
日経BP社の雑誌3誌が主催した「ラズパイコンテスト2017」に応募してました。
そしたら、なんとなんと!まさかの「優秀賞」をいただきました!
みんなのラズパイコンテスト |ラズパイマガジン、日経Linux、日経ソフトウエア 主催
ありがとうございます!うれしいです。
本当は応募までにこの工作シリーズの記事を書き終えたかったのですけどね。意外に書くネタ多すぎw
ちなみに本シリーズの過去記事は、こちらから。
tokieng.hatenablog.com
前回までのおさらい
前回までで、ラズパイで黒電話のダイヤルとフックの状態を観測できて、さらにベルも鳴らすことができた。
ラズパイをスマホに接続して、ラズパイからスマホの電話機能の操作もできるようになった。
いよいよ、これをまとめて、黒電話アプリを作るぞ!
と思ったけど、ソフト作りの前にまずはハード作りだ!
回路(バージョン1)
バージョン1とわざわざ書いているということは、これは後で変更するんだなというネタバレを意味するけど、まぁ気にしない。
まずはこの回路を作ってみた。
(回路図作成には、 水魚堂の回路図エディタ (BSch3V) を使用させていただきました )
回路の+3.3VとGNDは、もちろんラズパイのお好きなピンから引っ張ってきてください。
※おことわり:ちなみに私は回路作成初心者なので、この回路だと火災やケガや他人に迷惑かけることがあるかも。あくまでも、ご参考までに!
使用するGPIO端子は以下の通り。
GPIO端子 | 接続先 | 用途 |
---|---|---|
GPIO17 (11番ピン) | 黒電話のD1線 | ダイヤルパルスの検出に |
GPIO22 (15番ピン) | 黒電話のD3線 | ダイヤル回転中の検出に |
GPIO24 (18番ピン) | 黒電話のH1線 | フック状態の検出に |
GPIO13 (33番ピン) | モータドライバTA7291PのIN1端子 | ベルの制御に |
GPIO5 (29番ピン) | モータドライバTA7291PのIN1端子 | ベルの制御に |
回路図の上半分がダイヤルとフックの検出回路で、下半分がベルを鳴らす回路。
単に配線しただけ。
CN1~CN3は、黒電話と回路とを接続するための、コネクタ。繋げればなんでもよい。
まずはブレッドボード上に配線して、これでよいか動作を見てみよう。
そのためにもアプリを作らなきゃ。
あれ?受話器は?
そうそう、受話器もつながないと、電話機として足りないよねー。
黒電話の受話器からは、黒い線2本と、白い線2本が出ている。
この白いのがマイクの線で、黒いのがスピーカーの線。
この線を、3.5mmのミニプラグの形に変換してみる。
線が2本しかないから(モノラルだから)、端子が2個(2極)のタイプでいいんだけど、なかなか見当たらないので3極のミニプラグを使ってみた。
半田付けがひどいのは、ご愛敬ということで(^^;
ミニプラグをくっつけたら、本物の受話器を使ったマイクとスピーカーの完成!
これをラズパイのUSBオーディオケーブルに繋いで、ラズパイで音を鳴らしてみる。
$ paplay /usr/share/sounds/alsa/Front_Center.wav
もし↑で音が鳴らなかったら、↓も試してみて。
$ pulseaudio --start -D # ←pulseaudioが起動していないとき、起動させる $ paplay /usr/share/sounds/alsa/Front_Center.wav
お!受話器のスピーカーから音が鳴った!
単純に繋ぐだけでいいみたい。複雑なことしなくて、よかったよかった。
アプリ作ったよ
黒電話アプリ、名付けて KurodenwaPi なのだ!プログラムをGitHubで公開します。
github.com
GitHubなのでうさんくさい英語で説明を書いてしまったけど、そもそも日本の黒電話との使用を前提としたアプリだから、英語で書いても誰も読まないや(笑)
準備
まずはインストールする。
$ cd
$ git clone https://github.com/tokieng/KurodenwaPi.git
完了。
ほかに必要なのは、これまでに登場した PulseAudio(バージョン10)、ofono、pigpio。インストール方法は過去記事を参照して。
ラズパイとスマホのBluetoothペアリングも、過去記事が参考になるかも。
あ、スマホと接続するときにofonoがラズパイ上で動いていないと、スマホはラズパイをハンズフリー機器として見てくれないので、ご注意を。
さらに言うと、ラズパイにペアリングしている(登録している)Bluetooth機器は、1つだけにしてください。複数登録しているときは、bluetoothctlコマンドを使って1つだけにしてください。
これは、手抜きアプリの仕様です(汗)。
複数機器に対応しようかとも思ったけど、需要無い割りに面倒なので省略!
そして必要なソフトが、AquesTalkPi。
AquesTalk Pi - Raspberry Pi用の音声合成アプリ
日本語の文章をAquesTalkPiに渡すと、音声データを作ってくれる。
せっかくなので、黒電話にしゃべらせたいよねー。
ダウンロードしたら、以下のようにして展開すれば、準備完了。
$ cd
$ tar xfz aquestalkpi-20130827.tgz
あとは、受話器を上げた時の「ツー」という音と、電話が切れたときや話し中の「ツー、ツー・・・」という音と、呼び出し中の「プルルルル・・・」という音。
これもアプリで生成したかったけど、結構ややこしかったのでやめて、wavファイルを再生することにした。
必要なwavファイルは、以下の3つ。
- tone.wav : 受話器を上げた時の「ツー」という音。トーン信号。400Hzのサイン波。
- busy.wav : 相手が話し中の時の「ツー、ツー、ツー・・・」という音。ビジートーン。
- ringback.wav : 相手を呼び出しているときに聞こえる、「プルルルル、プルルルル・・・」という音。リングバックトーン。
どこかからダウンロードしてきたはずなんだけどなぁ。どこからか分からなくなってしまった・・・。
どうにかしてwavファイルを工面したら、 /home/pi/KurodenwaPi/sound/ の中に置いてくださいませ。
アプリの実行
スマホとラズパイが接続している状態にして、以下のコマンドを実行する。
$ cd
$ KurodenwaPi/client
しばらく待って、
Ready.
と表示されたら準備完了。
電話かけたりしてみたいだろうけど、プログラムや回路にミスがあったら間違い電話をしてしまうかもしれないので、それは次回じっくりと説明する・・・つもり。