#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 件のコメント:
コメントを投稿