Raspberry PiでIOT |
AIを搭載したロボットを自作してみようと思い立って、Raspberry Piをロボットのコンピュータボードとして活用することにしました。発展途上(衰退途上?)中なので、とりあえずRaspberry Pi(ラズパイ)の基本的な操作法と応用例について、実際に直面した実情などを報告します。
このページでは、OSとしてRaspbian(Devian stretch: kernel 4.5)をインストールすることを前提にします。Ubuntu Mateをインストールする時の操作方法については、別のページに書いてあります。使用するPCはMacですが、LinuxやWindowsでも大部分は利用可能だと思います。初歩的な電子工作の実例を紹介します。
Raspberry Pi をIOTで活用するにあったて必須のWebIOPIのインストールと使用方法について説明します。RCタンク車を製作して、スマホから操作する方法の実例を紹介します。使用されるpythonはOSに同梱されているpython2.7 です。python3.xもインストールされていますが、ほとんどは使用されていません。
Last updated: 2018.9.14
Raspberry Pi のGPIOに関する基礎的操作(Mac OSで) |
Raspbian Stretch OSのインストールについては、RaspberryPiにRaspbian OSのインストールのページ
を参照ください。また、Pythonの基礎的な理解も必要です。Pythonの入門的な解説は
PythonのTutorialsを参照ください。
Raspberry Piの基本的セットアップです。LCDにデスクトップが表示がされています。
このLCDで表示するためには当該ソフトウエアのインストールが必要です。
Raspberry Piの(40個の入出力ピンから構成される)GPIOに多種類の外部機器を接続できます。例えば、センサー、カメラ、モーター、総称してロボットなどの機器を接続すれば、これらの機器を自由に操作することができます。こうした操作のためにはPythonのコードを実行する必要があります。Raspbian Stretch OSのインストール時に、Python2.7とPython3.5 が一緒にインストールされます。
Pythonスクリプト・ファイルを作成するためにはテキスト・エディターが必要です。Raspberry Piにインストールできるエディターは、nano, leafpad, gedit, Viなどです。leafpadやnanoなどはデフォルトでインストールされています。Viは多様な機能紙を持っていますが、相当の慣れが必要です。好みのエディターが必要な時は、インストールしましょう。例えば、簡易なnanoやgeditをインストールする時は
$ sudo apt-get install nano $ sudo apt-get install gedit
とします。gedit エディターはRasPiに接続したモニターのデスクトップでは使用できますが、リモートPCに表示したデスクトップからは使用できません。nano は両方で使用できます。
タクトスイッチでledを点灯するような実験は、Pythonスクリプトを書いて、それを実行すると、実現できます。RaspiのデスクトップでPython IDLEで走らせることも、リモートPCのTerminalから実行することもできます。例えば、以下のようなPythonスクリプトを作成して、拡張子.pyをつけたled.pyという名前で適当なディレクトリに保存してください。
import RPi.GPIO as GPIO from time import sleep GPIO.setmode(GPIO.BCM) GPIO.setup(25, GPIO.OUT) GPIO.setup(24, GPIO.IN) try: while True: if GPIO.input(24) == GPIO.HIGH: GPIO.output(25, GPIO.HIGH) else: GPIO.output(25, GPIO.LOW) sleep(0.01) except KeyboardInterrupt: pass GPIO.cleanup()
例えば、Python スクリプトをexamplesに保存した場合、Terminalで
cd examples/ python led.py
と入力します。ここで、python2.7が起動されて、スクリプトが実行されます。
この実験のスクリプトと配線図は、金丸 隆志著『Raspberry PIで学ぶ電子工作』講談社(5章)に解説があります。
GPIOの24番ピン、25番ピン、及び、電源とアースピンから4本のジャンパー・コードが出ています。
実行を停止したい時は、[Ctrl]キーを押しながら[c]キーを押す。「Ctrl-c」で終了と言います。
以下に二つの実験例を上げておきます。興味ある人は挑戦してみてください。
*************************************
小型LCDに挨拶を表示した例:配線とPythonスクリプトは、
http://www.hiramine.com/physicalcomputing/raspberrypi3/webiopi_lcd.html、を参考にしました。
小型LCDに時刻を表示させる。配線とPythonスクリプトに関しては、
http://www.hiramine.com/physicalcomputing/raspberrypi3/webiopi_lcd.html、を参考にしました。
PCのterminalからRaspberyPiを操作する方法 |
無線LANへの接続が可能になっている。Raspberry Piの設定でssh接続の設定が済んでいることを前提にします。
RaspberyPIのIPアドレスをコマンドプロンプトで調べたいときは、ターミナルでifconfigと入力すると、ネットワークデバイスの情報が表示されるので、wlan0という項目で、192.168.11.5.のように表示されいるIPアドレスを使う。また、RaspberryPiのIPアドレスを調べるには、RaspberryPiのモニター上にあるWiFi表示にマウスを重ねると、表示される。例えば wlan0: Configured 192.168.11.5/24 と表示される。
sshによるリモートログイン方法は、ユーザー名がpiなので、PCのterminalで
$ ssh pi@192.168.11.9
と入力する。passwordはraspberryです。
Raspberry Piのシャットダウン方法は
$ sudo shutdown -h now
と入力する。
WebIOPiのサービスを開始するための手順:
Raspbery Piをリモートコントロールするためには、Webiopiをインストールする必要があります。以下のsourceforgeから最新のwebiopiをダウンロードする。
$ wget https://sourceforge.net/projects/webiopi/files/WebIOPi-0.7.1.tar.gz
ダウンロードされたファイルはDownloadsのディレクトリに保存されているので、
$ cd Downloads/ $ tar zxf WebIOPi-0.7.1.tar.gz
と入力して、ダウンロードしたWebIOPiを解凍する。次に、修正プログラムをダウンロードし、セットアップします。
$ cd WebIOPi-0.7.1/ $ wget https://raw.githubusercontent.com/doublebind/raspi/master/webiopi-pi2bplus.patch $ patch -p1 -i webiopi-pi2bplus.patch $ sudo ./setup.sh
完了すると、DO you want access webiopi over internet?[y/n] と聞いてくるので、nと入力する
WebIOPiのサービスを開始するために必要なファイルをダウンロードする。
$ wget https://raw.githubusercontent.com/neuralassembly/raspi/master/webiopi.service $ sudo mv webiopi.service /etc/systemd/system/
と入力して、インストールする。
WebIOPiのサービス起動は
$ sudo service webiopi start
停止は
$ sudo service webiopi stop
と入力します。
WebIOPIの自動起動の方法:RaspberryPiが起動すると同時にWebIOPIが起動させるためには
$ sudo systemctl enable webiopi
と入力する。停止するときは
$ sudo systemctl disable webiopi
とコマンドを入力する。
PCまたはスマートフォンからWebIOPiへアクセスするための手順 |
例えば、GPIO12のINをOUTに変化させて、32番(GPIO12)ピンをクリックしてオレンジ色(high)に変化させることができます。変更前はGPIO12ピンは入力用のピンでしたが、この操作により、GPIO12ピンからそこに接続されたワイヤに高い電圧の信号を出力することになります。
PCのブラウザまたはスマホからWebIOPiを活用してRaspberryPiを操作する方法 |
(A) WebIOPiのコンテンツディレクトリにファイル1式をコピーして実行させる方法
$ sudo chown -R pi /usr/share/webiopi/htdocs
$ cd raspberry $ cp -r examples/bb /usr/share/webiopi/htdocs
$ sudo nano /etc/webiopi/config
(B) WebIOPiのConfigファイルを修正してPythonスクリプトを実行させる方法
$ sudo webiopi -d -c /etc/webiopi/configPCまたはスマホのブラウザでRaspberyPiのポート8000に
http://192.168.11.9:8000/
と入力して接続する。/myproject/html/index.htmlのコードが実行されてブラウザに表示され、/myproject/python/script.pyのPythonコードが実行される。
RCtank車の制作とスマホによるリモート操作 |
タミヤ工作セットを使って制作して、ラズパイを搭載したタンクカーです。車体を回転するときにはトラックベルトがホイールから脱輪する現象が起こります。もう少し頑強な4輪駆動構造が良いと思います。
分解すると、このようなコンポーネントから構成されていることがわかります。DCモータを組み込んだ車体、電源用の電池セット、ラズパイのボード、モータードライバーと入出力ピンを組み込んだ配線ボードです。欲張って、カメラやセンサーを搭載することもできます。
VNCを使用してリモートPCからRaspberryPiのデスクトップを操作する方法 |
$ sudo apt-get update $ sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer
password: raspberry
とする。VNCviewerを利用してRaspberry PiのデスクトップをMac PCのデスクトップ画面に表示して、操作できます。
web cameraを用いて動画・写真をキャプチャする |
Raspberry Pi と、WEBカメラ (PiCamera)があれば、簡単に動画ストリーミングを行うことができます。ソフトウェアとしては、MJPG-streamerを使用します。WEBカメラとして、ここでは、Web カメラとしてLOGICOOL C310を用います。PiCameraでも同様の結果が得られますが、そのためには、「Raspberry Piの設定」の「インターフェース」で「カメラ」をEnable(有効)に設定しておきます。
最初に、MJPG-streamerのインストールを行います。 ターミナルからssh接続で、Raspberry Piに接続してください。最新のパッケージリストを取得します。以下のコマンドを入力してください。
$ sudo apt-get update
$ sudo apt-get install subversion libjpeg-dev imagemagick
$ svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer mjpg-streamer $ cd mjpg-streamer $ make
$ sudo ./mjpg_streamer -i "./input_uvc.so -f 10 -r 320x240 -d /dev/video0 -y -n" -o "./output_http.so -w ./www -p 8080"
$ cd mjpg-streamer $ sudo ./mjpg_streamer -i "./input_uvc.so -f 10 -r 320x240 -d /dev/video0 -y -n" -o "./output_http.so -w ./www -p 8080"
この画面上でStreamの項をクリックすると、web cameraの映像が表示されます。
長いコマンド文を毎回入力することは煩雑なので、以下のようなshスクリプトを作成します。
#!/bin/sh # This is Web-streaming server start up script.for raspi cd mjpg-streamer sudo ./mjpg_streamer -i "./input_uvc.so -f 15 -r 640x320 -d /dev/video0 -y -n" -o "./output_http.so -w ./www -p 8080" echo "mjpg_streamer started"
$ cd $ sh ./stream.sh
VNCviewerを使用しているときは、cheeseというソフトを用います。以下のように、インストールします。
$ sudo apt-get update $ sudo apt-get install cheese続行しますか? [Y/n]と聞いてくるので、Yと入力します。数分後に、インストールが完了します。