スマホで赤外線機器を操作したいと思って、RaspberryPiが安くて簡単に無線LAN化もできるし、Debianも入るよと聞き、早速秋月電子でRaspberry Pi Type B+を買ってきた。
ARMだけど、Debianが動けばなんでもできる気になるよね!
RaspberryPiのセットアップ
NOOBS LITE を使って、Debianを構築
ツールも付いてるっぽいので、NOOBS LITEを使ってインストールすることにする。
http://www.raspberrypi.org/downloads/
NOOBS LITEをダウンロード。
付属の、 INSTRUCTIONS-README.txt を見ると、SDカードのフォーマットについて記載があり、そのとおりにする。
SDカードフォーマットプログラムをダウンロード。
https://www.sdcard.org/downloads/formatter_4/eula_mac/
モードを"上書きフォーマット"に変更し、フォーマットを実施。16GのSDカードで1時間近くかかった。
SDカード内に、ダウンロードしたプログラムをすべてコピーする。このZIP、23MBしかないので、このコピーは一瞬。
その後、RaspberryPiにSDカードを挿入し、HDMIケーブル、キーボード、LANケーブルを接続し、電源ケーブルを接続して電源ONにする。
すると、RaspberryPiが起動し、インストールするOSを選択する画面が出てきた。
キーボードの"l"を押して、"日本語"を選択すると、一部だけ日本語になった。LanguageDebianマークの"Raspbian"を選択し、インストールを継続。
DHCPでネットワーク接続もでき、ネットワークインストールが始まる。2時間ほどで完了。
初回起動では"Raspberry Pi Software Configuration Tool"が立ち上がったが、特に設定せず、そのまま"Finish"を選択した。
有線ネットワーク設定
固定IPに変更する。
元のネットワーク設定
$ sudo vi /etc/network/interfaces auto lo iface lo inet loopback iface eth0 inet dhcp
"eth0"の部分を変更する。IPアドレスは"192.168.1.100"とする。 ちなみに、うちは内部DNSサーバを立てているので、それを設定している。
$ sudo vi /etc/network/interfaces auto eth0 iface eth0 inet static address 192.168.1.100 network 192.168.1.0 netmask 255.255.255.0 broadcast 192.168.1.255 gateway 192.168.1.1 dns-nameservers 192.168.1.50
DNSはこちらに設定しなければならないらしい。
$ sudo vi /etc/resolv.conf nameserver 192.168.1.50
$ sudo service networking restart
これでRaspberryPiにキーボードを接続しなくても、ユーザ名:pi、パスワード:raspberry でログインできる。 さらにはじめからsshdが起動しているため、すぐにPCからsshでアクセスできる
$ ssh pi@192.168.1.100
このあとは、すべてsshで操作する。
ユーザの作成
$ sudo adduser j74th
電子回路を扱う操作はスーパーユーザでなければ扱えないらしい。sudoで新しいユーザを扱えるようにする。
$ export EDITOR=vi $ visudo pi ALL=(ALL) NOPASSWD: ALL atsushi ALL=(ALL) NOPASSWD: ALL
その他
自分のvimrcを適用して、vimを起動したところ、以下の様なエラーが出た。
$ vi E319: Sorry, the command is not available in this version: let g:j74VimRepoPath = '~/dotfiles/vimrc/'
vimではなく、viが動いているという話らしい。.vimrcなのに。 vimをインストールしたところ、正常に動作した。
$ sudo aptitude install vim
LEDを光らせる
ブレッドボードとか、抵抗とか触ったの、大学3年の実験の授業以来だ。
配線!
秋月電子通商秋葉原店で、わけもわからず、以下のものを買ってきた。
- ブレッドボード(270円) : http://akizukidenshi.com/catalog/g/g100315/
- ジャンパーワイヤセット オス-オス(250円) : http://akizukidenshi.com/catalog/g/g102315/
- ジャンパーワイヤ オス-メス(330円) : http://akizukidenshi.com/catalog/g/g103473/
- カーボン抵抗 1W68Ω (100個200円) : http://akizukidenshi.com/catalog/g/g107966/
- 高輝度LED(10個400円) : http://akizukidenshi.com/catalog/g/g104766/
買った本に書いてあった抵抗を購入。 ジャンパーワイヤはRaspberryPiにはメスが必要だと調べていたので、オス-メスも購入。 家に帰ってから、LEDが割高な高輝度のものだったことを知る。
試しに、以下のように配線して光ることを確認。
- 1ピン(3.3V) -> LEDの陽極
- LEDの陰極 -> 抵抗68Ω ->> 6ピン(GND)
制御するために、以下のように配線。
- 11ピン(GPIO) -> LEDの陽極
- LEDの陰極 -> 抵抗68Ω ->> 6ピン(GND)
サンプル程度を動かす
Pythonで簡単に光らせられるということで、サンプルソースをいじってみる。
mport RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BOARD) GPIO.setup(11,GPIO.OUT) def tikatika(): for i in range(50): GPIO.output(11,True) time.sleep(0.2) GPIO.output(11,False) time.sleep(0.2) tikatika()
GPIOにアクセスするには、スーパーユーザ権限が必要。
$ sudo python3 test.py
おー、光った光った。 やってることは、11ピンを0.2秒ごとにオン、オフしているだけ。
Webサーバにする
どうせなので、Webサーバにして、ひからせましょう。
from http.server import HTTPServer, SimpleHTTPRequestHandler import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BOARD) GPIO.setup(11,GPIO.OUT) def tikatika(): for i in range(50): GPIO.output(11,True) time.sleep(0.03) GPIO.output(11,False) time.sleep(0.03) class HTTPHandler(SimpleHTTPRequestHandler): def do_GET(self): res = b'TikaTika!' self.send_response(200) self.end_headers() self.wfile.write(res) tikatika() server = HTTPServer(('192.168.1.100', 8000), HTTPHandler) server.serve_forever()
簡易的なサーバを作のもPythonだと楽。これで、iPhoneからhttp://192.168.1.100:8000/にアクセスすると、ちかちかLEDが点滅するシステムが出来た。
この先
参考書籍
訳本。RaspberryPiのセットアップ画面の説明とか、電子回路のIO部分のそれぞれの説明とか書かれていて、RaspberryPiとはどんな機能を備えているのかがわかった。 最終的にはモータ駆動まで扱っているが、電子回路の理論や、プログラミングの詳細までは扱えていない。電子工作サンプルは少ない。 Linux経験者には、まずDebianサーバとしてとっつきやすい。
スイッチのために電子回路をどうすべきとか、Pythonプログラミングで使えるGPIO関数の説明とか、少しずつステップで記載されていて、電子回路をちゃんと勉強している気になる。