MATLAB, thingspeakについての質問です。 ※初めて質問します。不慣れなものですので情報が足らない場合は追加するようにいたします。 〖使用環境〗 MATLAB (R2020a) , ThingSpeak arduino sketch(1.8.13 Windows Store) ESP-WROOM-02 〖質問について〗 下記URLを参考に、thingspeak を用いESP8266からの温度データ※をMQTTプロトコルでpublishするプログラムをカスタマイズして作成しています。 * Arduino クライアントを使用したチャネルへのパブリッシュ https://jp.mathworks.com/help/thingspeak/use-arduino-client-to-publish-to-a-channel.html ※温度データは、サーモセンサーamg8833からのの温度情報。データは「,」区切りで8 x 8 の64個 上記状態でMATLABを起動し、thingspeakで受信されたデータを指定するコマンドをコンソールから打鍵して、 ESP8266からの温度データを変数として取り出せることを期待しているのですがMATLABにて格納される値がNaNとなってしまいます。 このような場合、どのような原因が考えられるでしょうか? また、MATLAB, thingspeak上での有効な 切り分け方法がありましたらご教示いただけないでしょうか? 〖補足情報〗 thingspeakに送信するメッセージをdebug する命令を追加したうえで arduino のsketch上でシリアルポートをモニタリングすると、下記のように表示されていますので、 コネクションの確立とメッセージの作成はできているものと考えています。 11:50:44.772 -> Attempting MQTT connection...Connected with Client ID: 8CceZMCY, Username: MQTTuser01 , Passwword: XXXXXXXXXXXXXXXX 11:50:45.351 -> channels/1076918/publish/XXXXXXXXXXXXXXXX 11:50:45.351 -> field3=27.00,29.25,28.25,24.75,25.50,26.00,26.25,27.00,26.75,30.50,26.75,25.75,25.00,26.00,26.25,27.00,28.00,30.00,28.25,26.75,26.00,25.75,26.50,26.50,28.25,28.00,28.25,27.75,26.50,26.00,26.25,27.00,28.50,28.25,28.25,29.50,28.25,27.50,28.25,27.75,29.25,29.75,29.00,28.50,28.75,30.25,30.25,31.00,29.75,29.75,29.50,30.50,30.75,30.75,31.25,31.25,29.75,29.75,30.00,30.00,29.25,31.00,30.50,30.75 11:51:42.868 -> Attempting MQTT connection...Connected with Client ID: nAigE7B8, Username: MQTTuser01 , Passwword: XXXXXXXXXXXXXXXX 11:51:43.388 -> channels/1076918/publish/XXXXXXXXXXXXXXXX 11:51:43.388 -> field3=27.50,29.50,26.50,25.25,25.75,25.75,26.50,27.25,27.00,29.75,26.50,25.50,24.75,26.00,25.50,26.75,28.75,29.75,28.00,26.75,25.75,26.25,26.75,26.00,28.25,28.00,28.25,28.00,26.50,26.25,26.00,27.00,28.50,29.25,28.50,29.50,28.25,28.75,28.25,26.75,29.50,30.00,29.50,28.50,28.75,31.00,30.75,30.75,30.50,29.00,29.75,30.50,30.75,31.00,31.75,30.75,29.75,28.50,29.50,30.00,29.50,29.75,30.50,31.25 11:52:40.321 -> Attempting MQTT connection...Connected with Client ID: PQYk6R6B, Username: MQTTuser01 , Passwword: XXXXXXXXXXXXXXXX 11:52:41.185 -> channels/1076918/publish/XXXXXXXXXXXXXXXX 11:52:41.185 -> field3=27.75,28.75,27.00,25.50,25.75,25.50,25.75,27.00,27.25,29.25,26.00,25.50,25.25,25.75,25.50,26.25,28.50,29.25,27.50,26.75,25.00,25.75,26.00,26.50,28.00,28.00,28.50,27.75,26.50,26.00,25.75,27.00,28.50,28.25,28.00,29.00,28.50,27.25,27.50,27.00,29.50,29.00,29.00,28.25,28.75,29.25,30.75,30.50,29.25,28.75,29.00,29.75,30.00,31.00,30.75,30.75,29.75,28.75,28.75,30.25,29.25,30.00,30.25,30.50 …(下略) しかしながら、冒頭記載させていただいた通り、上記状態でMATLABを起動し、下記のようなコマンドをコンソール上で打鍵して、 ESP8266からの温度データ(27.75,28.75,27.00,25.50,25.7~ ほか)を取り出せることを期待しているのですが MATLABのコンソール上でコマンド打鍵すると変数に格納される値がNaNとなってしまいます。 * コマンド >> readChannelID = XXXXXXX; >> readAPIKey = 'XXXXXXXXXXXXXXXX'; >> payload = thingSpeakRead(readChannelID,'Fields',[3],'NumPoints',3 ,'OutputFormat','timetable','ReadKey',readAPIKey); * コマンド実行結果 2020/10/05 11:50:47 NaN 2020/10/05 11:51:45 NaN 2020/10/05 11:52:42 NaN ※変数に格納される値がNaNとなってしまいっている。 一方、同一筐体のESP8266には別の温度センサーもあるので、そちらからのセンサーデータの取得をThingSpeakのコマンドI経由で 試みるとできています。 このように、同じ筐体、プログラム内で稼働させているセンサーからのデータが、thingspeak経由での変数取り出しが 出来ていることは確認できているので、基本的なシステム連携はできているものと考えています。 * コマンド >> readChannelID = XXXXXXX; >> readAPIKey = 'XXXXXXXXXXXXXXXX'; >> payload = thingSpeakRead(readChannelID,'Fields',[5],'NumPoints',3 ,'OutputFormat','timetable','ReadKey',readAPIKey); * コマンド実行結果 2020/10/05 12:09:01 25.8 2020/10/05 12:09:59 25.9 2020/10/05 12:19:56 25.8 ※こちらは値がNaNとはならずMATLABコンソールもから取得できている。 〖プログラム本体〗 ご参考にプログラム本体のmqtt publish部分を抜粋させていただきます。 --引用ここから void mqttpublish() { //read all the pixels amg.readPixels(pixels); // set AMG88 of array data String payload=""; for(int i = 0; i < AMG88xx_PIXEL_ARRAY_SIZE; i++){ payload += pixels[i]; if(i != 63){ payload += ","; } } // ThingSpeak に Publish するための文字列データを作成する String data = "field3=" + String(payload); int length = data.length(); char msgBuffer[length]; data.toCharArray(msgBuffer,length+1); // topic 文字列を作成し ThingSpeak の channel feed にデータを Publish する String topicString ="channels/" + String( myChannelNumber ) + "/publish/"+ String( myWriteAPIKey ); length=topicString.length(); char topicBuffer[length]; topicString.toCharArray(topicBuffer,length+1); Serial.println(topicBuffer); Serial.println(msgBuffer); // debug 用 mqttClient.publish( topicBuffer, msgBuffer ); lastConnectionTime = millis(); // 最後に Publish した時間からのカウント } --引用ここまで