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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

Q&A

解決済

2回答

1324閲覧

Milkcocoaを介して受け取る値がnullになってしまう

hama1185

総合スコア18

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Android

Androidは、Google社が開発したスマートフォンやタブレットなど携帯端末向けのプラットフォームです。 カーネル・ミドルウェア・ユーザーインターフェイス・ウェブブラウザ・電話帳などのアプリケーションやソフトウェアをひとつにまとめて構成。 カーネル・ライブラリ・ランタイムはほとんどがC言語/C++、アプリケーションなどはJavaSEのサブセットとAndroid環境で書かれています。

Android Studio

Android Studioは、 Google社によって開発された、 Androidのネイティブアプリケーション開発に特化した統合開発ツールです。

Kotlin

Kotlinは、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、 静的型付けのオブジェクト指向プログラミング言語です。

0グッド

0クリップ

投稿2018/08/25 17:05

編集2018/08/26 04:56

前提・実現したいこと

arduinoからMilkcocoaを介してsendされた値を受け取って処理する
{key : playern, value : x}
nやxには数字が入りxはint型
下記のエラーはarduinoからsendされたときにlogcatから出力されたためonSendは発生してると考えた
milkcocoaのサーバー上ではvalueが数字であることを確認したため受け取った値はnullではないはず

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

V/センサーデータ: player1 : null player2 :null I/System.out: Connection to lost!MqttException (0) - java.lang.NumberFormatException: null

該当のソースコード

C

1//Arduino側の処理 2#include <Milkcocoa.h> 3#include <WiFi.h> 4 5#define MILKCOCOA_APP_ID "dogjkn9fo6y" 6#define MILKCOCOA_SERVERPORT 1883 7#define MILKCOCOA_DATASTORE "esp32" 8 9#define ssid "3468959E5ED0" 10#define password "2211586074966" 11 12#define SWITCH_NUMBER 16 //マットスイッチ総数 13#define PLAYER_NUMBER "player1" 14 15const char MQTT_SERVER[] PROGMEM = MILKCOCOA_APP_ID ".mlkcca.com"; 16const char MQTT_CLIENTID[] PROGMEM = __TIME__ MILKCOCOA_APP_ID; 17 18WiFiClient client; 19Milkcocoa milkcocoa = Milkcocoa(&client, MQTT_SERVER, MILKCOCOA_SERVERPORT, MILKCOCOA_APP_ID, MQTT_CLIENTID); 20 21//// データ格納用のオブジェクト 22//DataElement elem = DataElement(); 23 24//MUX control pins 25const int s0 = 12; 26const int s1 = 14; 27const int s2 = 27; 28const int s3 = 26; 29 30//MUX in "SIG" pin 31const int SIGPin = 32; 32 33//4bitで接続するチャネルを設定 34const int muxChannel[16][4] = { 35 {0, 0, 0, 0}, //channel 0 36 {1, 0, 0, 0}, //channel 1 37 {0, 1, 0, 0}, //channel 2 38 {1, 1, 0, 0}, //channel 3 39 {0, 0, 1, 0}, //channel 4 40 {1, 0, 1, 0}, //channel 5 41 {0, 1, 1, 0}, //channel 6 42 {1, 1, 1, 0}, //channel 7 43 {0, 0, 0, 1}, //channel 8 44 {1, 0, 0, 1}, //channel 9 45 {0, 1, 0, 1}, //channel 10 46 {1, 1, 0, 1}, //channel 11 47 {0, 0, 1, 1}, //channel 12 48 {1, 0, 1, 1}, //channel 13 49 {0, 1, 1, 1}, //channel 14 50 {1, 1, 1, 1} //channel 15 51}; 52 53void setup() { 54 Serial.begin(115200); 55 delay(10); 56 57 // We start by connecting to a WiFi network 58 59 Serial.println(); 60 Serial.println(); 61 Serial.print("Connecting to "); 62 Serial.println(ssid); 63 64 WiFi.begin(ssid, password); 65 66 while (WiFi.status() != WL_CONNECTED) { 67 delay(500); 68 Serial.print("."); 69 } 70 71 Serial.println(""); 72 Serial.println("WiFi connected"); 73 Serial.println("IP address: "); 74 Serial.println(WiFi.localIP()); 75 76 pinMode(s0, OUTPUT); 77 pinMode(s1, OUTPUT); 78 pinMode(s2, OUTPUT); 79 pinMode(s3, OUTPUT); 80 81 pinMode(SIGPin, INPUT); 82 83 digitalWrite(s0, LOW); 84 digitalWrite(s1, LOW); 85 digitalWrite(s2, LOW); 86 digitalWrite(s3, LOW); 87 88// milkcocoa->on(MILKCOCOA_DATASTORE, "send", onsend); 89} 90 91void loop() { 92 // データ格納用のオブジェクト 93 DataElement elem = DataElement(); 94 95 // 以下をloopの中で必ず実行します 96 milkcocoa.loop(); 97 98 for (int i = 0; i < SWITCH_NUMBER; i++) { 99 static int lastValue = 100; 100 if ((readMux(i) < 4000) && (i != lastValue)) { 101 lastValue = i; 102 // データストア名を指定して、データをpushもしくはsendします 103 elem.setValue(PLAYER_NUMBER, i); 104 Serial.println(i); 105 milkcocoa.send(MILKCOCOA_DATASTORE, &elem); 106 delay(1000); 107 } 108 } 109} 110 111//指定されたチャネルのrockの接続状況を読み取る 112int readMux(int channel) { 113 int controlPin[] = {s0, s1, s2, s3}; 114 //loop through the 4 sig 115 for (int i = 0; i < 4; i++) { 116 digitalWrite(controlPin[i], muxChannel[channel][i]); 117 } 118 //read the value at the SIG pin 119 int val = analogRead(SIGPin); 120 return val; 121} 122 123//void onsend(DataElement *elem) { 124// Serial.println(elem.getInt(PLAYER_NUMBER)); 125//}

kotlin

1 milkcocoa = MilkCocoa(app_id) 2 dataStore = milkcocoa?.dataStore(key) 3 dataStore?.addDataStoreEventListener(this) 4 dataStore?.on("send") 5 6     override fun onSended(p0: DataElement?) { 7 8 var p1_current = p0?.getValue("player1") 9 var p2_current = p0?.getValue("player2") 10 11 var test : String = "センサーデータ" 12 13 Log.v(test, "player1 : "+ p1_current +"player2 :" + p2_current) 14 15 var p1_num = Integer.parseInt(p1_current) 16 var p2_num = Integer.parseInt(p2_current) 17 18 var decidePattern : DecidePattern? = DecidePattern() 19 20 var pattern : Int? = decidePattern?.returnpattern(p1_num, p2_num) 21 22 23 decision = pattern 24 25 if(timer != null){ 26 timer?.cancel() 27 } 28 if(pattern == 0){ 29 decideVib = DecideVib(this , handler, pattern, flag[0]) 30 31 for(i in 0..9){ 32 flag[i] = 0 33 } 34 i = 0 35 flag[i] = 1 36 37 timer = Timer(true) 38 timer?.schedule(decideVib, time_pattern[i]) 39 } 40 if(pattern == 1){ 41 decideVib = DecideVib(this , handler, pattern, flag[1]) 42 for(i in 0..9){ 43 flag[i] = 0 44 } 45 i = 1 46 flag[i] = 1 47 48 timer = Timer(true) 49 timer?.schedule(decideVib, time_pattern[i]) 50 } 51 if(pattern == 2){ 52 decideVib = DecideVib(this , handler, pattern, flag[2]) 53 for(i in 0..9){ 54 flag[i] = 0 55 } 56 i = 2 57 flag[i] = 1 58 59 timer = Timer(true) 60 timer?.schedule(decideVib, time_pattern[i]) 61 } 62 if(pattern == 4){ 63 decideVib = DecideVib(this , handler, pattern, flag[3]) 64 for(i in 0..9){ 65 flag[i] = 0 66 } 67 i = 3 68 flag[i] = 1 69 70 timer = Timer(true) 71 timer?.schedule(decideVib, time_pattern[i]) 72 } 73 if(pattern == 5){ 74 decideVib = DecideVib(this , handler, pattern, flag[4]) 75 for(i in 0..9){ 76 flag[i] = 0 77 } 78 i = 4 79 flag[i] = 1 80 81 timer = Timer(true) 82 timer?.schedule(decideVib, time_pattern[i]) 83 } 84 if(pattern == 8){ 85 decideVib = DecideVib(this , handler, pattern, flag[5]) 86 for(i in 0..9){ 87 flag[i] = 0 88 } 89 i = 5 90 flag[i] = 1 91 92 timer = Timer(true) 93 timer?.schedule(decideVib, time_pattern[i]) 94 } 95 if(pattern == 9){ 96 decideVib = DecideVib(this , handler, pattern, flag[6]) 97 for(i in 0..9){ 98 flag[i] = 0 99 } 100 i = 6 101 flag[i] = 1 102 103 timer = Timer(true) 104 timer?.schedule(decideVib, time_pattern[i]) 105 } 106 if(pattern == 10){ 107 decideVib = DecideVib(this , handler, pattern, flag[7]) 108 for(i in 0..9){ 109 flag[i] = 0 110 } 111 i = 7 112 flag[i] = 1 113 114 timer = Timer(true) 115 timer?.schedule(decideVib, time_pattern[i]) 116 } 117 if(pattern == 13){ 118 decideVib = DecideVib(this , handler, pattern, flag[8]) 119 for(i in 0..9){ 120 flag[i] = 0 121 } 122 i = 8 123 flag[i] = 1 124 125 timer = Timer(true) 126 timer?.schedule(decideVib, time_pattern[i]) 127 } 128 if(pattern == 18){ 129 decideVib = DecideVib(this , handler, pattern, flag[9]) 130 for(i in 0..9){ 131 flag[i] = 0 132 } 133 i = 9 134 flag[i] = 1 135 136 timer = Timer(true) 137 timer?.schedule(decideVib, time_pattern[i]) 138 } 139 140 } 141      142     143

試したこと

Logを発生させようと思い記載したらそれぞれの値がnullになったarduino側でdelay1秒いれたがnullのままだった

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

AndroidStudio3.14を使用しています

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

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

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

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

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

y_waiwai

2018/08/25 22:30

arduino側のソースも提示してください
hama1185

2018/08/26 04:57

コメントありがとうございます 提示しましたのでよろしくお願いします
guest

回答2

0

自己解決

lib内に入れる.jarが古いものだった

投稿2018/10/13 03:31

hama1185

総合スコア18

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

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

0

cpp

1milkcocoa.send(MILKCOCOA_DATASTORE, &elem);

ここの&は必要ないのではないでしょうか?

投稿2018/08/26 08:48

kakajika

総合スコア3131

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

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

hama1185

2018/08/28 12:57

&を外すと Arduino:1.8.5 (Windows 10), ボード:"ESP32 Dev Module, Disabled, Default, QIO, 80MHz, 4MB (32Mb), 921600, None" 警告:ライブラリMozziのカテゴリ「Audio」は有効ではありません。「Uncategorized」に設定します。 C:\Users\09013\Documents\Arduino\kishinDenshin\kishinDenshin.ino: In function 'void loop()': kishinDenshin:149: error: no matching function for call to 'Milkcocoa::send(const char [6], DataElement&)' milkcocoa.send(MILKCOCOA_DATASTORE, elem); ^ In file included from C:\Users\09013\Documents\Arduino\kishinDenshin\kishinDenshin.ino:28:0: C:\Users\09013\Documents\Arduino\libraries\Milkcocoa_ESP8266_SDK-master/Milkcocoa.h:73:8: note: candidate: bool Milkcocoa::send(const char*, DataElement*) bool send(const char *path, DataElement *pdataelement); ^ C:\Users\09013\Documents\Arduino\libraries\Milkcocoa_ESP8266_SDK-master/Milkcocoa.h:73:8: note: no known conversion for argument 2 from 'DataElement' to 'DataElement*' 「WiFi.h」に対して複数のライブラリが見つかりました 使用済:C:\Users\09013\AppData\Local\Arduino15\packages\esp32\hardware\esp32\1.0.0\libraries\WiFi 未使用:C:\Program Files (x86)\Arduino\libraries\WiFi exit status 1 no matching function for call to 'Milkcocoa::send(const char [6], DataElement&)' 「ファイル」メニューの「環境設定」から 「より詳細な情報を表示する:コンパイル」を有効にすると より詳しい情報が表示されます。 とでます Arduinoだとデータの受け取りもできるのでAndroid側の処理だと思います
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問