【NanoPi NEO/Armbian】LinuxでLチカしてみよう (コマンド制御編)

シングルボードコンピュータ(SBC)

LinuxでLチカ

今回は筆者が組み込みLinux学習に向いていると考えているNanoPi NEOを使います。環境構築については以下の記事で紹介しています。

【NanoPi NEO/Armbian】環境構築 ~Armbianインストール~起動まで~
組み込みLinux学習にオススメのSBC、NanoPi NEO 組み込みLinux学習に適した環境といえば、なんといっても情報量の多いRaspberry Piですが、2023年4月現在で引き続き手困難が続いている様です。そんな中、個人的に組...

LED回路の作成

などと大げさにいうほどのことではないのですが、まずはNanoPi NEOにLEDを接続しなければ始まりません。そのためにやらなければならないこととしては、

  • LED回路の作成
  • LED回路をNanoPi NEOのどの端子に接続したらよいか調べる
  • LinuxでのGPIO制御実行

「Lチカ」ということでなにはともあれLEDが必要です。NanoPi NEOのボード上にもLEDがありますが、現時点でユーザーがソフト制御していいものか・できるものなのかわからなないので今回は外付けのLEDを接続します。

LEDを接続するといってもいきなり直結してはいけません。LEDには抵抗を内蔵しているものもありますが、通常は適切な電流が流れるようにするために抵抗を接続する必要があります。

筆者はLEDと抵抗器のセットをAmazonで購入しました。一生分あるかも。

LEDの回路は以下の様になります。

今回紹介したLED部品の場合はカラーによって異なるかもしれませんが緑LEDで2~3mAくらい流せば充分な光量になることを確認しました。今回は2.5mAとします。NanoPi NEO端子の電圧は基本的に3.3Vです。LEDのVFが2V[1] … Continue readingとすると、ご存知オームの法則にて、

R[Ω]=(3.3-2)[V]/0.0025[A]=520[Ω]

ということで520Ωの抵抗を接続すれば良いということになります。実際の抵抗器は520Ωがないので今回は510Ωのものを使うことにします。余談ですが、抵抗器としてお馴染のカーボン抵抗や金属皮膜抵抗などは見た目で抵抗値がわかるようにJISで規格化されているカラーコード[2] … Continue readingが塗られています。510Ωのカラーコードは4本線のカーボン抵抗の場合「緑茶茶(金)」、5本線の金属皮膜抵抗の場合「緑茶黒黒(茶)」といった感じです。先ほど紹介したLEDと抵抗のセットのものは金属皮膜抵抗ですので「緑茶黒黒茶」となっています(実際は抵抗をまとめている帯に510Rと文字で書かれていますのでご安心を)。

ということで、筆者はこんな感じでブレッドボード上に部品を配置しました。

回路に接触不良などないことを確認するためにまずは3.3V/GNDに接続してみます。LEDには極性があるので間違えないよう気を付けましょう。足の長い方の端子がアノードといってプラス(5V側)になります。

NanoPi NEOの端子について調査

まずは接続すべきピンを確認します。LEDを点灯するだけなら前述の確認の通り3.3V/GNDに接続すればよい訳ですが、それでは制御ができません。制御というからにはソフトウェアからON/OFFできる必要があります。ソフトウェアからON/OFFできる端子といえばGPIO(General purpose input/output)です。ということで接続先は汎用のGPIO端子(ピン)ということになります。

まず、NanoPi NEOの端子一覧を見てみましょう。


※引用元:https://www.friendlyelec.com/

より詳しく見たい方はAllwinner H3のデータシートもチェックしてみたら良いかと思います。

https://wiki.friendlyelec.com/wiki/images/4/4b/Allwinner_H3_Datasheet_V1.2.pdf

※詳しくは記載しませんが「3.2. GPIO Multiplexing Function」とか「4.22. Port Controller Register List」を読み解けばなにかが見えてくると思います

とりあえずPA6が使えそうですので、今回はPA6に接続していくことにします。PA6はボードのSDカードスロットを上にしてみたときの最右側の上から6番目のピンです。GNDピンは下隣と3つ上にありますね。

これで接続先のGPIOピンが確認できましたが、まだピンの設定状態が確認できていないのでLED回路の接続はもう少しお預けとします。

LinuxでのGPIO制御

LinuxでGPIOを制御する方法はいくつか考えられます。今どきはlibgpiodを使うのが良さそうですが、今回は手慣れたsysfsでの制御をコマンドライン操作でやっていきます。

まずは接続する予定のGPIOピンの設定状態を確認します。sysfsは特権が必要でuserアカウントから操作するといろいろ面倒なのでとりあえずrootで操作することにします。

$ su
パスワード:
# cat /sys/kernel/debug/pinctrl/1c20800.pinctrl/pinmux-pins
:(省略)
pin 6 (PA6): (MUX UNCLAIMED) (GPIO UNCLAIMED)
:(省略)
# ls /sys/class/gpio/
export  gpiochip0  gpiochip352  unexport

今回使用するPA6はsysfs上はgpio6に相当しますが、未設定状態になっています。/sys/class/gpio/exportに6を書き込むことでgpio6が有効になります。

# echo 6 > /sys/class/gpio/export
# ls /sys/class/gpio/
export  gpio6  gpiochip0  gpiochip352  unexport
# cat /sys/kernel/debug/pinctrl/1c20800.pinctrl/pinmux-pins
:(省略)
pin 6 (PA6): (MUX UNCLAIMED) 1c20800.pinctrl:6
:(省略)
# ls /sys/class//gpio/gpio6/
active_low  device  direction  edge  power  subsystem  uevent  value

これでgpio6(PA6)が有効になりました。次にピンの状態を確認します。

# cat /sys/class//gpio/gpio6/direction
in

ピン設定が入力になっています。今回はLEDを点灯させたいので出力に変更します。

# echo out > /sys/class/gpio/gpio6/direction
# cat /sys/class//gpio/gpio6/direction
out

出力になりました。次に現在の出力状態(ONかOFFか)を確認します。あわせて論理を確認します。

# cat /sys/class//gpio/gpio6/active_low
0
# cat /sys/class//gpio/gpio6/value
0

アクティブローが0(つまりOFF)ということはアクティブハイ(1のとき出力がON)であり、出力値は0(つまりOFF)となっています。ピン方向が出力・値はOFFとなっていることが確認できましたので、LED回路を接続します(お待たせしました)。

# echo 1 > /sys/class/gpio/gpio6/value

はい、点きました。

# echo 0 > /sys/class/gpio/gpio6/value

はい、消えました(画像使い回しですみません笑)。

尚、再起動すると上記GPIO設定はクリアされます。

もっと詳しく知りたい方へ

GPIO sysfs Interface

https://www.kernel.org/doc/Documentation/gpio/sysfs.txt

PINCTRL subsystem

PINCTRL (PIN CONTROL) subsystem — The Linux Kernel documentation

マルチメータ紹介

記事内では割愛しましたが、今回の執筆にあたっては電圧、電流、抵抗を確認するためのマルチメータ(いわゆるテスター)が大活躍しました。

筆者が使用しているマルチメータは共立電気計器のKEW 1012です。ひととおりの測定ができて使いやすく価格もそこまで高くないのでとても気に入っています。実はAmazonで探すと驚くほど安価な中国製テスターもあります。それはそれで手軽に使えて良いのですが、信頼性などを考えるとやはり国内メーカーのものが安心できます。あと、商品によっては電流が測れなかったり静電容量が測れなかったりなど機能に差がありますので用途にあったものを選びましょう。

次回予告

次回はプログラム(C言語)でのGPIO制御を紹介していく予定です。

今回の記事で使用した機材紹介

注釈

注釈
1 本来はデータシートで定格を確認するべきですが今回使用したLEDの素性が不明です。とはいえ一般的にこのタイプの緑LEDのVFは2V前後と考えていいと思います。更に念のため実測で確認して結果2Vでした。
2 カラーコードといえば「黒い礼(零)服」とかが有名ですが、筆者は電子回路に興味をもった小学生の頃「こくちゃせきとうおうりょくせいしかいはく」と呪文のように唱え続けて覚えました笑。

コメント

Amazon プライム対象
タイトルとURLをコピーしました