![見出し画像](https://assets.st-note.com/production/uploads/images/8820763/rectangle_large_type_2_5b49546278ed6dca135a270e0a521075.jpg?width=800)
Day8. 『Raspberry Pi』セットアップからはじめリアルタイム温度計を作る!
※ひとりでIoTまるっとチュートリアル Advent Calendar 2018
8日目の記事です。まだ登録していない方はこの機会によろしくおねがいします!
「ラズパイ」
電子工作をしている人は、Arduino(アルディーノ)と同じくらい、こいつの名前もよく聞くと思います。Arduinoよりも、もっとPCに近いものです。特徴としてはOSを元に動くので、我々が普段使っているPCとほとんど遜色なく動きます。最近ではWiFiモジュールやBluetoothモジュールも内蔵されており、ますます色々なことができるようになっています。
今回は、raspberry piについて、詳しく触れていきましょう。
目次
・Raspberry Piとは
・準備(ものを揃える編)
・準備(インストール編)
・準備(環境構築編)
・センサ読み取り・LED出力をする
・リアルタイム温度計づくり
Raspberry Piとは?
下記の特徴を備えています。
・マイコンなので、GPIOがあり、PCよりも自由に入出力をいじれる
・SDカードを元に動く。OSやストレージ機能を備える。
・安価。5000円以内で本体を購入できる
などの特徴があり、安価にPCとマイコンのいいとこ取りをしているマシンです。
現在の主要モデルを表にしてみました。。大別して高性能版と、コンパクト&廉価版の2種があり、両種ともに無線機能を備えているため、環境構築等の設定がとてもしやすいです。
表の通り、2018年3月に、新しいラズパイのモデルが発表されました。それまでの高性能版ラズパイだったModel3Bと比べ、性能アップとPoE(Power over Ethernet)が大きな変更点です。PoEとは、コンセントを用いず、有線LANケーブルのみで電源を受給電できるようになる機能です!
このように、今もバージョンアップを繰り返し、進化し続けています。
準備(ものを揃える)
さて、ラズパイを動かす準備をしていきましょう。まずはものを揃えなければいけません。ラズパイは、単体では動かず、結構いろいろと準備するモノがあります。
☑ ラズパイ本体
☑ microUSBケーブル
☑ microSDカード/カードリーダ
☑ ラズパイケース
☑ HDMIケーブル
などなど。また、ラズパイZEROとかになると、加えて
☑ mini HDMI ⇛ HDMI変換アダプタ
☑ microUSB ⇛ USB変換コネクタ
☑ USBハブ(口がmicroUSBの一つしか無い)
が必要です。一通り揃えていれば後で使いまわしが効くものもありますが、初期投資は結構かかるかもしれません。
全部まとまっている商品、無いかなーと思っていたら、Amazonでいいものがありました。
素晴らしい。さすがAmazonさま。これ買うとすべて解決ですね!ラズパイ自体も新型(2018年)ですし。いちいち秋葉原などに行ってパーツ選定も楽しいですが、まず動かしたいという方は、ここから初めてみるのがお手軽でいいかなと思います!
準備 : インストール編
まずはインストールです。様々なOSを使えるのですが、最も一般的なのがRaspbianとよばれるOSです。今回は、Raspberry Pi 3Bにインストールしていきます。
まずは、自分が持っているPCを使って、OS本体のダウンロードです。ここではまだ、ラズパイは使いません。下記リンクより、ダウンロードします。
デスクトップはあったほうが何かと便利なので、デスクトップ版をダウンロードしましょう。
つぎに、先程ダウンロードしたOSをmicroSDに書き込んでいきます。PCにmicroSDを差し込んで、Etcherというソフトウェアで書き込んでいきましょう。DLはこちらから。
はじめにDLしたOSを選択、次に差し込んだmicroUSBを選択してFinishです。
下記画面が現れると、書き込み完了です。
あとは、このmicroSDをラズパイにぶっ刺すだけで使えます。電源につなぐと...
爽やかなデスクトップ!本当に小さなパソコンって感じです。なぜかmathematica(数値計算用ソフトウェア)とかが入っているんですよね。このマシンパワーで必要なのか。。。という感じですが。
準備 : 環境構築編
ラズパイが起動できたので、中身の環境構築に移りましょう。環境構築と言っても今回扱う基本的なところだけを。
ラズパイをネットワークに繋ぎ、いくつか必要なライブラリをインストールしていきましょう。
まずは、pythonのパッケージマネージャのpipと、gitをインストールします。役割は以下の通り
☑ pip : pythonの便利なライブラリが簡単に使えるようになる
☑ git : コードの管理が簡単になる&git cloneで他の人のコードを簡単に取り込める
コンソール画面を開き、下記コマンドを実行しましょう。
# pipのインストール/アップグレード
sudo apt-get -y install python-dev python-pip
sudo pip install --upgrade pip
# gitのインストール
sudo apt-get install git
次に、この後必要なpython関係のライブラリをインストールします。今回は
☑ GPIOを使った出力 : wiringpi
☑ I2Cを使ったセンサ情報入力 : smbus
☑ websocketが簡単に取り扱えるライブラリ : tornado
を使うので順にインストールしていきましょう。
## pythonでi2c通信をするときのツール
sudo apt-get -y install i2c-tools python-smbus
## GPIOの入出力を管理するツール
sudo pip install wiringpi
## websocketを取り扱えるwebフレームワーク
sudo pip install tornado
これで準備完了です。
センサ読み取り・LED出力をする
さて、OSの準備も完了したので、いよいよ光らせていきましょう。せっかくなので、Arduinoと同じように、「センサ受信して、光量を変える」操作を実装します。今回は、pythonを使います。
といっても、配線関係は、Arduinoのときに行ったこととほとんど同じです。Raspberry Piのピンアサイン(下図)に従って、回路を組んでいきましょう。
なお、PWMが可能なピンはGPIO12, 13, 18, 19のみです。なので、今回は13番ピンを用いました。配線後の写真がこちら(少し雑ですみません)
次に、コードを実装していきます。Arduinoのsetup()/loop()とは違い、基本的にPCとして動いているので、通常通常のpythonの動作と全く同じです。Arduinoのときと同じように、センサから温度を拾い、LEDの明るさに反映させていきましょう。
import time, smbus
import wiringpi as pi
def read_temp():
# i2cのチャンネルと、adtのアドレスを決める
i2c_channel = 1
adt7410_addr = 0x48
i2c = smbus. SMBus( i2c_channel )
# データの読み取り
data = i2c.read_i2c_block_data(adt7410_addr, 0x00,2)
# データの整形(Arduinoのときと同じ温度換算)
temp = ((data[0]<<8|data[1] ) >> 3)/16.0
return temp
if __name__ == '__main__':
# GPIO13(PWMができるピン)を指定
led_pin = 13
pi.wiringPiSetupGpio()
# PWMができるように初期設定
pi.pinMode(led_pin,pi.GPIO.PWM_OUTPUT)
pi.pwmSetMode(pi.GPIO.PWM_MODE_MS)
pi.pwmSetClock(500)
# 明るさ初期値0とする
pi.pwmWrite(led_pin, 0)
temp = read_temp()
while True:
print(temp)
# 温度読み取り
temp = read_temp()
# 読み取った温度をLEDに反映(大きさはint型)
pi.pwmWrite(led_pin, int(temp))
time.sleep(1)
pythonファイルとして保存(temp_led.pyとする)し、下記コマンドを打てば、温度が読み取れます。
python temp_led.py
リアルタイム温度を画面に表示させてみる。
さて、はじめにRaspberry PiはArduinoよりももっとPCに近いと言いました。その一要素が、「画面出力」の有無だと思います。
画面を出せるので、ローカルサーバを立てればウェブページ上に温度のデータを可視化することが出来ます。リアルタイム温度計の完成です!
実は、2018年の暑さにやられ、夏に一度作っていました。これがいい例になるかなと思ったので、作り方を公開します。
今回、長くなるので、割愛しますが、websocketと呼ばれる通信プロトコルを用います。それを簡単に取り扱えるwebフレームワークがtornadoです。
websocketはIoT関連のサービスにおけるウェブ側の設計において、すごく相性のいいプロトコルだと思うので、これを機に少し勉強してみるのもいいと思います。
とりあえず、私のgithubにコード一式をあげておきました。下記コマンドで、Raspberry piにコード一式をダウンロードしてください。(Day8とついているものです)
git clone https://github.com/hokekiyoo/advent-calendar-2018.git
Rasperry Piを配線したあと、server.pyを起動し、http://localhost:9999にアクセスすれば、下記の様な温度が表示されます。
コードをいじりながら、どこがどういう役割なのかを勉強していくといいでしょう。
このように、簡易webサーバとして扱ったり、ディスプレイを使った可視化を行えたりするのは、Raspberry Piならではだと思います。自由度も高く、またスクリプト言語でも記述できることが多いので、使っていてとても楽しいです!
まとめ
いかがでしたか?Arduinoより少し導入コストが高いですが、それを補える自由度や拡張性を持つRaspberry Piの良さが少しは伝わったかなと思います。
さて、今回自前でLEDの点灯スクリプト、可視化スクリプトを用意しました。しかし、スクリプトを書くのはかなり大変な作業です。これがめちゃくちゃ簡単にできるとうれしくないですか?
というわけで、明日はフローチャートプログラミングの代名詞、Node-REDについて触れていきます。弊社の非エンジニアでも今回のような可視化ツールが作れちゃう超強力ツールです。お楽しみに!ではではっ
前の日 : Day7. Arduinoで温度センシング!入出力をマスターせよ。
次の日 : Day9. 非エンジニアでもシステム構築可能。IoTのキラーアイテム『Node-RED』
サポートいただけると励みになります! よろしくおねがいします!!