chakokuのブログ(rev4)

テック・コミック・ごくまれにチャリ

今さらながら、、PiZeroでLチカ→おおハマり→原因はハンダをケチっていたから

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か何かの評価のために作ったボードのパーツを使いまわしして試作中