Etizolam

For our good night sleep.

温度センサーDHT11をRaspberry Piで使う(始まり)

始まり:

先日、Tokyo HackerSpace(以後THS)で開催されたRaspberry Pi Work Shop @ THS #3に参加しました。丁度、GPIOで収集した情報でDatadog上でグラフ化して意義のあるデータの事例を探していたところなので、一石二鳥的なタイミングでした。

HackerSpace

ワークショップは、回路図などの難しい説明はありませんでした。渡された部品と基盤を説明に従ってハンダ付け、Raspberry Piに接続し、動作確認をする、という至ってシンプルな流れでした。ワークショップでの作業時間を考慮すると、「電子工作初心者にはこれくらい簡素化された流れが、作業/理解できる限界」とも思いました。

個人的には、お薦めなWorkshopだと思います。更に、THSには興味深い英語ネーティブが来ていて、英語でのコミュニケーションのひそかな練習場所にも最適な感じがしました。

さて、ワークショップで電子工作した温度&湿度計の中身を見てみると、arduino系の電子工作で頻繁に見かけるDHT11 basic temperature-humidity sensor + extrasを使っていました。センサー周りの回路が一体化して、製品とプルアップ抵抗を回路に追加するだけというお手軽さがありがたい製品です。

しかし、Raspberry PiのGPIOに接続したDHT11の通信信号をPythonで読み取ろうとすると処理スピードが間に合わないらしく、DHT11からのデータの読み取りができないようです。なので、DHT系センサーとの通信をPythonから読み取るためのC言語のコードが提供されていることを知りました。

https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code

リポジトリをクローンし、READMEを読んでみると次のようなサンプルコードが書かれていました。

Usage example:

1
2
3
4
5
6
7
import dhtreader

type = 22
pin = 24

dhtreader.init()
print dhtreader.read(type, pin)

ワークショップでは、「C言語で書かれたプログラムをsys,osライブラリーか何かでコールしているのかな〜」くらいにしか思っていませんでした。なんと…、普通にPythonで書かれたライブラリーと同じようにインポートして使っているところを見て、C言語で書かれたPython extentionを使っていることに気が付きました。

今まで、「Python extentionとかctypeとかって、エキスパートなpythonistaが使いこなすもの」なんて思っていました。しかしハードに関わるプログラムを考える時には、僕みたいな人材でも必要になってくる知識なのだと実感しました。

Python extentionを調べてみる:

Python extentionを調べてみると、「Pythonのインタープリターとの間で、Pythonで書かれた他のモジュールと同じ使いように振る舞うことができる、C & C++言語で記述されbuildされた、実行ファイル」らしい。更にPythonは、各プログラミング言語の中でも早い段階でユーザーによる拡張をサポートした言語とも書かれていた。

次のケースでこの拡張性が威力を発揮すると考えられている…。

- Pythonのコア部分にない機能の追加
- インタープリター言語で書かれているプログラムのボトルネック部分の解決策
- Proprietary(独占)コードの隠蔽

次回は、DHT11に関連して、もう少しPython extensionを掘り下げてみよう。(その前に、Python extention基本について勉強してみます。)