2026年6月10日水曜日

少し挙動がおかしいwebserver on raspicow(need refactor)

 #include <WiFi.h>

const char* ssid = "Pikara2-91d8e4";

const char* password = "090e219cbdbf5";

WiFiServer server(80);

const int LED_PIN = LED_BUILTIN;

void setup() {

  Serial.begin(115200);

  pinMode(LED_PIN, OUTPUT);

  digitalWrite(LED_PIN, LOW);

  Serial.println("Connecting...");

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {

    delay(500);

    Serial.print(".");

  }

  Serial.println();

  Serial.println("WiFi connected");

  Serial.print("IP address: ");

  Serial.println(WiFi.localIP());


  server.begin();

}


void loop() {

  WiFiClient client = server.available();


  if (!client) {

    return;

  }


  Serial.println("New Client");


  String request = client.readStringUntil('\r');

  Serial.println(request);


  if (request.indexOf("/ON") >= 0) {

    digitalWrite(LED_PIN, HIGH);

  }


  if (request.indexOf("/OFF") >= 0) {

    digitalWrite(LED_PIN, LOW);

  }


  client.println("HTTP/1.1 200 OK");

  client.println("Content-Type: text/html");

  client.println("Connection: close");

  client.println();


  client.println("<html><body>");

  client.println("<h1>Pico W Web Server</h1>");

  client.println("<a href=\"/ON\">LED ON</a><br>");

  client.println("<a href=\"/OFF\">LED OFF</a>");

  client.println("</body></html>");


  delay(1000);

  client.stop();

}

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

以下のリファクタが回答された

#include <WiFi.h>


const char* ssid = "YOUR_SSID";

const char* password = "YOUR_PASSWORD";


WiFiServer server(80);


void sendPage(WiFiClient& client)

{

  bool ledState = digitalRead(LED_BUILTIN);


  client.println("HTTP/1.1 200 OK");

  client.println("Content-Type: text/html; charset=UTF-8");

  client.println("Connection: close");

  client.println();


  client.println("<!DOCTYPE html>");

  client.println("<html>");

  client.println("<head>");

  client.println("<meta charset='utf-8'>");

  client.println("<meta name='viewport' content='width=device-width,initial-scale=1'>");

  client.println("<title>Pico W LED</title>");

  client.println("</head>");

  client.println("<body>");

  client.println("<h1>Pico W Web Server</h1>");


  if (ledState)

    client.println("<p><b>LED = ON</b></p>");

  else

    client.println("<p><b>LED = OFF</b></p>");


  client.println("<p><a href='/ON'><button style='font-size:24px'>LED ON</button></a></p>");

  client.println("<p><a href='/OFF'><button style='font-size:24px'>LED OFF</button></a></p>");


  client.println("</body>");

  client.println("</html>");

}


void setup()

{

  Serial.begin(115200);

  delay(2000);


  pinMode(LED_BUILTIN, OUTPUT);

  digitalWrite(LED_BUILTIN, LOW);


  Serial.println();

  Serial.println("Connecting WiFi...");


  WiFi.begin(ssid, password);


  while (WiFi.status() != WL_CONNECTED)

  {

    delay(500);

    Serial.print(".");

  }


  Serial.println();

  Serial.println("WiFi Connected");

  Serial.print("IP Address: ");

  Serial.println(WiFi.localIP());


  server.begin();


  Serial.println("Server Started");

}


void loop()

{

  WiFiClient client = server.available();


  if (!client)

  {

    delay(1);

    return;

  }


  Serial.println("Client Connected");


  String request = "";


  unsigned long timeout = millis();


  while (client.connected() && millis() - timeout < 2000)

  {

    if (client.available())

    {

      char c = client.read();

      request += c;


      if (request.endsWith("\r\n\r\n"))

      {

        break;

      }

    }

  }


  Serial.println("----- REQUEST -----");

  Serial.println(request);


  if (request.indexOf("GET /ON") >= 0)

  {

    digitalWrite(LED_BUILTIN, HIGH);


    client.println("HTTP/1.1 303 See Other");

    client.println("Location: /");

    client.println("Connection: close");

    client.println();

  }

  else if (request.indexOf("GET /OFF") >= 0)

  {

    digitalWrite(LED_BUILTIN, LOW);


    client.println("HTTP/1.1 303 See Other");

    client.println("Location: /");

    client.println("Connection: close");

    client.println();

  }

  else

  {

    sendPage(client);

  }


  delay(10);

  client.stop();


  Serial.println("Client Disconnected");

}

0 件のコメント:

コメントを投稿