質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

90.01%

Arudino ESP8266(ESP-WROOM-02)が再起動しない。

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,788

MatsumuraYu

score 6

前提・実現したいこと

Arudino ESP8266(ESP-WROOM-02)を低消費電力で動かすべく、下記記事を読んで全く同じ部品を買い、同じことをしているのですが、30分毎に再起動しません。
http://blog.mlkcca.com/iot/save-sensor-values-by-half-hour/

発生している問題・エラーメッセージ

1回は確実に値を取得できますが、その後、文字化けして、それっきり何も動きがありません。

エラーメッセージ


下記結果が1回だけ出るだけです。

Milkcocoa on sucesss

Connecting to MQTT... MQTT Connected!
Read sensor value: 2

Onpush comming.
Got value: 2
Sleep start, reset after 30 minutes.
rl��r��#�n��� � ��p�<����8��ǒ��l�8  �nn��;�nĒ�� � b�$�rr�����N��n���

該当のソースコード

include <ESP8266WiFi.h>

include <Milkcocoa.h>

/********************* WiFi Access Point *****************************/

define WLAN_SSID       ""

define WLAN_PASS       ""

/********************* Your Milkcocoa Setup *****************************/

define MILKCOCOA_APP_ID      ""

define MILKCOCOA_DATASTORE   "esp8266/tout/half-hour"

/********* Milkcocoa Setup (you don't need to change this!) **************/

define MILKCOCOA_SERVERPORT  1883

/******** Global State (you don't need to change this!) **************/

// Create an ESP8266 WiFiClient class to connect to the MQTT server.
WiFiClient client;

const char MQTT_SERVER[] PROGMEM    = MILKCOCOA_APP_ID ".mlkcca.com";
const char MQTT_CLIENTID[] PROGMEM  = TIME MILKCOCOA_APP_ID;

Milkcocoa milkcocoa = Milkcocoa(&client, MQTT_SERVER, MILKCOCOA_SERVERPORT, MILKCOCOA_APP_ID, MQTT_CLIENTID);

/**

  • Functions
    **/
    void setupWiFi() {
    Serial.println(); Serial.println();
    Serial.println("WiFi Connection->AP==================");
    Serial.print("Connecting to "); Serial.print(WLAN_SSID);

WiFi.begin(WLAN_SSID, WLAN_PASS);
int wifiCounter = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(450);
Serial.print(".");
if(wifiCounter > 20) {
Serial.println("Failed to connect WiFi. Reset now.");
delay(500);
ESP.deepSleep(2 * 1000 * 1000);
delay(1000);
}
delay(50);
wifiCounter++;
}
Serial.println();

Serial.println("WiFi connected");
Serial.print("IP address: "); Serial.println(WiFi.localIP());
Serial.println("=====================================");
};

void connectToMilkcocoa() {
if(!milkcocoa.loop(10*5000)){
Serial.println("Failed to connect Milkcocoa. Reset now.");
delay(500);
ESP.deepSleep(2 * 1000 * 1000);
delay(1000);
}
};

void onpush(DataElement *elem) {
Serial.println("Onpush comming.");
Serial.print("Got value: "); Serial.println(elem->getInt("v"));

Serial.println("Sleep start, reset after 30 minutes.");
delay(500);
ESP.deepSleep(18000000);
delay(1000);
};

/**

  • Main
    **/
    void setup() {
    Serial.begin(115200);
    delay(10);

setupWiFi();
Serial.println();

if( milkcocoa.on(MILKCOCOA_DATASTORE, "push", onpush) ) Serial.println("Milkcocoa on sucesss");
else Serial.println("Milkcocoa on failure");
Serial.println();
};

int loopCounter = 0;
int count = 0;

void loop() {
connectToMilkcocoa();

int sensorValue = analogRead(A0);
Serial.println("Read sensor value: " + String(sensorValue));

DataElement elem = DataElement();
elem.setValue("v", sensorValue);
Serial.println();

if(loopCounter == 0) milkcocoa.push(MILKCOCOA_DATASTORE, &elem);

delay(100);

if(loopCounter > 50){
Serial.println("Failed to push data to Milkcocoa. Reset now.");
delay(500);
ESP.deepSleep(2 * 1000 * 1000);
delay(1000);
}
loopCounter++;

milkcocoa.loop();
count = count + 1;
if(count >= 24) {
milkcocoa.ping();
Serial.println("PING");
count = 0;
}
delay(1000);  
};

試したこと

一番最後のコードは下記qaを見て追加しました。
https://github.com/milk-cocoa/Milkcocoa_Arduino_SDK/issues/3

milkcocoa.loop();
count = count + 1;
if(count >= 24) {
milkcocoa.ping();
Serial.println("PING");
count = 0;
}
delay(1000);  

補足情報(言語/FW/ツール等のバージョンなど)

より詳細な情報

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

0

1回は動作して文字化けとの状況のようで、deepsleepについてググってみた。
ESP8266の真骨頂Deep-Sleepモードの使い方
文字化けの原因はこのページにもあるように、”ESP8266が起動した時に出力されるデータ”と推測します。
気になるのが’ESP.deepSleep’の引数がこのページや他の方のブログなどでも時間と、’きっかけ’?のモードの設定。参考にされたサイトでは引数は1つでしたが。
推測では、文字化けが出た後に’setup'には来ているけど、その後の処理に続かない?もしくは続いているけど文字化けの影響がある?と絞り込んで試すのが良いのでは?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/11/23 14:50

    ご丁寧にコメントいただき、ありがとうございます。
    deepsleepに入る部分を
    ESP.deepSleep(30 * 1000 * 1000 , WAKE_RF_DEFAULT);
    と引数を2つにしましたが、状況変わらずです。
    そうですね、deepsleepから立ち上がった状態が
    >その後の処理を続けていないか
    >続いているけど文字化けの影響がある
    か分析したいのですが、どこをどう変えれば判定つくのかが、初心者のためわかりません。

    大変厚かましいお願いいで恐縮ではございますが、プログラムのどの部分を変更し、変更前と変更後の検証をすれば良いでしょうか?

    キャンセル

  • 2016/11/23 15:12

    気になった部分が。貴殿の参照されたHPの次ページのRESETピンとIO16ピンの接続はされていますか? 対象ページ http://blog.mlkcca.com/iot/save-sensor-values-by-half-hour-2/

    キャンセル

  • 2016/11/23 15:27

    他に気になったのが、同じページですが、
    Milkcocoaの接続部分
    void connectToMilkcocoa() {
    // 50秒たっても接続できなかったら失敗したとみなして再起動
    if(!milkcocoa.loop(10*5000)){
    delay(500);
    ESP.deepSleep(2 * 1000 * 1000);
    delay(1000);
    }
    };
    の部分。まずは参考にされたページの動作を確認されてからが近道と考えます。

    キャンセル

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

  • ただいまの回答率 90.01%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる