トップページ 組込みソフト AM2321湿度センサー
AM2321湿度センサー                              2014/6/5
湿度センサー
秋月電子通商 温湿度センサ モジュール AM2321
を購入しました。資料が中国語だけです。あまり情報が公開されていません。(もしかして、あまり売れていない?)

スレーブアドレスは0xb8となっています。
あれーーーー、i2cdetectで検出されるアドレスは7ビット。0xb8ってどういうこと?あまり深追いをしたくないのですが、調べてみました。

最初に、湿度センサーは本当にI2Cデバイスになっているか?
条件:Power Onから
SCL端子をハイ・レベル(3.3V)にして500ms間保持すると
SCL端子はPower On からずーーーと3.3Vです。
たぶん、I2Cデバイスになっている。

スリープ状態からどうやって目覚めさせるか?
最初に0xb8を送ると目覚めるらしい?どうやって送るの?結論は、
ioctl (m_nFd, I2C_SLAVE, devAddr)
でスレーブアドレスを指定する。
write( m_nFd, NULL, 0);
0バイト書き込む。
エッ!0バイト書き込んだって何もならないでしょう?
当然の疑問です。
本当は、
スレーブアドレスの信号を出す
0バイト書き込む。
となります。
write( m_nFd, NULL, 0);
を実行したときのSDA,SCL端子の信号は次のようになりました。

信号の意味は。
D7-D1はスレーブアドレスです。
D1を最下位ビットとした信号のアドレスは1011100(0x5c)になります。つまり0xb8を1ビット右シフトした値です。
というこは、i2cdetectで検出できないか?
できました。

注意:秋月電子のLCDを外してください
sudo i2cdetect -y 1
すぐにもう一度
sudo i2cdetect -y 1

おおーー!0x5cの湿度センサースレーブアドレスが見えた。
使ったデバイス
キャラクタLCD
秋月電子通商 ACM1602N1-FLW-FBW

大気圧センサー
秋月電子通商 LPS331使用 高精度大気圧センサーモジュール
取得した気圧データが正しいのか?比較するための気圧計がないのでわかりません。なんとなくそれなりのデータかな?と思っています。温度も計測できます。ただし精度が±2度。ちょっとがっかりですね。

湿度センサー
秋月電子通商 温湿度センサ モジュール AM2321

センサー2つで温度、湿度、大気圧が計れます。

計測結果
3つのセンサーで温度を計測した結果です。
上の行が湿度センサーによる温度と湿度の表示。
下の行が大気圧センサーによる温度と大気圧の表示。

温度は1.7℃も違います。
たぶん湿度センサーのほうが正しいかな?
また気圧については、晴天のときは993hPaでした。本日曇りで896hPaです。
プログラムについて
I2C.h
I2C.cpp
に以下の関数を追加しました。

int GetFd(){return m_nFd;}
int wakeUp(int devAddr, int cnt);
int Write(int devAddr, char* pData, int size);
int Read(int devAddr, char* pData, int size);

上記計測プログラムは
humidity.cpp
です。