概要
IoT初心者がcodamaを使って遊ぼうとしたら、色々つまずいて苦労した話
エラー内容に絞って以下に残します。世界平和に役立てば光栄です。
参考にすべきサイト
・codamaのオフィシャル
https://codama.ux-xu.com/
・ロボスタの紹介ページ
https://robotstart.info/2018/12/28/cidama-dev-01.html
前提
・使用機材は、RaspberryPi4(Model B Rev 1.4)
・Raspbianのバージョン:10.10
第一関門「ウェイク・アップ・ワードの録音」の勘違い
全体を通して、ジャンパーピンの抜き差しのタイミングが重要。
ロボスタのページを参考に、逐一確認すること。
※ロボスタのページは公式より写真が多くわかりやすいが、ロボスタばかり見てると、
公式掲載のコマンドを打ち忘れるという事象が発生するので、両方見比べることが重要w
公式の「1. PCとUSB接続するマイクとして使用する場合」にて実施
録音の際、以下の場面で、USB接続を選んでしまい、
ファームウェアビルドが永遠にできずに困った。
(注記はあるが、初心者ゆえに読み違えた・・・)
「1. PCとUSB接続するマイクとして使用する場合」は「I2C」が正解
第二関門「ウェイク・アップ・ワードの動作確認」
ウェイクワードの録音が成功し、binファイルをsshでラズパイのcodamaフォルダに保存。
いざ動作確認をすべく
①$ while true; do sleep 0.2s; codama_i2c KEYWORDDETECT ;done
を叩くと、
"rdwr ioctl error -1: Remote I/O error"
の無限地獄。認識されていないのでは?という疑問から
②'$ sudo i2cdetect -y 1'
を叩くと、懸念どおり何も表示されない。→全てが「--」表示
ジャンパーピンを刺して、①②を改めて実施すると
① Remote I/O errorが出ずに、「KEYWORDDETECT:0」が返ってくること
※ジャンパーピンありなので、ウェイクワードにはもちろん反映しない。
② i2cdetect が正しく反映されること
などから、もう一度ジャンパーピンの有無を詳細に確認のうえ、
公式とロボスタのページを見比べて、再度設定をやり直した結果、上記エラーは解消。
(具体的にどこを間違えたかは不明です。すみません)
第三関門「gpioの検知」
##①そもそも公式のコマンドが間違えている
誤)$while true; do sleep 0.2s: gpio -g read 27 ;done
公式の案内どおりに上記コマンドを入力すると、以下のエラーがエンドレスに・・・
" sleep: 無効なオプション -- 'g' "
" Try 'sleep --help' for more information. ”
かなりの時間を溶かした結果、まさかの公式コマンドが間違えていることに気付く
以下コマンドに修正し、無限エラーからは脱出
正)$ while true; do sleep 0.2s; gpio -g read 27 ;done
※ 0.2sの次は「:」ではなく「;」が正解
##②WiringPiというライブラリが古かった
無限エラーは解消したが、返ってきた値が「1 1 1 1...」
(本当は「0 0 0 0 0...」が通常。ウェイクワードに反応したときだけ「1」が正解)
gpio27がずっとhighなのか?
gpio27をどこかでいじってしまい初期値がhighになったのか?
などと意味不明な検討を重ねた結果、
$ gpio readall
を打つと以下エラーになることに気付く
“Oops - unable to determine board type... model: 17"
上記エラーを手がかりに、以下リンクに辿り着く
http://wiringpi.com/wiringpi-updated-to-2-52-for-the-raspberry-pi-4b/
※リンクの細かい内容は無視して、以下2つを実行すれば最新版にupdateできます
$ wget https://project-downloads.drogon.net/wiringpi-latest.deb
$ sudo dpkg -i wiringpi-latest.deb
$ gpio readall
で一覧表が表示されて喜ぶ
$ while true; do sleep 0.2s; gpio -g read 27 ;done
で「0 0 0」が続き、ウェイクワードに反応して「1」に変わるのを確認して歓喜。
初期設定の苦労話はここまで!