(35連休)12日目:Raspberry Pi(はじめての電子工作①:WEBIOPiでスマートフォンでLEDを点灯させるところまで)
ジャンパワイヤとか、LEDとか少し部品を揃えたので、電子工作を始めました。*1
本日は、定番のLEDを光らせるというのをやってみました。ほんとに初歩的なところから始めて、WEBIOPiでスマホでLEDを制御するところまでいけました。楽しい・・・!
そのうち赤外線モーションセンサとかを接続してみる予定です。
前提と目次
前提
Raspberry Piのセットアップ関連は終わらせている前提です。
今回のを実施する上で前提となるのは下記あたりかな。
http://hsuetsugu.hatenablog.com/entry/2014/08/10/181408
http://hsuetsugu.hatenablog.com/entry/2014/08/11/112032
目次
①LEDをただただ光らせる
②LEDの点灯をRaspberry Piで制御してみる。
1)コマンドラインでLEDを制御
2)WiringPiでLEDを制御する
3)RubyでLEDを制御してみる(プログラムでチカチカさせる)
③PWMでLEDの明るさを制御してみる
④スマートフォンでGPIOを制御してみる
※RaspberryPiのGPIOポートのピン配置については下記サイトをご参照ください。
http://www.myu.ac.jp/~xkozima/lab/raspTutorial3.html
①LEDをただただ光らせてみる
下記のように接続して、無事、点灯しました。電源端子はPin1、GNDはPin6で、LEDには極性があるので、長い方(アノード)をプラス側、短い方(カノード)をマイナス側に接続します。
②LEDの点灯をRaspberry Piで制御してみる。
いろんなやり方でやってみました。
WiringPiのインストール
Raspberry Pi用のGPIOのライブラリであるWiringPiをいれます。これを使うことで、コマンドラインからGPIOを制御できるようになるようです。
$ sudo apt-get install libi2c-dev $ sudo apt-get install git-core $ git clone git://git.drogon.net/wiringPi $ cd wiringPi/ $ ./build $ gpio -v gpio version: 2.20 Copyright (c) 2012-2014 Gordon Henderson This is free software with ABSOLUTELY NO WARRANTY. For details type: gpio -warranty Raspberry Pi Details: Type: Model B, Revision: 2, Memory: 512MB, Maker: Sony
配線
GPIO4(Pin7)にLEDを接続して、GPIOポートを制御します。
1)コマンドラインでLEDを制御する
- piユーザがgpioというグループに属するか確認します。あればpiユーザでGPIO関係のファイルにアクセスできるようです。
$ sudo su # id -Gn pi pi adm dialout cdrom sudo audio video plugdev games users netdev input spi gpio root@raspberrypi:/home/pi # exit
- どのGPIOポートを使うのか宣言。これで下記の通りgpio4という仮想ディレクトリができます。
$ echo 4 > /sys/class/gpio/export $ cd /sys/class/gpio $ ls export gpio4 gpiochip0 unexport
- 入出力の方向をoutで宣言
$ echo out > /sys/class/gpio/gpio4/direction
- 点灯させる
$ echo 1 > /sys/class/gpio/gpio4/value
- 消灯させる
$ echo 0 > /sys/class/gpio/gpio4/value
2)WiringPiでLEDを制御する
- モードの設定
$ gpio -g mode 4 out
- 点灯させる
$ gpio -g write 4 1
- 消灯させる
$ gpio -g write 4 0
3)RubyでLEDを制御してみる
参考URL:Raspberry PiとRubyでLED制御 - Raspberry Pi 電子工作
これをそのままやってみて、無事チカチカしてくれました。
$ cd /home/pi $ sudo ruby lchika4.rb
lchika4.rb
io = open("/sys/class/gpio/export", "w") io.write(4) io.close dir = open("/sys/class/gpio/gpio4/direction", "w") dir.write("out") dir.close out = 1 10.times do v = open("/sys/class/gpio/gpio4/value", "w") v.write(out) v.close out = out == 1 ? 0 : 1 sleep 0.5 end uexport = open("/sys/class/gpio/unexport", "w") uexport.write(4) uexport.close
③PWMでLEDの明るさを制御してみる
GPIOの出力は0か1か(0Vか3.3Vか)しかないので、明るさを変更することは通常できませんが、PWM(Pulse Width Modulation:パルス幅変調)という仕組みでOnとOffの長さの比率をコントロールすることにより、本当はOn/Offしているだけなのですが、その時間感覚を調整することで人間の目には明るさの違いとして感じられるようになるようです。
配線
PWMに対応したポートはGPIO18なので、LEDをGPIO18(Pin12)に接続します。
明るさを調整してみる。
- GPIO18をPWM出力モードで宣言する
$ gpio -g mode 18 pwm
- 明るさを指定する。
$ gpio -g pwm 18 1023 $ gpio -g pwm 18 255 $ gpio -g pwm 18 127
④スマートフォンでGPIOを制御してみる
最後に、Raspberry Pi用のGPIO制御フレームワークであるWEBIOPiを使ってLEDを制御してみます。
WEBIOPiをインストール
$ wget http://webiopi.googlecode.com/files/WebIOPi-0.6.0.tar.gz $ tar xvfz WebIOPi-0.6.0.tar.gz $ cd WebIOPi-0.6.0/ $ sudo ./setup.sh
WEBIOPiの起動
$ sudo /etc/init.d/webiopi start
- システム起動時に起動されるように
$ sudo update-rc.d webiopi defaults
- piユーザでコンテンツがアップロードできるように
$ sudo chown pi -R /usr/share/webiopi/htdocs
ブラウザで確認
WEBIOPiは簡易Webサーバー機能があるらしく、ブラウザからすぐにGPIOの制御ができます。http://raspberrypi.local:8000/とみてみると、下記のような画面がでてきます。
ここでGPIO Headerをクリックすると、下の画面に遷移し、Raspberry PiのGPIOポートの配置と各ポートの状態が表示されます。GPIO18(Pin12)に接続しているので、この「12」というところをクリックすると出力が0→1→0・・・と変化していき、それにあわせてLEDも点灯・消灯します。
当たり前ですが、同じネットワークに接続しているスマホからも上記操作ができました。一応、ここまででもスマホでLEDの点灯・消灯を制御できたことになります。
WEBIOPiのAPI
下記にまとまっています。
RESTAPI - webiopi - Internet of Things framework - Google Project Hosting
REST APIなので、Apache/phpで制御する仕組みをやってみようと思いますが、長くなったので今回はここで終わりにします。続きます。
*1:前回のRStanの計算が終わらないという理由もありますが・・。