JetsonNanoでDHT11を動かした。
DHT11とは
GPIO1本で温度・湿度が図ることのできるセンサー。 精度やサンプリングレートは良くないが、温度も湿度も測れるセンサーとしては非常に安価であり、広く用いられている、らしい。
- データシート
Amazon.co.jp: VKLSVAN 3個セット DHT11温度センサー モジュール湿度センサーモジュール デュポンラインと付属 Arduinoに対応: DIY・工具・ガーデン
配線
以下の用につないだ。(画像はラズパイですが使ったのはJetson Nanoです。)
ライブラリ
ラズパイ用にはいろいろ公開されているがJetsonNano用のものはそんなになかった。 今回は以下を使用。
ただ、これはPython2用のライブラリなのでPython3用にポーティングして使用する。
手順
まずはリポジトリをクローン。
$ git clone --recurse-submodules -j8 https://github.com/GrgoMariani/NVidia-Jetson-DHT22-Python
READMEに書いてある通り、Pinを使用するものに変更する。今回は以下のようにする。
#define PIN0 jetsonnano_pin32 #define PIN1 jetsonnano_pin31
続いてビルド。今回はPython3で使うのでPython3でビルド。そうするとPy_Initializeじゃないのか?と聞かれる。(ネタバレするとPython3ではPy_InitModuleを使えないので手を加える必要がある。ビルドはできるのでひとまずこのまま進めてみる。)
$ python3 setup.py build ~~~ C_DHT.c:173:8: warning: implicit declaration of function ‘Py_InitModule’; did you mean ‘Py_Initialize’? [-Wimplicit-function-declaration] (void)Py_InitModule("C_DHT", C_DHT22Methods); ^~~~~~~~~~~~~ Py_Initialize C_DHT.c:174:1: warning: control reaches end of non-void function [-Wreturn-type] }; ~~~
インストール。
$ python3 setup.py install
試してみる。
$ python3 >>> import C_DHT Traceback (most recent call last): File "", line 1, in ImportError: /usr/local/lib/python3.8/site-packages/C_DHT.cpython-38-aarch64-linux-gnu.so: undefined symbol: Py_InitModule
Python3用ではないのでエラー。なのでソースコードを修正する。
対象:C_DHT.c
まずは以下の行を削除。
PyMODINIT_FUNC initC_DHT(void){ (void)Py_InitModule("C_DHT", C_DHT22Methods); };
そして以下の行を最後に追加。
static struct PyModuleDef C_DHT = { PyModuleDef_HEAD_INIT, "C_DHT", /* name of module */ "", /* module documentation, may be NULL */ -1, /* size of per-interpreter state of the module, or -1 if the module keeps state in global variables. */ C_DHT22Methods }; PyMODINIT_FUNC PyInit_C_DHT(void){ return PyModule_Create(&C_DHT); };
ビルド+インストール。
$ python3 setup.py build $ python3 setup.py install
試す。
$ python3 >>> import C_DHT >>>
うまく行きました。