前提・実現したいこと
ESP-WROOM-02開発ボード使用して、
アナログ値(センサー)をMilkcocoaへPushしたい。
発生している問題・エラーメッセージ
sendはonsendで通知は受け取れている。
pushしてもデータストアに保存されず、onpushでキャッチできていない。
MIlkcocoaのfreeboardでリアルタイムで通知状況を見ていても
sendは受信しているが、pushは受信できていない。
該当のソースコード
SSID等は書き換えてます。
#include <ESP8266WiFi.h> #include <Milkcocoa.h> //********************************************************************** //定数宣言 //WiFi Access Point #define WLAN_SSID "ssid" #define WLAN_PASS "pass" //Milkcocoa Setup #define MILKCOCOA_APP_ID "app_id" #define MILKCOCOA_DATASTORE "esp8266" #define MILKCOCOA_SERVERPORT 1883 #define MILKCOCOA_API_KEY "api_key" #define MILKCOCOA_ARI_SELECT "api_select" // 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); Milkcocoa *milkcocoa = Milkcocoa::createWithApiKey(&client, MQTT_SERVER, MILKCOCOA_SERVERPORT, MILKCOCOA_APP_ID, MQTT_CLIENTID, MILKCOCOA_API_KEY, MILKCOCOA_ARI_SELECT); //loop関数で使用 int loopCounter = 0; //********************************************************************** //Wi-Fi接続処理関数 void setupWiFi() { // Connect to WiFi network Serial.println(); Serial.print("Connecting to "); Serial.println(WLAN_SSID); //WiFi start WiFi.begin(WLAN_SSID, WLAN_PASS); int wifiCounter = 0; //WiFi接続完了までループ while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); //20回失敗したらリセット→再試行 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"); // 接続成功 IP address表示 Serial.println(WiFi.localIP()); Serial.println("====================================="); Serial.println(""); } //Milkcocoa接続処理関数 void connectToMilkcocoa() { //接続できなかったら失敗したとみなして再起動 if(!milkcocoa->loop()){ Serial.println("Failed to connect Milkcocoa. Reset now."); delay(500); ESP.deepSleep(2 * 1000 * 1000); delay(1000); } Serial.println("connected Milkcocoa."); } //Milkcocoaにデータが書き込まれると呼び出される //つまり送信成功→書き込まれたデータを取得しシリアル出力 //60分後に再起動 void onpush(DataElement *elem) { Serial.println("Onpush comming."); Serial.print("Get value: "); Serial.println(elem->getInt("moisture")); Serial.println("Sleep start, reset after 60 minutes."); delay(500); //Test 10秒 ESP.deepSleep(10 * 1000 * 1000); //本稼働時は60分DeepSleep // ESP.deepSleep(3600 * 1000 * 1000); delay(1000); } void onsend(DataElement *elem) { Serial.println("Onsend comming."); } //********************************************************************** //初期処理 void setup() { //シリアル出力起動 Serial.begin(115200); delay(10); //Wi-Fi接続処理 setupWiFi(); //Milkcocoa 接続 if( milkcocoa->on(MILKCOCOA_DATASTORE, "push", onpush) ){ Serial.println("Milkcocoa on sucesss○"); } else { Serial.println("Milkcocoa on failure×"); } if( milkcocoa->on(MILKCOCOA_DATASTORE, "send", onsend) ){ Serial.println("Milkcocoa on send sucesss○"); } else { Serial.println("Milkcocoa on send failure×"); } Serial.println(); } //メイン処理 void loop() { int sensorValue = 0; //Milkcocoa接続処理 connectToMilkcocoa(); delay(1000); //土壌湿度センサー値取得 sensorValue = analogRead(A0); Serial.print("Moisture Sensor Value:"); Serial.println(sensorValue); //Milkcocoaへのデータ作成 DataElement elem = DataElement(); elem.setValue("moisture", sensorValue); //作成データ送信(1回目のループのときのみ) if(loopCounter == 0){ milkcocoa->push(MILKCOCOA_DATASTORE, &elem); delay(10000); // milkcocoa->send(MILKCOCOA_DATASTORE, &elem); } //ループが10回呼ばれたら失敗したとみなす if(loopCounter > 10){ Serial.println("Failed to push data to Milkcocoa. Reset now."); delay(500); //Max値失敗したらリセット→再試行 ESP.deepSleep(2 * 1000 * 1000); delay(1000); } loopCounter++; }
シリアルモニタの出力内容
Connecting to aterm-1ee3cb-g ....... WiFi connected 192.168.10.9 ===================================== Milkcocoa on sucesss○ Milkcocoa on send sucesss○ Connecting to MQTT... MQTT Connected! connected Milkcocoa. Moisture Sensor Value:9 connected Milkcocoa. Moisture Sensor Value:9 connected Milkcocoa. Moisture Sensor Value:9 connected Milkcocoa. Moisture Sensor Value:9 connected Milkcocoa. Moisture Sensor Value:9 connected Milkcocoa. Moisture Sensor Value:9 connected Milkcocoa. Moisture Sensor Value:9 connected Milkcocoa. Moisture Sensor Value:9 connected Milkcocoa. Moisture Sensor Value:8 connected Milkcocoa. Moisture Sensor Value:9 connected Milkcocoa. Moisture Sensor Value:9 connected Milkcocoa. Moisture Sensor Value:9 Failed to push data to Milkcocoa. Reset now.
試したこと
・接続にAPI Key認証ありなしでも変わらない。(いづれもsendはできている)
・push後にdelayかけても変わらない。
・ボードマネージャを変えてもできない
2.3.0
2.4.0-rc2
2.4.0(コンパイルエラーになる)
2.5.1(コンパイルエラーになる)
2.5.2(コンパイルエラーになる)
補足情報(FW/ツールのバージョンなど)
Arduino IDE:1.8.9
ボードマネージャ:2.3.0/2.4.0-rc2
ESP-WROOM-02開発ボード
秋月電子通商さんの開発ボードを使用しています。
http://akizukidenshi.com/catalog/g/gK-12236/
どうか皆様の知恵をお借り致したく。
宜しくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/26 13:10