前提・実現したいこと
ESP-WROOM-02開発ボードにAM2320等のセンサをI2Cで繋ぎ、Webで見られるデータロガーを作ろうと思っているのですが、I2C通信がうまくいかず困っています。
アドバイスいただけると嬉しいです。
発生している問題
温度、湿度が正常に取得できない。あらゆる値が255(FF)で返される。たまに0の時もある
。
下の例で言えば、hHum, lHum, hTemp, lTempの全てが255で返されるため、温度と湿度はどちらも6553.50となってしまいます。
ソースコード
#include<Wire.h> int AM2320_ADDRESS = 0x5C; void setup() { Serial.begin(115200); Wire.begin(); //ESP8266ではWire.begin(SDA,SCL)のようにしてSDA,SCLピンを設定できる。デフォルトは4,5 } void loop() { int hHum, lHum, hTemp, lTemp = 0; //それぞれ湿度と温度の上2桁、下2桁 Wire.beginTransmission(AM2320_ADDRESS); Wire.endTransmission(); Wire.beginTransmission(AM2320_ADDRESS); Wire.write(0x03); Wire.write(0x00); Wire.write(0x04); if(Wire.endTransmission()!=0){ //0は成功、1はデータサイズオーバー、2,3はNACK、4はその他エラー Serial.println("error"); } Wire.requestFrom(AM2320_ADDRESS, 6); while(Wire.available() !=0){ for(int i = 1; i < 7; i++){//iは現在のレジストリ int c = Wire.read(); switch (i){ hTemp = c; break; case 6: lTemp = c; break; case 3: hHum = c; break; case 4: lHum = c; break; default: break; } } Serial.print("Temp ="); Serial.print((hTemp*256+lTemp)/10.0); Serial.print("˚C"); Serial.print(" Hum ="); Serial.print((hHum*256+lHum)/10.0); Serial.println("%"); delay(10*1000); } }
試したこと
・ESP-WROOM-02への書き込みは正常に行えます。LチカやWiFi接続はできました。
・Arduino UnoにAM2320等をI2Cで接続した場合、正しい温度・湿度が取得できました。そのためAM2320本体やスケッチ、配線には大きな問題はないように思われました。
・SDA、SCLのプルアップは2.2kΩ、4.7kΩ、プルアップなし等試しましたが結果は変わりませんでした。
・SDAとSCLのピンの組み合わせを色々試してみましたが、全て同様にうまくいきませんでした。(デフォルトの4と5だけでなく4と12や4と13、5と4、5と12,5と13など)
・AM2320の他にもI2C接続のRTCを試してみましたが、時間、日時は全てFFで帰ってきました。
・オシロスコープは持ち合わせていませんので波形は見られていません。
補足情報(FW/ツールのバージョンなど)
Arduino IDEのバージョンは1.8.5、Arduino core for ESP8266のバージョンは2.4.2です。
ESP-WROOM-02開発ボードは秋月電子で購入したものを使用しています。
回答2件
あなたの回答
tips
プレビュー