エンジニアらしき人のひとりごと

100人中100人は興味を示さなくても、100万人居たら1人くらいは面白いと思ってくれそうな、重箱の隅をほじくってみるブログ。

黒電話をスマホの子機(Bluetoothヘッドセット)に!⑦

ラズパイ(Raspberry Pi)を使って、黒電話をスマホの子機にする工作をしています。

ちょっとお知らせ

実はこの作品を、
日経BP社の雑誌3誌が主催した「ラズパイコンテスト2017」に応募してました。

そしたら、なんとなんと!まさかの「優秀賞」をいただきました!
みんなのラズパイコンテスト |ラズパイマガジン、日経Linux、日経ソフトウエア 主催
ありがとうございます!うれしいです。

本当は応募までにこの工作シリーズの記事を書き終えたかったのですけどね。意外に書くネタ多すぎw

ちなみに本シリーズの過去記事は、こちらから。
tokieng.hatenablog.com

前回までのおさらい

前回までで、ラズパイで黒電話のダイヤルとフックの状態を観測できて、さらにベルも鳴らすことができた。
ラズパイをスマホに接続して、ラズパイからスマホの電話機能の操作もできるようになった。

いよいよ、これをまとめて、黒電話アプリを作るぞ!
と思ったけど、ソフト作りの前にまずはハード作りだ!

回路(バージョン1)

バージョン1とわざわざ書いているということは、これは後で変更するんだなというネタバレを意味するけど、まぁ気にしない。
まずはこの回路を作ってみた。
f:id:tokieng:20171111163148p:plain
(回路図作成には、 水魚堂の回路図エディタ (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本が出ている。
f:id:tokieng:20170623195408j:plain
この白いのがマイクの線で、黒いのがスピーカーの線。

この線を、3.5mmのミニプラグの形に変換してみる。
線が2本しかないから(モノラルだから)、端子が2個(2極)のタイプでいいんだけど、なかなか見当たらないので3極のミニプラグを使ってみた。
f:id:tokieng:20171111173323j:plain
半田付けがひどいのは、ご愛敬ということで(^^;

ミニプラグをくっつけたら、本物の受話器を使ったマイクとスピーカーの完成!
f:id:tokieng:20171111173558j:plain

これをラズパイの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.

と表示されたら準備完了。

電話かけたりしてみたいだろうけど、プログラムや回路にミスがあったら間違い電話をしてしまうかもしれないので、それは次回じっくりと説明する・・・つもり。

次回予告

このアプリを使って、電話の発着信をやってみる。あと、回路図バージョン2も?



ちなみに本シリーズの全記事は、こちらから。
tokieng.hatenablog.com