今回は8回目にして遂にプログラミングをしてみたいと思います。

とは言えあくまで手を動かすのを中心に進めたいので、プログラミングに関する細かい知識はあまり説明する予定はありません。

とにかく動くものを作って、各々が何をしているのか順に追うというスタイルで行きたいと思います。

やりたい事と事前の説明

前回はLEDをとりあえず光らせるだけで終わりました。

今回はプログラミングを使って実際に『LEDで1秒ごとに光らせたり消したりを繰り返す』というプログラムをruby(ルビー)という言語を使って作ってみたいと思います。

ruby?言語?といきなり聞いてもわからないと思いますが、とりあえず今はrubyっていうのを使ってパソコンに命令するんだって思っておけば良いでしょう。

配線の修正

前回の記事の配線から少し修正する部分があります。

といっても大した事はなくてGPIOの「1番ピンに指しているものを18番ピン移動」するだけです。

図でいうと上の団の左から9のつ目ですね。

ledline2

もちろんこの差し替えには意味があります。

LEDを点灯させるためには当然電源を入れたり、消したりどいう動作が必要になるのは理解できますよね?

1番のピンは常に3.3vの状態を続けてon/offを切り替える機能がないため、LEDを消すことが出来ません。

一方18番のピンは「GPIO24 (24番目のGPIO)」に割り当てられています。

前回説明しましたがGPIOは日本語で言うと汎用入出力、もっと噛み砕いて言うと「プラス(出力)、マイナス(入力)のどちらでも出来るピン」ということです。

ということは…勘の良い人は気づいたと思いますが、この出力と入力をプログラムを使って交互に切り替える事でLEDをチカチカと点滅させる事ができるというわけです。

LED点灯プログラム

それでは早速LEDを光らせるプログラムを作ってみましょう!

やることは簡単。テキストエディアを開いて文字を打つだけ。

次の文字列をコピペ、もしくは書き写してデスクトップ上に保存してください。

折角なので書き写す事をオススメします。

なぜならプログラミング初心者にとって「写経」は効率のいい勉強方法の一つだからです。

io = open("/sys/class/gpio/export", "w")
io.write(24)
io.close

io = open("/sys/class/gpio/gpio24/direction", "w")
io.write("out")
io.close

io = open("/sys/class/gpio/gpio24/value", "w")
io.write(1)
io.close
sleep 1

io = open("/sys/class/gpio/gpio24/value", "w")
io.write(0)
io.close
sleep 1

io = open("/sys/class/gpio/unexport", "w")
io.write(24)
io.close

書き写したらデスクトップ上に「led_chikachika.rb」という名前で保存してください。

実際にプログラムを動かして見よう

それでは実際に作ったプログラムを動かしてみましょう。

ターミナルを開いて次のように入力してください。

sudo ruby ~/Desktop/led_chikachika.rb

この様にrubyで作ったプログラムを動かす(実行するとも言います)には「ruby ファイルのパス」の様に入力します。

前のsudoは今はおまじないだと思っておいてください。

どうでしょう。このように点灯してくれましたでしょうか?

一回しか光ってないじゃん!とツッコミもあると思いますが本当のチカチカは次回説明する予定です。

上手く行かない場合は一から見なおしてみましょう。

プログラムの中身を見てみる

それでは順にプログラムの中身を解説していきます。

io = open("/sys/class/gpio/export", "w")
io.write(24)
io.close

最初の部分です。

見ての通りプログラムといっても大部分は英単語なのがわかると思います。

実はこの英単語一つ一つがパソコンへの何かしらの命令を表しています。

少し日本語に置き換えて考えてみましょう。

 

1行目で”/sys/class/gpio/export”というファイル?を開いています。

2行目ではioに24を書き込んでいますね。1行目から考えると/sys/class/gpio/export(=io)に書きこんでいる様です。

3行目ではioを閉じています。同様に1行目から間ゲルと/sys/class/gpio/exportを閉じているということでしょうか。

まとめると

「/sys/class/gpio/exportを開いて24を書き込んで最後に閉じてる」ということになります。

デバイスファイル

いきなりですがここで電子工作をするに辺り重要な概念である「デバイスファイル」という考え方を知っておく必要があります。

ちょっと難しいですが頑張って理解して下さいね。

ラズビアンではデバイス(周辺機器)をあたかもファイルのように扱いデータを書き込むことでデバイスを制御します。

このデバイスをあたかもファイルのように扱ったものがデバイスファイルです。

例えばスピーカーで音を出す命令を出したいならspeakerというデバイスファイルにsoundと書きこむといった感じです。

ここまで説明を聞いて先ほどのプログラムを見なおして見るとどうでしょうか。

先ほどの/sys/class/gpio/exportはまさしくGPIOに関するデバイスファイルであるとわかるでしょう。

このようにGPIOを利用する場合は/sys/class/gpioの中にある各デバイスファイルに対して「開けて、書き込んで、閉じる」を繰り返して上げることで様々な操作が行えるのです。

各デバイスファイルの役割

ここまで理解できれば後は

  • どのデバイスファイルが何の役割をしているか
  • なんの値を書き込むと何が出来るか

この2つを知るだけで今回のプログラムはほとんど理解することができます。

まずは各デバイスファイルの役割をザッとみてみましょう。

/sys/class/gpio/export

どのGPIOを利用するか伝えるためのデバイスファイルです。

数字を書きこむ事でその番号のGPIOが仕様できる状態になります。

/sys/class/gpio/exportに24と書きこむ  → GPIO24を使う準備をする

/sys/class/gpio/gpio◯◯/direction

GPIOをプラスとして使うかマイナスとして使うかを決めるためのデバイスファイルです。

in」と書き込めばマイナスに「out」と書き込めばプラスになります。

◯◯の部分にはGPIOの番号が入ります。

/sys/class/gpio/gpio24/directionにoutと書きこむ → GPIO24番をプラスとして使う

/sys/class/gpio/gpio◯◯/value

GPIOをプラスとして使用する場合にonの状態にするかoffの状態にするかを決めるためのデバイスファイルです。

0」と書き込めばoff, 「1」とか着こめばonになります。

/sys/class/gpio/gpio24/valueに1と書きこむ → GPIO24をonの状態にする

/sys/class/gpio/unexport

利用中のGPIOを利用停止するためのデバイスファイルです。

番号を書きこむ事でその番号のGPIOが利用停止状態になります。

/sys/class/gpio/unexportに24と書きこむ → GPIO24の利用を停止する

全体をもう一度見てみる

さてそれでは簡単な説明を加えながらプログラム全体をもう一度順にみてみましょう。

io = open("/sys/class/gpio/export", "w")
io.write(24)
io.close

exportを使ってGPIO24を使う準備をしています。

io = open("/sys/class/gpio/gpio24/direction", "w")
io.write("out")
io.close

GPIO24を使う準備が終わったのでdirectionを使ってプラスとして使う様に指示しています。

io = open("/sys/class/gpio/gpio24/value", "w")
io.write(1)
io.close
sleep 1

valueに1を書きこむことでGPIO24をonの状態にしています。

このタイミングでLEDが光ります

また最後のsleep 1は1秒間寝る…もとい1秒そのままの状態で待機することを指示しています。

これにより1秒間LEDが光続けるわけですね。

io = open("/sys/class/gpio/gpio24/value", "w")
io.write(0)
io.close
sleep 1

先ほどとは逆valueに0を書きこむ事でGPIO24をoffにしています。

これによりLEDが消えます

io = open("/sys/class/gpio/unexport", "w")
io.write(24)
io.close

最後にunexportを使って最後の後始末GPIO24の利用を終了しています。

まとめ

いかがでしょうか。

一度でスッと理解は出来ないかも知れませんが、たったこれだけでLEDは光るんです。

思ったよりもやる事が少なくてビックリしたのではないでしょうか。

次回はLEDの繰り返し点灯に挑戦するので今回の内容を良く復習しておいてください。

近くにあるロボット教室を探す

北海道・東北
関東
北陸・甲信越
東海
近畿
中国
四国
九州・沖縄