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

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

新規登録して質問してみよう
ただいま回答率
85.48%

Q&A

3回答

4232閲覧

ESP8266-ARDUINOでの実装において、受信(.on)のみを行う場合のkey設定方法について

退会済みユーザー

退会済みユーザー

総合スコア0

0グッド

1クリップ

投稿2015/11/09 05:08

御社のサンプルを参考に、ESP8266を用いてARDUINO IDEにて開発を行っております。ESP8266を2台用い、1台は送信のみ、もう1台は受信のみを行う実装を行いたいのですが、受信側のkeyの設定がうまくいっていないのかエラーとなってしまいます。

※受信側でkey"v"の値を読み込む際に、elem.getInt("v")がエラー(→obj is NULL)となる。送信側でpushした直後にエラーが表示されるので、.on自体は機能しているようです。

受信のみを行う場合のkey設定方法を教えて頂けますでしょうか?

<実装内容>
・送信側は御社サンプルをそのまま使用し、Datastore”ESP8266”中のkey”v”に値をpush
http://blog.mlkcca.com/iot/milkcocoa-arduino/)
・受信側は御社サンプルより必要部分を抜粋し仕様、Datastore”ESP8266”中のkey”v”の値を監視し受け取る

<以下、受信側コード抜粋>
void setup() {
/シリアル・wifi接続は省略(御社サンプルまま)/
Serial.println( milkcocoa.on(MILKCOCOA_DATASTORE, "push", onpush) );
};

void loop() {
milkcocoa.loop();
DataElement elem = DataElement();
elem.setValue("v", 1); //★ここが間違い?
delay(7000);
};

void onpush(DataElement elem) {
Serial.println("onpush");
Serial.println(elem.getInt("v"));
};

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

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

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

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

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

guest

回答3

0

Milkcocoa開発チームのものです。
ライブラリを使って頂きありがとうございます。

「受信側でkey"v"の値を読み込む際に、elem.getInt("v")がエラー(→obj is NULL)となる。」とのことですが、
状況を正確に把握・再現したいため、大変お手数ですが送信側のコードも拝見してもよろしいでしょうか...?

受け取ったデータでobj is NULLとエラーが出ているということは、送信側に問題があるかもしれないとちょっと思っています。

投稿2015/11/09 16:17

kiyopikko

総合スコア105

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

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

0

こちら、JavaScript SDK側に問題がありました。。
修正してアップロードしましたので、動作するかもう一度確認頂けますでしょうか。

Node.jsでお使いになる場合は、v0.2.4にアップデートしてから利用頂ければ幸いです。

ご迷惑をおかけして申し訳ありません。。

投稿2015/11/11 04:15

kiyopikko

総合スコア105

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

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

kawa_kari

2015/11/12 01:08

返信遅くなり申し訳ありません。 ご対応誠にありがとうございます。 動作確認致しました。(前コメント中のHTML&JS→ESP8266) onpushを受け取ることは出来るようになったのですが、 中身の値が送っている整数値と異なるものになっているようです。 例)HTMLから”80”を送信  →ESP8266では”1073693664”を受信  →DataStore中には”80"が入っている(DashBoardで確認)  →もう一度”80”を送信したら、今度は違う値”1073694496”を受信 ご確認よろしくお願いいたします。
kiyopikko

2015/11/12 02:20 編集

前コメント中に貼って頂いたコードで確認させて頂きましたが、 slide_barのaddEventListener内のthis.valueがString型になっていました。 受信側でgetInt()と書いているので、HTML側でpushする値をNumber(this.value)に変えて頂いて再度確認頂けますでしょうか...? ちなみに管理画面のデータストアビューではダブルクオテーションがあるかどうかでStringがNumberかが判断できます。 Valueの列にて {"v":1} → Number {"v":"1"} → String
kawa_kari

2015/11/12 02:22

ご回答ありがとうございます。 HTML側でpushする値をNumber(this.value)に変えて試したところうまくいきました! こちらの不注意ですみません。。 何度もご対応頂き、誠にありがとうございました。 また、こちらの質問の仕方が悪くお手間をとらせてしまい申し訳ありませんでした。 また何かあれば質問させて頂ければと思いますので、よろしくお願いいたします。
kiyopikko

2015/11/12 02:26

いえいえ、むしろこの問題に気づくことができたのはkawa_kari様のおかげなので、もの凄く感謝しております! 今後ともよろしくお願い致します。
guest

0

ご確認ありがとうございます。投稿者です。ご指摘の件、実は途中から送信側をESP8266→自作HTMLに変更しており、先ほどESP8266に戻したところ提示したコードで受信できました。お騒がせしてすみません。。
(keyの設定の問題と決めつけており、送信側も色々試していましたが、最初のESP8266での送信時に何かミスしていたようです…。)

なお、HTMLの方では依然 obj is NULL とエラーが出ているのですが、こちらの確認をお願いできますでしょうか…?以下、送信側のコードです。HTML上スライダに連動してDatastore上にデータをpushする仕様です。下記コードでmilkcocoaのdashboardではデータが反映されています。
※受信側ESP8266は上記投稿のまま

■HTMLファイル

<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <title> モーター操作デモ</title> <script type='text/javascript' src='slider_mcc.js'></script> <link rel="stylesheet" type="text/css" href="/css/result-light.css"> <style type='text/css'> </style> </head> <body> <script src="https://cdn.mlkcca.com/v2.0.0/milkcocoa.js"></script> <div> <div id="todos"> </div> <div> <input id ="slide_bar" type="range" name="num" min="-80" max="80" step="5" value="0"> <span id="val">0</span> </div> </div> </body> </html>

■JSファイル
window.onload=function(){
var new_content = document.getElementById("new_content");
var create_button = document.getElementById("create_btn");
var todos = document.getElementById("todos");
var slide_bar = document.getElementById("slide_bar");
var val = document.getElementById("val");

var milkcocoa = new MilkCocoa('seaighlmu9z.mlkcca.com');
var todoDataStore = milkcocoa.dataStore("esp8266");

slide_bar.addEventListener("change",function(){
val.innerHTML = this.value;
todoDataStore.push({
v : this.value
});
},false);

function render_todo(todo) {
var element = document.createElement('div');
element.textContent = todo.content
todos.appendChild(element);
}
}

投稿2015/11/10 07:26

kawa_kari

総合スコア10

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

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

hyakuson

2015/11/10 23:55

HTML、JSファイルを試してみましたが、DataStoreへ値がちゃんと送られているので大丈夫そうです。受信側は実機がないのでなんとも言えません。すみません。 それと、断片的な情報しかないので、問題となっている状態の送受信どちらのコードも全部載せていただけると助けられるかもしれません。
kawa_kari

2015/11/11 01:29

ご対応ありがとうございます。お手数おかけしてすみません。 受信側は基本的にESP8266に下記コードを書き込んでいます。(サンプルから) また、エラー発生時のメッセージについても載せておきます。 送信側は上のコメントのHTML&JSファイルです。 ■送信側コード(ESP8266にARDUINO IDEで書き込み) #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" /************* 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); void setup() { Serial.begin(115200); delay(10); Serial.println(F("Milkcocoa SDK demo")); // Connect to WiFi access point. Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(WLAN_SSID); WiFi.begin(WLAN_SSID, WLAN_PASS); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); Serial.println( milkcocoa.on(MILKCOCOA_DATASTORE, "push", onpush) ); }; void loop() { milkcocoa.loop(); DataElement elem = DataElement(); elem.setValue("v", 1); //milkcocoa.push(MILKCOCOA_DATASTORE, elem); delay(7000); }; void onpush(DataElement elem) { Serial.println("onpush"); Serial.println(elem.getInt("v")); }; ■エラー発生時のシリアル出力 Milkcocoa SDK demo Connecting to *** ....... WiFi connected IP address: 192.168.*.*** 1 Connecting to MQTT... MQTT Connected! onpush obj is NULL Exception (28): epc1=0x40206cf4 epc2=0x00000000 epc3=0x00000000 excvaddr=0x00000018 depc=0x00000000 ctx: cont sp: 3ffebb80 end: 3ffebdc0 offset: 01a0 >>>stack>>> 3ffebd20: 3fff3bf8 3ffea990 3ffebe18 40202213 3ffebd30: 3fff41e8 3ffebd50 3ffeacc0 40206c39 3ffebd40: 3fffdc20 3ffea990 00000000 4020701b 3ffebd50: 3fff41e8 401013ff 3ffeada0 3ffeacf0 3ffebd60: 3fff3bfd 3ffebdec 40201c88 3ffeada0 3ffebd70: 4020154e 00001b58 00001b58 3ffebdec 3ffebd80: 3fffdc20 00000000 3ffebde4 40202337 3ffebd90: 40201ca9 c201a8c0 00000000 00000000 3ffebda0: 3fffdc20 00000000 3ffebde4 40201d06 3ffebdb0: 00000000 00000000 3ffeada0 40100458 <<<stack<<< ets Jan 8 2013,rst cause:1, boot mode:(1,7) ets Jan 8 2013,rst cause:4, boot mode:(1,7) wdt reset
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問