Node-REDのネタとして、次は音声認識でPiZeroを操作したいと考えており、音声の開始をボタンでやらせようと考えている。本当は無音かどうかを判断して、音声が入力された時に音声データを切り出して音声認識APIを叩くのが理想だけど、無音判断と音声データ切り出しがちょっとややこしそうなので、まずはSWを押してから10秒ぐらい録音して、音声認識APIを叩く実装にしようと思ってます。
で、SWを押すとNode-REDのノードが発火する必要があるのだけど、、まずは、LEDとSWでLチカさせてIOが正しく制御できるのを確認。
最初どうやってもGPIOが反応せず、何が悪いのか見当も付かなかった。GPIOの指定でコネクタのPIN番号、素のGPIO番号、WireingPiの番号等、いろんな指定方法があるので、最初は設定間違いを疑ったけど、全ポートのダンプするコマンド(下記)でモードと入出力値を確認すると設定にミスはなかった。
gpio readall
で、、少し落ち着て考えると、PiZeroを入手してPINを取り付けるとき、ハンダをケチって、電源供給に関するピンだけをハンダ付けしていたのを思い出した。このため、電源以外のピンは結線されていないのが原因であった。
(左がケチったハンダ付け状態)
気を取り直して今回のテストに関するピンをハンダ付けしてGPIOを操作すると今度はすんなり動いた。
下記はbashで書いたSWを押下した時だけLEDが点灯するLチカサンプル
特定パターンでSW操作するとループを抜けるというのがcoolですけど面倒なので、20回ループと回数を決めて、回数分ループが回るとポートをクローズして終わりにしてます。
#!/bin/bash SW_PORT=23 LED_PORT=18 # enable SW_PORT and set direction in echo "${SW_PORT}" > /sys/class/gpio/export echo 'in' > /sys/class/gpio/gpio${SW_PORT}/direction # enable LED_PORT and set direction out echo "${LED_PORT}" > /sys/class/gpio/export echo 'out' > /sys/class/gpio/gpio${LED_PORT}/direction for i in {20..0} do sw_state=`cat /sys/class/gpio/gpio${SW_PORT}/value` echo "${sw_state}(${i})" echo "${sw_state}" > /sys/class/gpio/gpio${LED_PORT}/value sleep 1 done # disable SW_PORT and LED_PORT echo "${SW_PORT}" > /sys/class/gpio/unexport echo "${LED_PORT}" > /sys/class/gpio/unexport
SWとかLEDとか取り付けるのが面倒なので、大昔にMIDIか何かの評価のために作ったボードのパーツを使いまわしして試作中