HaLake Magazine

コワーキングスペースHaLakeの技術情報発信サイト!IoT,AR,VRなど最新技術情報をお届け!

超小型SBC『LicheePi Nano』を触る! その3 〜GPIO操作(Lチカッ!)編〜

f:id:takumishinoda:20200202174929j:plain

今回はLicheePi nanoのGPIOを操作する方法をまとめていきます。
『LicheePi nanoの記事第三回にしてLチカのかよ!』と思われますが、Arduinoやラズパイのように操作方法が簡単に分からなかったので第三回目での記事になります。
ラズパイではPythonなどでライブラリが用意されていましたが、LicheePi nanoの標準OSでは容量の関係なのか簡単な操作コマンド等は見当たりませんでした。
なのでコマンドを幾つか叩いてGPIOを制御する方法を紹介します。

記事シリーズ


学習内容

  • LicheePi nanoでLチカする
  • LinuxでコマンドからGPIOを制御


事前実践準備

  • 前回までの記事を確認
  • LicheePi Nano本体
  • USBシリアル変換モジュール(cp2104等)
  • ブレッドボードなどの配線機材
  • Arduino IDE(シリアル通信ソフトならなんでも良い)
  • 電子工作の配線知識
  • Linuxの基礎知識
  • 砲弾型LED
  • 抵抗 330Ω


目次

  1. LEDの配線
  2. コマンドを叩いてGPIO操作


1. LEDの配線

GPIOを触るということで、おなじみのLチカをするためにまずLEDの配線をしていきます。
LicheePi nanoのピンアサインは下の図を参考にD7ピンとLEDを適当な抵抗を挟んで配線します。

https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcSIc6dleqC_CgmmHiL7VE34jmIf1y-XQUVD2VH65_0rs2oK_5cY

上の図からわかると通り、LicheePi nanoはラズパイと違ってGNDピンが1ピンしか用意されていません。
なのでブレッドボードを使う場合は、下の写真のように正極とGND用の列が用意された物を使うと良いです。

f:id:takumishinoda:20200202174600j:plain
配線例

こういう仕様をみるとLicheePi nanoのコンセプトが電子工作ではなく、あくまで小型コンピュータを作ることが目的であることが読み取れるかもしれません。


2. コマンドを叩いてGPIO操作

今回筆者はボードに取り付けられたSPIフラッシュ内蔵のOSからGPIO操作を確認しました。
microSDに書き込んだOSからも同じように操作できるはずですが、筆者は試していないので同じ手順でできない可能性がありますので注意してください。
早速LicheePi nanoにログインできたら、以下のコマンドでGPIO操作に関連するディレクトリを確認します。

$ ls /sys/class/gpio/

f:id:takumishinoda:20200202171935p:plain
/sys/class/gpio/ の中身

幾つかファイルやフォルダが出てきましたが、重要なのはexportファイルです。
このファイルにGPIOのピン番号を書き込むことでGPIOを操作するためのディレクトリが出来上がります。
ここで注意が必要で、上記のピン番号というのはLicheePi nanoのピン番号ではなく、SOC(CPU)であるF1C100Sのピン番号を指しています。
そのためLicheePi nanoとSOCのピン関係を知るために以下の回路図PDFデータを参考にしてtamesiniLicheePi nanoのD7ピンを確認していきます。

https://fdvad021asfd8q.oss-cn-hangzhou.aliyuncs.com/migrate/Lichee_nano.pdf

ここからLicheepi nanoのD7ピンは、SOCのPE10ピンであることがわかります。
わかりやすい図を下に載せています。

f:id:takumishinoda:20200202170922p:plain

PE10はポートEの10番目のピンと解釈します。
E10という文字列はexportファイルに書き込めないので、以下のように計算をして数字を導き出します。

Eはアルファベット順の`5`番目なので、

(5 - 1) * 32 + 10 = 138 <- `138`をコマンドでexportファイルに書き込む

今回はこの情報を元にGPIOの操作をしていきます。
以下のコマンドでexportファイルに数字を書き込みます。

$ echo 138 > /sys/class/gpio/export

すると以下のように/sys/class/gpio/ディレクトリにgpio138フォルダができ上がります。

f:id:takumishinoda:20200202172017p:plain
gpio138ディレクトリを確認

ディレクトリを確認したら、中をみてみると以下のようになっているはずです。

f:id:takumishinoda:20200202172210p:plain
`gpio138`の中身

ここで今回重要なのはdirectionvalueファイルです。
direction ファイルではGPIOを出力か入力かを管理しています。
出力ならout、入力ならinが記述されています。
今回は出力で使用したいので、以下のコマンドで出力モードにします。

$ echo out > /sys/class/gpio/gpios138/direction

次にvalueファイルは出力モードの場合電流を出力するかしないかを制御できます。
1で出力して、0で出力しないを制御します。
以下のコマンドでD7ピンから電流を出力してLEDが光るか確かめましょう。

$ echo 1 > /sys/class/gpio/gpio138/value

コマンドを入力してエラーが出なければ写真通りLEDが点灯します。

f:id:takumishinoda:20200202174245j:plain
Lチカできた!

これでLチカまでの一通りの作業が終わりました。
実はこの作業はSOCピン番号さえわかればラズパイでも同じことができます。
ですがラズパイではライブラリの方が充実しているので、この方法を試す機会はあまりなさそうです。
個人的に以下のリポジトリでコマンドから簡単にGPIOのON・OFFを制御できる実行ファイルをGoで作成してみました。
故障等は自己責任になりますが、試したい方がぜひ触ってみてください。

github.com

GPIOの操作がわかったので少しは用途が増えてよかったです。


まとめ

  • LicheePi nanoでLチカができた!
  • Linux上でコマンドからGPIOを制御する方法がわかった