私はESP8266ライブラリにArduinoコアを使用していますが、入ってくるTCPクライアントからの要求を取得するHTTPサーバを実行するアクセスポイントにEsp8266を送ります。リクエストはシリアル経由でRaspberry Piに送られます。readStringUntilがEsp8266のArduinoスケッチで何度も起動されました
Serial.println(req)
行が5回または6回実行される以外はすべて問題ありません。ここで奇妙な行動を再現、私のコードの機能縮小版である:
#include <ESP8266WiFi.h>
WiFiServer server(80);
void setup() {
Serial.begin(115200);
WiFi.softAP("zouzou3000", "totocaca");
server.begin();
}
void loop() {
WiFiClient client = server.available();
if (!client) {
return;
}
String req = client.readStringUntil('\r');
Serial.println(req);
delay(1);
}
私はちょうどそれがclient.print("foo_bar_answer")
を使用した後、HTTPレスポンスを置く場合、それは問題を解決するが、私は答えを送信しませんそれでも私はリクエストを最初に解析しなければならないので、シリアル経由でRBPIに送信し、答えを待ってからクライアントに送り返します。私はこの動作を防ぐために遅延を増やしたり、ブール値を使用しようとしましたが、動作しません。私はArduinoプログラミングのかなりの騒ぎです。どんな助けも歓迎です!
HTTPリクエストを解析する方法がわからない場合は、[HTTPサーバーライブラリ](https://github.com/esp8266/Arduino/tree/master/libraries/ESP8266WebServer)を使用してください。 –
一般的なHTTPリクエストにはいくつかの\ rがあります。ここから、複数のプリントがおそらく次のループの繰り返しから来ているでしょう。 – leetibbett
@gre_gorご助言ありがとうございます。 HelloServerの例をAPモードで動作させるために、HTTPリクエストを正しく解析することができました。 – Zbam