見出し画像

またまた恥ずかしい、知識不足が原因


どうも、じぇいかわさきです。

昨日、Pythonでネット情報を参考にコードを書いて見たのだけれども、全く動作していない状況を報告致しました。

単独でADCの動作を確認した時には、間違いなく動いておりましたので、明らかにコードが悪いと思われますよね。

原因は何なのだろう?そう考えて、コードをにらめっこしていたんです。

最終的に行き着いた結末は、情けないことにまたもや知識不足から来たミスでありました。

単純にGPIOのセットモードと記述が合っていなかったという事でした。

本当に知らないと間違えやすいので、備忘録として記述することにしました。


基本的な使い方すら知らなかった

何故動かないのだろう、そう思いながらじっとコードを眺めていたんです。

ネットで公開されている情報をもう一度見ながら、何故だ?そう思い目を皿のようにしてチェックしたんです。

オリジナルのコードと変更した箇所は1箇所だけです。

その部分は、SPIのポートを設定する箇所なんです。

オリジナルは以下のようになっておりました。

SPICLK = 18
SPIMISO = 23
SPIMOSI = 24
SPICS = 25

この部分を自分なりに考えて変更したのが、以下のコードです。

SPICLK = 23
SPIMISO = 21
SPIMOSI = 19
SPICS = 24

勝手に変更してしまったのに良かったのか?

そもそも変更した理由は、ラズパイのピン番号を見ていくと、オリジナルのピン番号では設定しようとしているSPIのCLKやMISO、MOSI、CE0の指定とは違っていたので、実際に使用しているラズパイに合わせて変更したんです。

だから、何度も見直しても問題なかったんです。


ラズパイの設定は2つある

しかし、ADCやPythonをいくらチェックしても求める解はなかなか見つかりませんでした。

そしてなんとなく、ラズパイ自体についてもう一度使い方などを調べていたときに、有ることに目が止まりました。

それは、ラズパイのGPIOの設定の仕方なんです。

普段、参考書やネットから元になるコードを見つけてきて、それを元に改造をしていたので、あまり気にはしていなかった部分なんです。

しかし、実際にはラズパイのGPIOを指定する場合には

1.ピン番号で指定する
2.記号で指定する

の2種類が有るんです。

これってどういう事?って思うじゃないですか。

普通に考えると、ピン番号で指定すると思いますよね。

しかし、デバイスの領域ではピン番号で指定したりすると、百本近いピンが存在するものもありますし、外部と接続を回路図で書く場合などはGPIOxxという具合に、GPIOの番号で指定するらしいのです。

流石に、デバイスではそんな使い方をするとは知らなかったです。

従って、ラズパイはそのなごりも踏襲しているようで、最初にGPIOはどちらの使い方をするのか指定するらしいのです。

それが「GPIO setmode」というコマンドなんですね。

で、今回参考にしているコードはどうなっているかと言いますと、しっかりと以下のようになっておりました。

GPIO.setmode(GPIO.BCM)

なな、なんとこのBCMと言うのは役割ピン番号指定の事なんです。つまり、ピン番号ではなくGPIOxxを指定しているということなんですね。

ちなみに、この役割ピン番号と言うのは、broadcomが命名しているものらしいです。

自分が勝手に書き換えていたのは、物理ピン番号の指定ですので、もしこのように物理ピン番号で指定する場合には、以下のコードを使わなければいけません。

GPIO.setmode(GPIO.BOARD)

そうです、もうお分かりですね。役割ピン番号指定を自分は勝手に物理ピン番号指定で記述していたんですね。

従って、実際のコードは以下のようになります。

SPICLK = 11
SPIMISO = 9
SPIMOSI = 10
SPICS = 8

これは参考にしていたコードとも違っていました。

あの番号は、どのタイプのラズパイなんでしょうかね。


修正後の結果は・・・

コードを書き換えて、再びプログラムを走らせてみました。

今度は0の連続では有りません。オープン状態での数値は1023を表示しております。

どうやらプログラムがちゃんと動き出したようです。実際にティッシュを水で濡らして、ゲージの部分を包んでみました。

すると、結果は以下のように変化することが確認できたのです。

出力結果

軽く包むと900台に数字が落ち、更に強く包むと800台まで数値が変化します。

数値の妥当性というか、関係性ははっきりわからないので、今後調べていくとして、水分量によって数値が変わっていくことまで確認できました。

という事は、コード的にはOKということになりますね。

終わってみればなんてことはない、また今回も自分の知識不足が原因であるエラーだったということですね。

毎回エラーを生じ、そのエラーを解決していくと、結果は自分の知識不足に到達する問題が多いですね。

チャレンジ的にとりあえずやってみよう、これはこれで素晴らしいことだと思いますが、やはり最低限のハードとソフトの知識は必要かと思いました。

最低限を知っていないと、後戻り以上の後退が待っている感じです。

これからラズパイでなにかやろうとする人、GPIOの設定に注意してくださいね。

じぇいかわさきです。生産技術者として35年、今まで培った経験とスキルを元に、ものづくりに関わる世の出来事に対して思ったことをホンネで書いてます。ノウハウやアイデアもありますよ。 また写真も全力で撮っています、気に入った写真があればサポートや感想をぜひお寄せください。