2017/10/17 通信処理ネットワーク研究室 河田直樹
今日は ラズパイのセットアップ と Python学習 を行う.
Raspberry PiのセットアップではSDカードにOS(LinuxのRaspbian)を入れて起動し,初期設定を行う.
そのあと,ラズパイでPythonを使って簡単なプログラムを書いてもらう.
前回の宿題でラズパイについて調べてもらい十分な知識がついていると思うが,簡単な説明をさせてもらう.
ラズパイは手のひらに乗るほど小さなコンピュータ(マイコンボード)だ.
見た目はICや各種端子などの部品が配置され基盤がむき出しになっているため頼りなく感じるかもしれない.
しかし,これほど小さくても普通のパソコンのようにOSが起動し,Webページの閲覧や書類の作成などと言ったクライアントパ進としての利用が可能だ.
また,USBやHDMI,GPIOといった沢山のインターフェイスが搭載されている.
創始者のEban Upton氏らが子供でも手軽にプログラミングを行えるコンピュータを構想し,開発したのが始まりだ.
そのため,様々な言語やグラフィカルなプログラミングも可能となっている.
ラズパイを利用してどのようなことが行えるのか,代表的な活用方法を紹介する.
ラズパイはHDMI出力を使ってディスプレイに画面を表示したり,USB端子にキーボードやマウスを接続して操作したり,ネットワークに接続してインターネットにアクセスしたりできる.
いわば小さなパソコンと同じだ.
ラズパイは「ARM」という,省電力で稼働できるように開発されたCPUを採用している.
このARMはスマホや音楽プレイヤーなどのモバイル機器などにもよく利用されている.
ARMを搭載したラズパイは約4W程度の消費電力で動かせる.
これは一般のパソコンに比べて約1/5~1/10の消費電力だ.
省電力なため常時動作するサーバでは大きな節電効果があり,Webサーバやファイルサーバを構築するための様々なアプリケーションも用意されている.
ラズパイには「Scratch」というドラック&ドロップで簡単にプログラムを作成できるアプリがある.
プログラム経験のないユーザでも比較的簡単にプログラミングの原理を学べる.
他にも,PythonやC言語,PHP,Javaなどのプログラミング言語を使ってプログラムの作成が行える.
ラズパイはGPIOという汎用インターフェイスを搭載しており,電気的な入出力が行える.
LEDや表示デバイスを接続して点灯/表示したり,センサーをつないで温度や明るさを計測したりすることなどに利用できる.
ロボットの制御をラズパイで行えば,踊らせるような動作も困難ではない.
さらに,機械や電気のような機器の制御だけでなく,例えばぬいぐるみにセンサーとスピーカーを搭載し,手を握るとしゃべるといったことも可能だ.
工夫次第で様々な分野でラズパイを役立たせることができる.
以下のサイトで様々なユーザがラズパイなどを使ったものづくりを発表しているので,興味があったら見てほしい.
[Make: Japan 検索結果 Raspberry](http://makezine.jp/?s=Raspberry)
今回は時間短縮のため,既にOSの入った状態のSDカードを配布する.
なお,OSのインストールに関しては以下のサイトを参考に進めた.
[Raspberry Pi 3 Model B をインストールしてSSH接続できるようにしてみる – CLARA ONLINE techblog]
(http://techblog.clara.jp/2016/04/raspberry-pi-3-model-b_install_and_ssh_connect/)
ラズパイケースを取り付ける.
図1のABCDの順に乗せていく.
図1
(1) AにBをセットする.
このとき方向に注意して,(図2,3)〇 部分がしっかりハマるようにセットすること.
図2
図3 B取り付け後
(2) そこに上からCを取り付ける(図4,5).うまくケースがセットしないときは一つ前の手順を確認すること.
図4
図5
(3) 最後にDをつけて完成(図6,7).Dにも方向があるので注意.
図6
図7
※なお,取り外す場合は図8の①→②の順番で外すと取れやすい.
図8
(4) SDカードを差し込み,電源以外のコード類を接続する.
① ディスプレイに電源を入れてからラズパイの電源コードを接続する.
ラズパイには電源ボタンなどはなく,電源が入ると自動で起動する.
※今回はNOOBSによるインストールを行った.
利点:インストール用ファイルセットが小規模(1.3GB程度)なので,SDカードへのコピーが安易(数分).
また,WindowsOSからそのままコピーできる.
欠点:Raspberry Pi のSDスロットルから起動後,展開するのに15分程度かかる.
② しばらく待つと図9のようなデスクトップ画面が出る.
左上より[ラズベリーマーク]→[Preferences]→[Raspberry Pi Configuration]をクリック(図10).
図9
図10
③ 図11のような設定画面が出たら[Change Password]をクリック
図11
④ 図12のような画面が出るのでパスワードと確認で上と同じパスワードを入れたら[OK]をクリック
パスワードの設定に成功すると図13のように出るので[OK]をクリック
図12
図13
⑤ [Localisation]のタブをクリックすると図14の画面が出る.
[Set Locale...]をクリックして(図15)Languageをja(japanese)に変更し[OK]をクリック
図14
図15
⑥ 次に[Set Timezone...]をクリック
図16のようにAreaに「Japan」を選択して[OK]をクリック
図16
⑦ 続いて[Set Keyboard...]をクリック
図17のようにCountryに「Japan」,Variantに「Japanese」を選択して[OK]をクリック
図17
⑧ 一番下の[Set WiFi Country...]をクリック
図18のようにCountryに「JP Japan」を選択して[OK]をクリック
図18
⑨ 図19の画面にて設定変更を適応するため[OK]をクリック
図20のように再起動の確認が出るので[Yes]をクリックして再起動させる.
図19
図20
⑩ 再起動が完了するとデスクトップ画面が表示される.
ネットワークに接続する.
図21のように右上のWiFiマーク(図22)をクリックし,「OFDM3535_N」(三谷研のWiFi)を選択する.
図21
図22
⑪ 図23の画面が出るのでパスワードを入れる(ネットで公開はできないので授業内でお知らせ).
図24のマークに変わり接続ができていることを確認する.
図23
図24
⑫ (図25)デスクトップ画面左上より[ラズベリーマーク]→[アクセサリ]→[LXTerminal]をクリック
タスクバーの同様のアイコンをクリックしても起動できる.
図25
⑬ (図26)起動したら以下のコマンドを入力する.
$ sudo apt-get update
このコマンドはサーバからパッケージリストを入手するコマンドだ.
Raspbianのapt-getコマンドはCentOSでいうyumコマンドのようなものである.
図26
⑭ 次に以下のコマンドを入力する.
$ sudo apt-get -y upgrade
このコマンドはインストールされているパッケージの更新をするコマンドだ.
$ sudo apt-get -y install ibus-anthy
このコマンドは日本語入力切替機能をインストールするコマンドだ.
インストール後はSuperキー(Windowsキー)+スペースキーで日本語-英語切替えが可能になる(要再起動).
⑯インストールが終わったら再起動する.
以下のコマンドを入力する.
$ shutdown -r now
プログラミング言語にはいろいろあるが,今回はラズパイでPythonを学んでもらう.
Pythonとは欧米を中心とした,海外で人気のオブジェクト指向型スクリプト言語だ.
言語発展の経緯,文法上の特徴から初心者にも扱いやすい言語と言われている.
しかしながらGoogle・Yahoo・Dropboxなどに代表される有名企業でも利用されていて,初心者にも優しいシンプルさと,大手企業でも採用される十分な奥深さを兼ね備えた言語であると言える.
Pythonでプログラムを実行するには主に以下のやり方で行う.
今回の説明ではインタプリタで実行例を示す.
インタプリタは以下のコマンドを入力することによって開始できる.
$ python
これでプログラムを書き込める状態になる.
例でプログラムを打ち込んでみる.
>>> print "Hello World" Hello World
このように即座に入力したプログラムに対する処理が行われる.
ファイルからは以下のコマンドを入力することでプログラムが実行される.
$ python [ファイル名]
予め以下のプログラムを記述したファイルtest.pyを用意する.
print "Hello World"
そしてtest.pyファイルをPythonで実行すると以下のようになる.
pi@raspberrypi:~ $ python test.py Hello World
このようにプログラムを実行することができる.
Pythonの基本的な構文の使い方をいくつか紹介する.
print文はprint'文字列'またはprint"文字列"のように使用する.
「"」や「'」を使わずに以下のように数値を入れれば計算結果を出力することもできる.
>>> print "1+2" 1+2 >>> print 1+2 3
1文字目は英文字かアンダーバー(_)
2文字目以降は英数文字かアンダーバー
予約語は使用できない.予約語は以下の通り
[and, del, for, is, raise, assert, elif, from, lambda, return, break, else, global, not, try, class, except, if, or, while, continue, exec, import, pass, yield, def, finally, in, print]
大文字と小文字は区別される.
配列のようなもので,型が同じものをまとめるときに使う.
添え字は0からスタート
以下のように代入やアクセスをする.
>>> list = [2014,2015,2016,2017] >>> print list [2014, 2015, 2016, 2017] >>> print list[3] 2017
文字列は「'」(シングルクォーテーション)と「"」(ダブルクォーテーション)の両方で表現できる.
str()int()で以下のように文字列から数値へ,またその逆へと変換することができる.
また,異なった型を合わせようとするとエラーが出る.
>>> s = "100" >>> print s #文字列100を出力 100 >>> print int(s) + 200 #int(s):数値100と数値200を+で加算した 300 >>> i = 100 >>> print i #数値100を出力 100 >>> print str(i) + "200" #str(i):文字列100と文字列200を+で連結した 100200 >>> print int(s)+ "200" Traceback (most recent call last): File "", line 1, in TypeError: unsupported operand type(s) for +: 'int' and 'str' #エラー
raw_input関数で以下のように入力の受け取りができる.
>>> a = raw_input() input test #入力 >>> print a input test #aで受け取ったものの出力
if文は条件分岐を行える.
インデントでブロック構造を表現する.
if 条件式: 条件式が真の時の処理 else 条件式が偽の時の処理
使用例
>>> n=2 >>> if n<=0: ... print "n<=0" ... else: ... print "n>0" ... n>0
条件を満たしている間だけ繰返し.
while 条件式: 条件式が真の時の処理
使用例
>>> num = 0 >>> while num<5: ... print num, "hello" ... num += 1 ... 0 hello 1 hello 2 hello 3 hello 4 hello
オブジェクトに含まれる要素の数だけ繰り返し
for 変数 in オブジェクト: 実行する処理1 実行する処理2
使用例
※range(x,y)は[x,...,y]のリストを意味する.
下の例だとrange(0,5)は[0,1,2,3,4]となる.
>>> for num in range(0,5): ... print num, "hello" ... 0 hello 1 hello 2 hello 3 hello 4 hello
基本的な構文だけでできる項目と追加で知識が必要な項目に分けて出題する.
(1) 1から50までの和を計算して表示せよ
(2) 整数を入力させ,入力された数字の偶数・奇数を判別して表示せよ
(3)次の計算結果を予想せよ
1. 1 + 2
2. 3 + 1.2
3. 1 + True
4. [3,1,4][False]
(4) 1から100までに存在する奇数の足し算結果を出力せよ.
(5) 1から100までの数をプリントするプログラムを書け.
ただし3の倍数のときは数の代わりに「Fizz」と,
5の倍数のときは「Buzz」とプリントし,
3と5両方の倍数の場合には「FizzBuzz」とプリントすること.
(1) 次のHello関数を Hello() 以外で呼び出す
def Hello(): print "Hello"
(2)1-99までの奇数と偶数を表示する(自作関数を使おう)
(3)与えられた数が素数かどうか調べるプログラム(自作関数を使おう) dspトップへ