🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

Q&A

1回答

2892閲覧

ESP8266 のWDT resetの解消方法

srain

総合スコア0

Arduino

Arduinoは、AVRマイコン、単純なI/O(入出力)ポートを備えた基板、C言語を元としたArduinoのプログラム言語と、それを実装した統合開発環境から構成されたシステムです。

0グッド

0クリップ

投稿2020/11/23 16:05

編集2020/11/24 14:44
#define BLYNK_PRINT Serial // Comment this out to disable prints and save space #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #include <BME280_MOD-1022.h> #include <Wire.h> // You should get Auth Token in the Blynk App. // Go to the Project Settings (nut icon). char auth[] = "xxxxxxxxxxx"; //Blynkで生成されるAuth Token unsigned long lastCheck = 0; double tempMostAccurate, humidityMostAccurate, pressureMostAccurate; char buff[50]; // Arduino needs this to pring pretty numbers void printFormattedFloat(float x, uint8_t precision) { char buffer[10]; dtostrf(x, 7, precision, buffer); Serial.print(buffer); } void setup() { Serial.begin(115200); Blynk.begin(auth, "xxxxxxxxx", "xxxxxxxxx"); //無線ルーターのSSIDとパスワード Wire.begin(); pinMode(12, OUTPUT); // need to read the NVM compensation parameters BME280.readCompensationParams(); BME280.writeStandbyTime(tsb_0p5ms); // tsb = 0.5ms BME280.writeFilterCoefficient(fc_16); // IIR Filter coefficient 16 BME280.writeOversamplingPressure(os16x); // pressure x16 BME280.writeOversamplingTemperature(os2x); // temperature x2 BME280.writeOversamplingHumidity(os1x); // humidity x1 BME280.writeMode(smNormal); } void formattedFloat(float x, uint8_t precision, char *buff) { dtostrf(x, 7, precision, buff); } BLYNK_READ(V0) { tempMostAccurate = BME280.getTemperatureMostAccurate(); Serial.print("Temp "); printFormattedFloat(tempMostAccurate, 2); Serial.println(); formattedFloat(tempMostAccurate, 2, buff); Blynk.virtualWrite(V0, buff); } BLYNK_READ(V1) { humidityMostAccurate = BME280.getHumidityMostAccurate(); Serial.print("humid "); printFormattedFloat(humidityMostAccurate, 2); Serial.println(); formattedFloat(humidityMostAccurate, 2, buff); Blynk.virtualWrite(V1, buff); } BLYNK_READ(V2) { pressureMostAccurate = BME280.getPressureMostAccurate(); Serial.print("pressure "); printFormattedFloat(pressureMostAccurate, 2); Serial.println(); formattedFloat(pressureMostAccurate, 2, buff); Blynk.virtualWrite(V2, buff); } void loop() { Blynk.run(); int diff = millis() - lastCheck; if (diff > 1000) { while (BME280.isMeasuring() ) { } // read out the data - must do this before calling the getxxxxx routines BME280.readMeasurements(); lastCheck = millis(); } else if (diff < 0) { lastCheck = 0; } } ```### 前提・実現したいこと 初心者です。 ESP-WROOM-02(開発モジュール)とBME280(温湿度気圧センサー)を使用して、計測したデータをWifi経由でblynkに表示させようとしています。 参考サイト 島貫農園様 http://shimanuki-farm.net/archives/955/ リンク先の通り回路を構成しプログラムを書き込んだのですがエラーが発生してしまいました。 ### 発生している問題・エラーメッセージ

エラーメッセージ

Soft WDT reset >>>stack>>> ctx: cont sp: 3ffffd50 end: 3fffffc0 offset: 01a0 3ffffef0: 3ffeed48 00000001 3ffeed48 40205ccc 3fffff00: 60000314 00000160 00000005 40205d90 3fffff10: 00000001 00000004 3ffeed48 40205e7a 3fffff20: 3ffeeab7 00000076 00000000 3ffeed04 3fffff30: 00000000 4bc6a7f0 116872b0 3ffeed04 3fffff40: 3fffdad0 000000f3 3ffeeab5 40206114 3fffff50: 000000e1 3ffeea28 40100500 402045d8 3fffff60: 000000f3 3ffeea28 3ffeeaa4 40204600 3fffff70: 0008b7a4 0000078a 3ffeea04 402040e6 3fffff80: 00000000 3ffeea00 3ffeea70 402041f8 3fffff90: 3fffdad0 00000000 3ffeecc4 40202213 3fffffa0: 3fffdad0 00000000 3ffeecc4 402053c4 3fffffb0: feefeffe feefeffe 3ffe8518 40100f29 <<<stack<<< --------------- CUT HERE FOR EXCEPTION DECODER --------------- ets Jan 8 2013,rst cause:2, boot mode:(3,6) load 0x4010f000, len 3584, room 16 tail 0 chksum 0xb0 csum 0xb0 v2843a5ac ~ld [48] Connecting to xxxxxxxxx [1549] Connected to WiFi [1549] IP: xxxxxxxxx [1549] ___ __ __ / _ )/ /_ _____ / /__ / _ / / // / _ / '_/ /____/_/\_, /_//_/_/\_\ /___/ v0.6.1 on ESP8266 [1555] Connecting to blynk-cloud.com:80 [1851] Ready (ping: 128ms). --------------- CUT HERE FOR EXCEPTION DECODER --------------- ### 該当のソースコード arduino IDEにて ソースコード #define BLYNK_PRINT Serial // Comment this out to disable prints and save space #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> #include <BME280_MOD-1022.h> #include <Wire.h> // You should get Auth Token in the Blynk App. // Go to the Project Settings (nut icon). char auth[] = "xxxxxxxxxxx"; //Blynkで生成されるAuth Token unsigned long lastCheck = 0; double tempMostAccurate, humidityMostAccurate, pressureMostAccurate; char buff[50]; // Arduino needs this to pring pretty numbers void printFormattedFloat(float x, uint8_t precision) { char buffer[10]; dtostrf(x, 7, precision, buffer); Serial.print(buffer); } void setup() { Serial.begin(115200); Blynk.begin(auth, "xxxxxxxxx", "xxxxxxxxx"); //無線ルーターのSSIDとパスワード Wire.begin(); pinMode(12, OUTPUT); // need to read the NVM compensation parameters BME280.readCompensationParams(); BME280.writeStandbyTime(tsb_0p5ms); // tsb = 0.5ms BME280.writeFilterCoefficient(fc_16); // IIR Filter coefficient 16 BME280.writeOversamplingPressure(os16x); // pressure x16 BME280.writeOversamplingTemperature(os2x); // temperature x2 BME280.writeOversamplingHumidity(os1x); // humidity x1 BME280.writeMode(smNormal); } void formattedFloat(float x, uint8_t precision, char *buff) { dtostrf(x, 7, precision, buff); } BLYNK_READ(V0) { tempMostAccurate = BME280.getTemperatureMostAccurate(); Serial.print("Temp "); printFormattedFloat(tempMostAccurate, 2); Serial.println(); formattedFloat(tempMostAccurate, 2, buff); Blynk.virtualWrite(V0, buff); } BLYNK_READ(V1) { humidityMostAccurate = BME280.getHumidityMostAccurate(); Serial.print("humid "); printFormattedFloat(humidityMostAccurate, 2); Serial.println(); formattedFloat(humidityMostAccurate, 2, buff); Blynk.virtualWrite(V1, buff); } BLYNK_READ(V2) { pressureMostAccurate = BME280.getPressureMostAccurate(); Serial.print("pressure "); printFormattedFloat(pressureMostAccurate, 2); Serial.println(); formattedFloat(pressureMostAccurate, 2, buff); Blynk.virtualWrite(V2, buff); } void loop() { Blynk.run(); int diff = millis() - lastCheck; if (diff > 1000) { while (BME280.isMeasuring() ) { } // read out the data - must do this before calling the getxxxxx routines BME280.readMeasurements(); lastCheck = millis(); } else if (diff < 0) { lastCheck = 0; } } ### 試したこと WTDウオッチドッグタイマーが機能せずリセットがかかっているようです。 調べたところ対策としてwhile文内にyield() を置く方法が挙げられていたのですが、今度は下記の箇所でプログラムが止まってしまいます。 解決方法わかる方おられましたらご教授いただきたいです。 ### 補足情報(FW/ツールのバージョンなど) yield() 追加後のシリアルモニタ [8038] Connected to WiFi [8038] IP: xxxxxxx [8038] ___ __ __ / _ )/ /_ _____ / /__ / _ / / // / _ / '_/ /____/_/\_, /_//_/_/\_\ /___/ v0.6.1 on ESP8266 [8044] Connecting to blynk-cloud.com:80 [8336] Ready (ping: 123ms). ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/11/23 17:17

このままではコードが読みづらいので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
guest

回答1

0

つまりは
BME280.isMeasuring()
が応答していない、ということのような。BME280がI2Cモードになっていないのではないでしょうか。お持ちのボードの設定を確認して下さい。

投稿2020/11/23 22:49

thkana

総合スコア7703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問