• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:AWSからサブスクライブしたデータの選別方法)

AWSからサブスクライブしたデータの選別方法

このQ&Aのポイント
  • ESP-wroom-32でAWS Iot coreを使って通信を行う方法について学んでいます。
  • AWSのブローカーサーバーにパブリッシュし、ESP-wroom-32でサブスクライブすることでデータの受信ができることを確認しました。
  • AWSのサーバ側から特定の文字列が含まれるデータを送信した場合、プログラムでその文字列を検出し動作を切り替えたいと考えています。

質問者が選んだベストアンサー

  • ベストアンサー
  • togurin
  • ベストアンサー率45% (81/180)
回答No.1

前にNode.jsで似たようなことをやったので回答しますが、見当違いだったらすみません。 AWS側から受信したデータはJSON形式の文字列だったように思いますし、質問の内容もそうっぽいんですが、それならあとは文字列操作のプログラムになるのではないでしょうか? そこまでできて、質問の部分がわからないと言うのが謎だったので見当違いかなとも思っているのですが、文字列操作ならその言語で調べれば割と簡単にできると思います。JSONをオブジェクトにパースできるならその方が楽かもしれません。

techhouse
質問者

お礼

回答頂きありがとうございます。 ”文字列 完全一致”などでググってみたところ色々とサンプルがあり mqttCallback関数内で、次の様な感じでプログラムを追加してみて、 " sec ": " set " " sec ": " reset " などの文字列を受信して検索して拾える様になりました。 もっといいやり方があるかもですが、とりあえずやりたいことができたので楽しいです。 void mqttCallback (char* topic, byte* payload, unsigned int length) { Serial.print("Received. topic="); Serial.println(topic); for (int i = 0; i < length; i++) { Serial.print((char)payload[i]); } Serial.print("\n"); //char s1[] = "abcdefgij"; char s2[] = " sec "; char s3[] = " set "; char s4[] = " reset "; char *ret; char *ret2; if ((ret = strstr((char *)payload, s2)) != NULL && (ret2 = strstr((char *)payload, s3)) != NULL ) { snprintf (msg, 75, "%sは%d番目にありました.\n", s2, ret - (char *)payload); Serial.println(msg); snprintf (msg, 75, "%sは%d番目にありました.\n", s3, ret2 - (char *)payload); Serial.println(msg); Serial.print("sec set \n"); digitalWrite(5, HIGH); Serial.println(msg); } else if ((ret = strstr((char *)payload, s2)) != NULL && (ret2 = strstr((char *)payload, s4)) != NULL ) { snprintf (msg, 75, "%sは%d番目にありました.\n", s2, ret - (char *)payload); Serial.println(msg); snprintf (msg, 75, "%sは%d番目にありました.\n", s3, ret2 - (char *)payload); Serial.println(msg); Serial.print("sec reset \n"); digitalWrite(5, LOW); Serial.println(msg); } else { snprintf (msg, 75, "%sはありませんでした.\n", s2); Serial.println(msg); } }