非公式Rock研究所

Radxaのシングルボード(主にRock4c+)について書いています

Digital Read-スイッチの読み取り

注意:当サイトに掲載されている手順は動作を保証するものではないもの、また、当サイトに掲載されている情報をもとに電子回路を作成した結果によって生じたことについて、一切の責任を負えないことをご了承ください。

【Article】「GPIOページに掲載する記事について」 - 非公式Rock研究所
https://informal-r-labo.net/posts/article005



Digital Read-スイッチの読み取り全体写真

ここではmraaライブラリを使ってスイッチのオンオフの状態を画面に表示させてみる。

Arduino Built-in

この記事の元ネタである、ArduinoのBuilt-inのページリンク

Digital Read Serial | Arduino Documentation
https://docs.arduino.cc/built-in-examples/basics/DigitalReadSerial/

回路図

Rock4c+でスイッチの読み取りを実現させるための回路図は以下のようになる。

スイッチ読み取りの回路図

図は電子部品を接続するためにブレッドボードを使用している。電気部品の端子を接続するため、接続を中継する線(黄色)を使用している。

電圧について

電圧は3.3VのPin1(黄色の端子)を使用している。(Rock4c+のDocumentなどを確認すると、GPIO端子は約3Vとの表記だったため、5.0VのPin2やPin4(赤色の端子)では許容範囲を超えると思料した。)

参考リンク
Radxa ROCK 4C+ Product Brief (p6 5.2 GPIO Voltage)
https://dl.radxa.com/rockpi4/docs/hw/rockpi4/radxa_rock4cp_product_brief_Revision_1.9.pdf

ボタンスイッチについて

ボタンスイッチの接写

ボタンスイッチは向きがある。形は正方形だが、よく見ると端子が出ている辺とそうでない辺がある。上の写真を参考にブレッドボードの真ん中の溝と端子が出ている辺を平行に設置すること。

ボタンスイッチの説明図

また、ボタンスイッチの特徴として、図のようにスイッチのONOFFに関係なく、反対側の辺の端子とはもともとつながっている。そのため、回路図ではPin8に接続する白色の線と抵抗に接続している黒色の線はつながっている状態にある。(初めてボタンスイッチをさわった頃、私はこのことを全く知らず、向きを間違えて全然うまくいかないという沼にハマった。)

スイッチについての詳しい説明は以下のリンクが参考になる。

【分解】タクトスイッチの構造と使い方を徹底解説 #4|みんなの電気・電子回路
https://note.com/shingo_shirogane/n/n01f0484907a9

Pythonコード

~/pyディレクトリに"Digital_Read.py"のファイル名でviを起動し、編集モードで以下のコードを入力する。
(Rock4c+には日本語が入力できないため、カッコ書きのコメント行は入力不要。)

# (ライブラリのimport)
import mraa
import time

# (Pin8を操作対象にして、mr.DIR_OUT_LOWで"LOW"状態に初期化)
gpio_sw = mraa.Gpio(8)
gpio_sw.dir(mraa.DIR_OUT_LOW)

# (反映に少しタイムラグがあるので、1秒ほど待機)
time.sleep(1)

# (gpioをmraa.DIR_INで読み取りに変更)
gpio_sw.dir(mraa.DIR_IN)

while True:
    # (0.1秒間隔でスイッチの状態を読み取り、画面出力)
    result = gpio_sw.read()
    print(result)
    time.sleep(0.1)

コーディングが完了すれば保存する。

コードのはじめにgpioへmraa.DIR_OUT_LOWで、Pinを"0(LOW)"の状態に初期化している。
(これを事前に実行しないとスイッチの状態をうまく読み取れない。)

紹介したPythonコードについて参考にしたサイトのリンクを貼っておく。

mraa: libmraa - Low Level Skeleton Library for Communication on GNU/Linux platforms
https://iotdk.intel.com/docs/mraa/v2.0.0/

mraa: Dir Class Reference
https://iotdk.intel.com/docs/mraa/v0.9.0/java/classmraa_1_1_dir.html

コードの実行

電子部品の結線が間違っていないか確認し、問題なければ先程のコードを管理者権限で実行する。
(GPIOを操作するには管理者権限が必要。)

$ sudo python3 ~/py/Digital_Read.py
スイッチの読み取り実行時出力

実行すると、現在の状態を表す"0"が画面に表示される。
そこで、スイッチを押すと、

スイッチの読み取りボタン押下写真 スイッチの読み取りボタン押下時出力

押したタイミングで画面には"1"が表示されるようになる。

スイッチの読み取りボタン離し写真 スイッチの読み取りボタン離し時出力

"1"の表示は押し続けている間だけで、ボタンを離すとまた"0"に戻り、ボタンの状態を表示することができている。

苦労ばなし

ここにいたるまでの紆余曲折、試行錯誤、山あり谷あり。

【Article】「Digital Read-スイッチの読み取りまでの道のり」 - 非公式Rock研究所
https://informal-r-labo.net/posts/article006