Help us understand the problem. What is going on with this article?

Raspberry PiのPythonからTMP36のアナログ温度センサとMCP3008のADコンバータを使う

More than 5 years have passed since last update.

Raspberry Piからセンシングデータを取得する場合もArduino Firmataと同様にNode.jsから行いたかったのですが難しそうなのでPythonに戻ることにしました。Raspberry PiのGPIOはデジタル入力しかできないのでTMP36LM35DZのアナログセンサを使う場合はMCP3008PCF8591などの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
$ sudo apt-get upgrade
$ sudo rpi-update

カーネルのバージョンを確認します。

$ cat /proc/version
Linux version 3.18.11+ (dc4@dc4-XPS13-9333) (gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03) ) #777 PREEMPT Sat Apr 11 17:24:23 BST 2015

/boot/config.txtを編集します。

$ sudo vi /boot/config.txt
dtparam=spi=on

rebootします。

$ sudo reboot

SPIが有効になりました。

$ lsmod | grep spi
spi_bcm2708             6018  0

ブレッドボード配線

MCP3008とRaspberry PiとFT232RLをブレッドボードで配線します。

mcp3008-tmp36.png

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
$ sudo apt-get install python-dev
$ python -V
Python 2.7.3

ez_setupとpipをインストールします。

$ curl https://bootstrap.pypa.io/ez_setup.py -o - | sudo python
$ curl https://bootstrap.pypa.io/get-pip.py -o - | sudo python
$ pip -V
pip 6.1.1 from /usr/local/lib/python2.7/dist-packages (python 2.7)

py-spidev

PythonからSPIデバイスを操作するためpy-spidevをインストールします。

$ cd
$ git clone git://github.com/doceme/py-spidev 
$ cd py-spidev
$ sudo python setup.py install
...
Writing /usr/local/lib/python2.7/dist-packages/spidev-3.0.egg-info

サンプルプロジェクト

プロジェクトを作成します。

$ mkdir -p ~/python_apps/spidev-spike
$ cd !$

以下のサイトを参考にしてPythonのサンプルプログラムを書きます。

~/python_apps/spidev-spike/spi_tmp36.py
#!/usr/bin/env python

import time
import sys
import spidev

spi = spidev.SpiDev()
spi.open(0,0)

def readAdc(channel):
    adc = spi.xfer2([1,(8+channel)<<4,0])
    data = ((adc[1]&3) << 8) + adc[2]
    return data

def convertVolts(data):
    volts = (data * 3.3) / float(1023)
    volts = round(volts,4)
    return volts

def convertTemp(volts):
    temp = (100 * volts) - 50.0
    temp = round(temp,4)
    return temp

if __name__ == '__main__':
    try:
        while True:
            data = readAdc(0)
            print("adc  : {:8} ".format(data))
            volts = convertVolts(data)
            temp = convertTemp(volts)
            print("volts: {:8.2f}".format(volts))
            print("temp : {:8.2f}".format(temp))

            time.sleep(5)
    except KeyboardInterrupt:
        spi.close()
        sys.exit(0)

プログラム実行

Pythonのプログラムを実行します。5秒間隔で気温を摂氏で表示します。

$ python spi_tmp36.py
adc  :      232
volts:     0.75
temp :    24.84
adc  :      233
volts:     0.75
temp :    25.16
adc  :      233
volts:     0.75
temp :    25.16
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした