状況概要(発生している問題)と実現したいこと
FirebaseのRealtimeDBに2つの更新データ(下記が構成、データはkidsとadultsに2秒おきに入る)を置いています。
___
DatabaseName
↓
raspi
↓
kids:(整数データ1)
adults:(整数データ2)
___
M5stackからfirebaseのRealtimeDBにアクセスし、kidsとadultsの値を取りに行くコードを作成し、実行しましたが、ArduinoIDEのシリアルモニタからエラーが出て2つの値を取得できません。
M5stackにてFirebaseのRealtimeDBの2つのデータを取得するための方法をお伺いしたいです。
発生している問題・エラーメッセージ
M5stack実行時のArduinoIDEのシリアルモニタ出力(エラー画面)は以下
M5Stack initializing...OK 09:53:41.319 -> connecting............ 09:53:47.337 -> 09:53:47.337 -> WiFi Connected. 09:53:47.337 -> 192.+++.+++.+++ 09:53:54.234 -> put 09:53:54.234 -> data=41 09:53:58.452 -> put 09:53:58.452 -> data2=41 09:53:58.590 -> CORRUPT HEAP: Bad head at 0x3ffdf798. Expected 0xabba1234 got 0x3ffdf9e4 09:53:58.590 -> abort() was called at PC 0x40086afd on core 1 09:53:58.590 -> 09:53:58.590 -> ELF file SHA256: 0000000000000000 09:53:58.590 -> 09:53:58.590 -> Backtrace: 0x400886b4:0x3ffd3c00 0x40088931:0x3ffd3c20 0x40086afd:0x3ffd3c40 0x40086c29:0x3ffd3c70 0x400fb307:0x3ffd3c90 0x400f6e75:0x3ffd3f50 0x400f6d88:0x3ffd3fa0 0x4008d00d:0x3ffd3fd0 0x40081d4a:0x3ffd3ff0 0x40081eb9:0x3ffd4010 0x4012843a:0x3ffd4030 0x40123db3:0x3ffd4050 0x401241a1:0x3ffd4110 0x40120b1d:0x3ffd4140 0x40120c82:0x3ffd4170 0x40120d0a:0x3ffd4190 0x40120ec5:0x3ffd41b0 0x4012eaf1:0x3ffd41e0 0x4012f093:0x3ffd4210 0x4011b61d:0x3ffd4230 0x4011b65d:0x3ffd4250 0x400d9509:0x3ffd4270 0x400d8f03:0x3ffd44f0 0x400d9009:0x3ffd4520 0x4016c3a1:0x3ffd4540 0x400d877a:0x3ffd4560 0x400d87fd:0x3ffd4590 0x400d8977:0x3ffd45e0 0x400d61f7:0x3ffd4600 0x40089942:0x3ffd4690 09:53:58.636 -> 09:53:58.636 -> Rebooting... 09:53:58.683 -> ets Jul 29 2019 12:21:46 09:53:58.683 -> 09:53:58.683 -> rst:0xc (SW_CPU_RESET),boot:0x17 (SPI_FAST_FLASH_BOOT) 09:53:58.683 -> configsip: 0, SPIWP:0xee 09:53:58.683 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 09:53:58.683 -> mode:DIO, clock div:1 09:53:58.683 -> load:0x3fff0018,len:4 09:53:58.683 -> load:0x3fff001c,len:1216 09:53:58.683 -> ho 0 tail 12 room 4 09:53:58.683 -> load:0x40078000,len:10944 09:53:58.683 -> load:0x40080400,len:6388 09:53:58.683 -> entry 0x400806b4 09:53:59.007 -> M5Stack initializing...OK 09:54:00.070 -> connecting........ (以下、上記を繰り返す)
該当のソースコード
M5fire.ino
1 2#include <M5Stack.h> 3#include <IOXhop_FirebaseStream.h> 4#include <IOXhop_FirebaseESP32.h> 5#include <WiFi.h> 6#include <ArduinoJson.h> 7 8#define WIFI_SSID "*******" 9#define WIFI_PASSWORD "******" 10 11// FirebaseのデータベースURL(ご自身のデータベースURLに変更してください) 12#define FIREBASE_DATABASE_URL "DatabaseName.firebaseio.com" 13 14String data; 15String data2; 16 17void setup() { 18 M5.begin(); 19 20 // Wi-Fi接続 21 WiFi.begin(WIFI_SSID, WIFI_PASSWORD); 22 Serial.print("connecting"); 23 while (WiFi.status() != WL_CONNECTED) { 24 Serial.print("."); 25 delay(500); 26 } 27 Serial.println(); 28 29 // Firebase初期化 30 Firebase.begin(FIREBASE_DATABASE_URL); 31 32 // WiFi Connected 33 Serial.println("\nWiFi Connected."); 34 Serial.println(WiFi.localIP()); 35 36 37 // M5Stackから更新された値を監視する No1 38 delay(5000); 39 Firebase.stream("/raspi/kids", [](FirebaseStream stream) { 40 String eventType = stream.getEvent(); 41 eventType.toLowerCase(); 42 Serial.println(eventType); 43 44 if (eventType == "put") { 45 String path = stream.getPath(); 46 data = stream.getDataString(); 47 Serial.print("data="); 48 Serial.println(data); 49 // ディスプレイ表示 50 M5.Lcd.setCursor(10, 30); 51 M5.Lcd.fillScreen(BLACK); 52 M5.Lcd.setTextColor(WHITE); 53 M5.Lcd.printf("kids: %s", data); 54 } 55 }); 56 57 58 // M5Stackから更新された値を監視する No2 59 delay(5000); 60 Firebase.stream("/raspi/adults", [](FirebaseStream stream2) { 61 String eventType2 = stream2.getEvent(); 62 eventType2.toLowerCase(); 63 Serial.println(eventType2); 64 65 if (eventType2 == "put") { 66 String path2 = stream2.getPath(); 67 data2 = stream2.getDataString(); 68 Serial.print("data2="); 69 Serial.println(data2); 70 // ディスプレイ表示 71 M5.Lcd.setCursor(10, 60); 72 M5.Lcd.fillScreen(BLACK); 73 M5.Lcd.setTextColor(WHITE); 74 M5.Lcd.printf("adults: %s", data2); 75 } 76 }); 77 78 79} 80 81void loop() { 82 // ディスプレイ表示 83// M5.Lcd.setCursor(10, 30); 84// M5.Lcd.fillScreen(BLACK); 85// M5.Lcd.setTextColor(WHITE); 86// M5.Lcd.printf("KIDS: %s", data); 87// M5.Lcd.setCursor(10, 60); 88// M5.Lcd.printf("ADULTS: %s", data2); 89}
集めた情報
いろいろ調べた結果、以下の情報が見つかりました。
firebaseを使う場合、マイコンのメモリが専有されるため複数のデータを取得することができない。複数データの取得のためにはマイコン種類を変える必要があると読めます。
ですが、これが正しいのかどうか、正しいのであれば不可避なのか他に手段がないのかも伺えるとありがたいです。
https://githubmemory.com/repo/mobizt/Firebase-Arduino-WiFiNINA/issues/15
補足情報(FW/ツールのバージョンなど)
使用しているM5stack: M5stackGray (https://www.switch-science.com/catalog/3648/)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。