Raspberry Piからセンシングデータを取得する場合もArduino Firmataと同様にNode.jsから行いたかったのですが難しそうなのでPythonに戻ることにしました。Raspberry PiのGPIOはデジタル入力しかできないのでTMP36やLM35DZのアナログセンサを使う場合はMCP3008やPCF8591などのADコンバータが必要になります。TMP36を使い温度を計測するPythonプログラムを書いてみます。
SPIを有効にする
SPI(Serial Peripheral Interface)はシリアル通信の規格の一つです。Raspberry PiのSPIを有効化する方法がカーネルの3.18から変更になったようです。Enabling The SPI Interface On The Raspberry Piにraspi-configを使う方法と手動で有効にする方法が書いてあります。今回は手動で行います。
ファームウェアを更新する
カーネルが3.18.xでない場合はファームウェアを最新します。あわせてパッケージも最新にしました。
$ sudo apt-get update |
カーネルのバージョンを確認します。
$ cat /proc/version |
/boot/config.txt
を編集します。
$ sudo vi /boot/config.txt |
rebootします。
$ sudo reboot |
SPIが有効になりました。
$ lsmod | grep spi |
ブレッドボード配線
MCP3008とRaspberry PiとFT232RLをブレッドボードで配線します。
MCP3008とRaspberry Piと配線します。
- MCP3008 VDD -> Raspberry Pi 3.3V
- MCP3008 VREF -> Raspberry Pi 3.3V
- MCP3008 AGND -> Raspberry Pi GND
- MCP3008 CLK -> Raspberry Pi GPIO 11 (SCLK)
- MCP3008 DOUT -> Raspberry Pi GPIO 9 (MISO)
- MCP3008 DIN -> Raspberry Pi GPIO 10 (MOSI)
- MCP3008 CS/SHDN -> Raspberry Pi GPIP 8 (CE0)
- MCP3008 DGND -> Raspberry Pi GND
TMP36を配線します。
- TMP36 VCC -> Raspberry Pi 3.3V
- TMP36 VOUT -> MCP3008 CH0
- TMP36 GND -> Raspberry Pi GND
Pythonのインストール
Raspberry PiのPython開発環境をインストールします。
$ sudo apt-get update |
ez_setupとpipをインストールします。
$ curl https://bootstrap.pypa.io/ez_setup.py -o - | sudo python |
py-spidev
PythonからSPIデバイスを操作するためpy-spidevをインストールします。
$ cd |
サンプルプロジェクト
プロジェクトを作成します。
$ mkdir -p ~/python_apps/spidev-spike |
以下のサイトを参考にしてPythonのサンプルプログラムを書きます。
- ラズパイでセンサーのデータを継続的に記録する(ソフトウェア編)
- Analogue Sensors On The Raspberry Pi Using An MCP3008
- Serial Peripheral Interface
#!/usr/bin/env python |
プログラム実行
Pythonのプログラムを実行します。5秒間隔で気温を摂氏で表示します。
$ python spi_tmp36.py |