Raspberry PiでIOT

Raspberry Piで電子工作

AIを搭載したロボットを自作してみようと思い立って、Raspberry Piをロボットのコンピュータボードとして活用することにしました。発展途上(衰退途上?)中なので、とりあえずRaspberry Pi(ラズパイ)の基本的な操作法と応用例について、実際に直面した実情などを報告します。
  このページでは、OSとしてRaspbian-stretch(kernel 4.5)をインストールすることを前提にします。Ubuntu Mateをインストールする時の操作方法については、別のページに書いてあります。使用するPCはMacですが、LinuxやWindowsでも大部分は利用可能だと思います。初歩的な電子工作の実例を紹介します。
  Raspberry Pi をIOTで活用するにあったて必須のWebIOPIのインストールと使用方法について説明します。RCタンク車を製作して、スマホから操作する方法の実例を紹介します。使用されるpythonはOSに同梱されているpython2.7 です。python3.xもインストールされていますが、ほとんどは使用されていません。

関連記事
RaspberryPiにRaspbian OSのインストール
RaspberryPiで画像処理 - OpenCV
RaspberryPiでDeep Learning
Movidius NCS + RaspberryPiでObject Detection
Ubuntu 16.04のインストール:RaspberryPi
ROS(Robot Operating System)のインストール
Deep Learningと人工知能
PythonのTutorials/Jupyter Notebook
My GitHub repositories

Last updated: 2018.9.14


*************************************************************************
Raspberry Pi のGPIOに関する基礎的操作 (Mac OSで)
*************************************************************************


Raspbian Stretch OSのインストールについては、RaspberryPiにRaspbian OSのインストールのページ
を参照ください。また、Pythonの基礎的な理解も必要です。Pythonの入門的な解説は PythonのTutorialsを参照ください。

raspilcd.jpg

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が起動されて、スクリプトが実行されます。

led1.jpg
 この実験のスクリプトと配線図は、金丸 隆志著『Raspberry PIで学ぶ電子工作』講談社(5章)に解説があります。GPIOの24番ピン、25番ピン、及び、電源とアースピンから4本のジャンパー・コードが出ています。

 実行を停止したい時は、[Ctrl]キーを押しながら[c]キーを押す。「Ctrl-c」で終了と言います。

 以下に二つの実験例を上げておきます。興味ある人は挑戦してみてください。
******************
webiopilcd_1.jpg

小型LCDに挨拶を表示した例:配線とPythonスクリプトは、
http://www.hiramine.com/physicalcomputing/raspberrypi3/webiopi_lcd.html、を参考にしました。


******************
webiopilcd_2.jpg

小型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へアクセスするための手順 
********************************************


 無線LANへの接続が可能になっていること、及び、Raspberry Piの設定でssh接続の設定が済んでいることを前提にします。PCのTerminalからWebIOPiを起動させておきます。

 PCのブラウザまたはスマホを用いたWebIOPiへのリモートアクセス方法

 'ifconfig' コマンドで、例えば wlan0: Configured 192.168.11.5/24 と表示されるとき、このIPアドレスのポート8000に接続する。スマホまたはPCのブラウザから

http://192.168.11.5:8000/
と入力する。
username: webiopi
password: raspberry

 接続に成功すると、ブラウザ上にWebIOPi Main Menuが表示されます。この画面のHeaderページでGPIOピンのIN,OUTなどを変更することができます。

 下の画面はPCからWebIOPiへアクセスした時のGPIO Headerです。

 例えば、GPIO12のINをOUTに変化させて、32番(GPIO12)ピンをクリックしてオレンジ色(high)に変化させることができます。変更前はGPIO12ピンは入力用のピンでしたが、この操作により、GPIO12ピンからそこに接続されたワイヤに高い電圧の信号を出力することになります。

********************************************
PCのブラウザまたはスマホからWebIOPiを活用してRaspberryPiを操作する方法
********************************************


Pythonプログラムでリモートブラウザにボタン等を表示させるためにはWebIOPiのコンテンツディレクトリ(/usr/share/webiopi/htdocs)にPythonファイルをコピーしておく、または、PythonファイルへアクセスするようにWebIOPiのConfigファイルを修正するという二つ方法がある。

(A) WebIOPiのコンテンツディレクトリにファイル1式をコピーして実行させる方法


最初の方法では、管理者権限でアクセスするために、

$ sudo chown -R pi /usr/share/webiopi/htdocs


と入力する。

 実際にラズパイを動かすためには、実験用のファイル一式、Pythonのscript.py, HTMLのindex.html, CSSのstyles.css, JavaScriptのjavascript.jsなどから構成されるファイル一式が必要です。ブラウザにラズパイ操作のためのGUIインターフェース用のWebページを作成するためにHTMLファイル及びそれに付随するJavascriptファイルとCSSファイルが必要です。Web上の操作をラズパイのGPIOの操作に変換するためのプログラムはPythonのスクリプトが担います。

 ファイル一式が ディレクトリ /home/pi/raspberry/examples/bbにある場合、

$ cd raspberry
$ cp -r examples/bb /usr/share/webiopi/htdocs


を実行してファイルをコピーする。

 次に、WebIOPiの設定ファイルを修正する。

$ sudo nano /etc/webiopi/config


と入力してエディターで設定ファイルを開く。画面をスクロールして、[scripts]の箇所のmyscriptの行を

#------------------------------------------------------------------------#
[SCRIPTS]
# Load custom scripts syntax :
# name = sourcefile
# each sourcefile may have setup, loop and destroy functions and macros
#myscript = /home/pi/webiopi/examples/scripts/macros/script.py
myscript = /usr/share/webiopi/htdocs/bb/script.py
#------------------------------------------------------------------------#
と修正し、
Ctrl+o で上書き、
enterキー で保存し、
Ctrl+x  でnanoを終了する。入力ミスを犯した時は、Ctrl+x で保存をnとして終了する。#記号はコメントを意味して、その行にある文を無効にしている。

PCまたはスマホのブラウザでRaspberyPiのポート8000に

http://192.168.11.9:8000/bb/

と入力して接続する。/bb/script.pyのPythonプログラムが実行されて、ブラウザ上に表示されるボタンなどをクリックする操作でWebIOPiが動きます。

led点灯制御をブラウザのボタンから行うときのブラウザ表示の例です 。
この例は、金丸 隆志著『Raspberry PIで学ぶ電子工作』講談社(9章9.3)に説明があります。使用したファイル1式もダウンロードすることができます。
******************

(B) WebIOPiのConfigファイルを修正してPythonスクリプトを実行させる方法


この場合には(実例ファイル一式を/usr/share/webiopi/htdocs/ディレクトリにコピーしないとき)、Configファイルの[scripts]セクション、及び、ブラウザでの操作を必要とするケースでは[HTTP]セクションを修正する必要があります。

(1)作業用のディレクトリを作成する。例えば、
/home/pi/myproject
というフォルダーを作成する。これがメイン・フォルダーとなる。このフォルダーの下に、pythonとhtmlという名前のディレクトリを作成する。pythonディレクトリの下に実行したいpython sscriptを、htmlの下にhtmlファイル一式(index.html、JavasciptやCSSファイル)を置く。
home
- pi
- myproject
- python
- html
を作成する。 (2) Configurationの修正方法
/etc/webiopi/config を開いて、以下の通りに修正する。
• [SCRIPTS] sectionで、pythonコードの置いてあるパスを以下のように追加する
...
[SCRIPTS]
...
#myscript = /home/pi/webiopi/examples/scripts/macros/script.py
myproject = /home/pi/myproject/python/script.py
...
• [HTTP] sectionで、WebIOPiにHTMLファイルが置かれているパスを支持するために
...
[HTTP]
....
#doc-root = /home/pi/webiopi/examples/scripts/macros
doc-root = /home/pi/myproject/html
...
と修正する。
To debug your script and config, you should first run WebIOPi foreground before using the daemon service :
$ sudo webiopi -d -c /etc/webiopi/config
PCまたはスマホのブラウザでRaspberyPiのポート8000に

http://192.168.11.9:8000/

と入力して接続する。/myproject/html/index.htmlのコードが実行されてブラウザに表示され、/myproject/python/script.pyのPythonコードが実行される。

********************************************

RCtank車の制作とスマホによるリモート操作

********************************************


 RCtank車を作り、スマホからリモート操作してみよう。物理的コンポーネントは、
「RCタンク を作る ( 楽しい工作シリーズ + Raspberry Pi 3 + Wi-Fi + Webブラウザ )」
)で説明されている通りにしました。
ソフトウエア仕様は金丸 隆志著『Raspberry PIで学ぶ電子工作』講談社(10章)で使用されたファイル1式を援用させていただきました。ハードウエアとソフトウエアを適合させるために若干の修正をしました。
tankcar1.jpg

タミヤ工作セットを使って制作して、ラズパイを搭載したタンクカーです。車体を回転するときにはトラックベルトがホイールから脱輪する現象が起こります。もう少し頑強な4輪駆動構造が良いと思います。

tankcar2.jpg

分解すると、このようなコンポーネントから構成されていることがわかります。DCモータを組み込んだ車体、電源用の電池セット、ラズパイのボード、モータードライバーと入出力ピンを組み込んだ配線ボードです。欲張って、カメラやセンサーを搭載することもできます。


********************************************

VNCを使用してリモートPCからRaspberryPiのデスクトップを操作する方法

********************************************


 PCのdesktopにRaspberryPiのdesktopを表示させて操作する

(1) RaspberyPiでのVNCserverのインストール

 defaultでVNCはインストールされているので、RaspberryPiの設定でVNCを有効に設定すれば、vnc viewerを利用できます。
または、RaspberyPiのterminalで

$ sudo apt-get update 
$ sudo apt-get install realvnc-vnc-server realvnc-vnc-viewer


と入力する。(最新バージョンへのアップデート)

(2) PCでのVNCviewerのインストール(WiFiでPCとRaspberypiが接続していることが前提)

以下のサイトからrealVNCviewerをダウンロードする。(https://www.realvnc.com/en/)
PCのvncviewer iconをクリックすると、デスクトップにvncviewerのウインドウが開きます。PCのdesktopに表示されるポップアップ画面内でRaspberrypiのIPアドレスを入力して、パスワードを聞いてくるので

password: raspberry

とする。

Raspissh.jpg

VNCviewerを利用してRaspberry PiのデスクトップをMac PCのデスクトップ画面に表示して、操作できます。


**************************************************************

web cameraを用いて動画・写真をキャプチャする

**************************************************************


ターミナルからssh接続

Raspberry Pi と、WEBカメラ をがあれば、簡単に動画ストリーミングを行うことができます。ソフトウェアとしては、MJPG-streamerを使用します。WEBカメラとして、ここでは、 LOGICOOL C310を用います。
最初に、MJPG-streamerのインストールを行います。
ターミナルからssh接続で、Raspberry Piに接続してください。最新のパッケージリストを取得します。以下のコマンドを入力してください。

$ sudo apt-get update


続いて、MJPG-streamer に必要なパッケージである、subversion、libjpeg-dev、imagemagick、をインストールします。以下のコマンドを実行します。

$ sudo apt-get install subversion libjpeg-dev imagemagick


MJPG-streamerのソースファイルの取得とコンパイルを行うために、以下のコマンドを実行します。

$ svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer mjpg-streamer
$ cd mjpg-streamer
$ make


WEBカメラを、Raspberry Pi に接続します。以下のコマンドを実行し、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"


パラメーターは必要に応じて変更します。
-f : frame rate : ストリーム動画のフレームレート(1秒あたりのフレーム数)を指定します。(例:-f 10)
-r : resolution : ストリーム動画の解像度を指定します。(例: -r 320x240)
ウェブのIPのポート番号が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"


と入力し、mjpg-streamerを立ち上げます。停止は[Ctrl+c]で終了します。

  Webブラウザを起動し、Raspberry Pi のポート8080にアクセスすると、以下のようなページが表示されます。
mjpg_streamer.pdf
この画面上で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"


このコードをstream.shという名前で、ホームディレクトリに保存してください。webカメラを使用する前に、

$ cd 
$ sh ./stream.sh


とコマンドを入力すれば、mjpg-streamerが立ち上がります。終了は[Ctrl+c]です。

VNCviewerを用いて

VNCviewerを使用しているときは、cheeseというソフトを用います。以下のように、インストールします。

$ sudo apt-get update 
$ sudo apt-get install cheese

続行しますか? [Y/n]と聞いてくるので、Yと入力します。数分後に、インストールが完了します。
インストール後、GUIのメニューのSound&Videoの項目からcheeseを起動します。

RaspberryPiでDeep Learningに続く。

トップページに戻る