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

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

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

解決済

サーバーとクライアント間でデータの送受をしたい

babamichiru
babamichiru

総合スコア0

1回答

0評価

0クリップ

54閲覧

投稿2020/09/30 06:32

Arduinoでシステムを作っています。よろしくお願いします。

1.サーバー側  ESP32 モジュール APIPモード
2.クライアント側  ESP-WROOM02基板Assy
3.ソフトウェア開発 ArduinoIDE
4.説明
親機(ESP32モジュール)をAPにして、子機(ESP-WROOM02)を無線接続して、親機からのコマンドを受けて、子機からデータを親機に送ろうとしているが、親機からの1byteづつの文字を言葉にしたい。"S""T""A""R""T" -> "START"
5.問題点
・サーバー側から1byteずつ送付されたデータをコマンドとして判別したいが文字の積算が出来ない。
ボードに書き込む時、子機側の cmd=cmd+command; でエラーになる。

  • どこが拙いんでしょうか?
/* Client */  子機側 /* esp-wroom02 200925 */ #include <ESP8266WiFi.h> const char* ssid = "ESP32-WiFi"; const char* password = "esp32wifi"; static WiFiClient client; void setup() { Serial.begin(115200); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); IPAddress ip(192,168,0,9); client.connect(ip,80); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } // 収集データ char command,c; char bdata[] = "board=3,ring=7,point=4,total=159 /"; char cmd[]=""; void loop() { //Serial.println("sending data to server"); delay(1000); if (client.connected() == true){ client.write(bdata); // send a string to server } command = client.read(); Serial.printf("%c",command); cmd=cmd+command;   <---------------------------エラー発生 if(command == '0'){ Serial.print(cmd); Serial.println("/"); } //c=""; delay(3000); // execute once every 1 minutes }
/* Server */ #include<WiFi.h> const char *ssid="ESP32-WiFi"; //SSID const char *pass="esp32wifi"; //パスワード const IPAddress ip(192,168,0,9); //サーバーのIPアドレス const IPAddress subnet(255,255,255,0); //サブネットマスク WiFiServer server(80); void setup() { Serial.begin(115200); WiFi.softAP(ssid,pass); //SSIDとパスの設定 delay(100); //接続失敗防止 WiFi.softAPConfig(ip,ip,subnet); //IPアドレス、ゲートウェイ、サブネットマスク設定 IPAddress myIP = WiFi.softAPIP(); //WiFi.softAPIP()でWiFi起動 server.begin(); Serial.println(); Serial.println("WiFi connected"); Serial.print("SSID:"); Serial.println(ssid); Serial.print("AP IP address:"); Serial.println(myIP); Serial.println("Server start!"); } uint8_t value ; int boad,ring,point,total; // ボード番号,輪数,ポイント,合計 char cmand[] = "start0"; void loop() { // クライアントの情報を得る。 WiFiClient client = server.available(); if(client){ Serial.println("new client"); while(client.connected()){ if(client.available()){ value=client.read(); Serial.printf("%c", value); if(value == '/') { // '/' 区切り文字 Serial.println(""); } client.write(cmand); // クライアントへコマンド送付 delay(500); } } } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

Y.H.
Y.H.

2020/09/30 06:40

> 子機側の cmd=cmd+command; でエラーになる。 どのようなエラーになるのでしょうか? 具体的に記載した方が回答得られやすいと思います。 (特に同様の環境を用意し辛い環境のようですので。)
babamichiru
babamichiru

2020/10/01 05:05

お世話になります。 incompatible types in assignment of 'char*' to 'char[1]' というエラーが出ます。 どういう事でしょうか?
babamichiru
babamichiru

2020/10/03 04:58

お世話になります。 配列を使って以下のように変更しました。 char cmd[4]; int cnt=0;   : command=client.read(); cmd[cnt]=command; cnt+=1; if (command='/'){ cnt=0; } エラーは出ずに、1byteデータが積算されてcmd[]にコマンドを再生できました。
babamichiru
babamichiru

2020/10/05 02:15

エラーが出る件は、一応解決です。ありがとうございました。

まだ回答がついていません

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る