13. Make up the ESP32 Web Server - EnglishNo/ESP32 GitHub Wiki

ESP32๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„(์‚ฌ์ดํŠธ) ๋งŒ๋“ค๊ธฐ

DHT11 ์™ธ ํŽ˜์ด์ง€ 1๊ฐœ - ๊ฐœ์ธ - Microsoftโ€‹ Edge 2023-06-02 ์˜คํ›„ 8_59_14 Editing 13  Make up the ESP32 Web Server ยท EnglishNo_ESP32 Wiki ์™ธ ํŽ˜์ด์ง€ 3๊ฐœ - ๊ฐœ์ธ - Microsoftโ€‹ Edge 2023-06-03 ์˜คํ›„ 2_37_08

HTML๋ฅผ ํ†ตํ•ด ๊ธฐ์ดˆ์ ์ธ ์‚ฌ์ดํŠธ ํ‹€ ๋งŒ๋“ค๊ธฐ


HTML์ด๋ž€?
  • "HyperText Markup Language"์˜ ์•ฝ์ž๋กœ, ์›น ๋ฌธ์„œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ์›น ์–ธ์–ด์˜ ํ•œ ์ข…๋ฅ˜.
  • ๋ฌธ์„œ์˜ ๊ธ€์žํฌ๊ธฐ, ๊ธ€์ž์ƒ‰, ๊ธ€์ž๋ชจ์–‘, ๊ทธ๋ž˜ํ”ฝ, ๋ฌธ์„œ์ด๋™(ํ•˜์ดํผ๋งํฌ) ๋“ฑ์„ ์ •์˜ํ•˜๋Š” ๋ช…๋ น์–ด๋กœ์„œ ํ™ˆํŽ˜์ด์ง€๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ.
  • HTML์—๋Š” ํƒœ๊ทธ, ์†์„ฑ, ์ฝ˜ํ…์ธ , ์š”์†Œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š”๋ฐ, ํƒœ๊ทธํ•˜๊ณ  ์†์„ฑ์€ <>์•ˆ์— ์ž‘์„ฑ๋˜๊ณ , ์ฝ˜ํ…์ธ ๋Š” ์—ฌ๋Š” ํƒœ๊ทธํ•˜๊ณ  ๋‹ซ์€ ํƒœ๊ทธ ์‚ฌ์ด์— ์žˆ๋Š” ๋ฌธ์žฅ, ์š”์†Œ๋Š” ์—ฌ๋Š” ํƒœ๊ทธ, ๋‹ซ์€ ํƒœ๊ทธ, ์ฝ˜ํ…์ธ ๋กœ ๊ตฌ์„ฑ.
  • ๋ฉ”๋ชจ์žฅ์—๋„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด.

-์ฐธ๊ณ ํ•  ์‚ฌ์ดํŠธ-

  1. https://terms.naver.com/entry.naver?docId=1168097&cid=40942&categoryId=32838
  2. https://developer.mozilla.org/ko/docs/Learn/Getting_started_with_the_web/HTML_basics

<HTML>

<HEAD>
    <TITLE> DHT11 </TITLE> <!-- ์‚ฌ์ดํŠธ ์ œ๋ชฉ -->
</HEAD>

<META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=UTF-8" > <!-- ํ•œ๊ธ€์ด ๊นจ์งˆ ๊ฒƒ์„ ์šฐ๋ คํ•ด ์ž‘์„ฑ. -->

<BODY>
    <H1> ESP32 Web Server Reading sensor values </H1> <!-- ํฐ ์ œ๋ชฉ, ์ž๋™์œผ๋กœ ๋„์–ด์“ฐ๊ธฐ ์ ์šฉ, <H> ํƒœ๊ทธ ์ค‘์—์„œ 1์€ ์ œ์ผ ํฐ ๊ธ€์ž์˜ ์ œ๋ชฉ์„ ์ž‘์„ฑํ•˜๊ฒŒ ํ•จ. -->
    <h2> DHT11 </h2> <!-- ์‚ฌ์šฉํ•  DHT ์ข…๋ฅ˜ ์ž‘์„ฑ. -->
    <h3> ์‹ ๋™์šฐ ์ œ์ž‘ </h3> <!-- ์ œ์ž‘์ž ์ด๋ฆ„ ์ž‘์„ฑ. -->

    <table width="190"> <!-- ํ‘œ ์ƒ์„ฑ. -->
        <tr> <!-- ์ฒซ๋ฒˆ์งธ ๋ผ์ธ -->
            <th> MEASUREMENT </th>
            <th> VALUE </th>
        </tr>

        <tr align="center"> <!-- ๋‘๋ฒˆ์งธ ๋ผ์ธ, align="center"๋Š” <tr> ํƒœ๊ทธ ์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  ๋ฌธ์žฅ์„ ๊ฐ€์šด๋ฐ๋กœ ์ •๋ ฌํ•˜๊ฒŒ ํ•ด์คŒ. -->
            <td> Temperature </td>
            <td> ---*C </td> <!-- ์˜จ๋„ ๊ฐ’์„ ๋„ฃ์„ ์ž๋ฆฌ -->
        </tr>

        <tr align="center"> <!-- ์„ธ๋ฒˆ์งธ ๋ผ์ธ -->
            <td> Humidity </td>
            <td> ---% </td> <!-- ์Šต๋„ ๊ฐ’์„ ๋„ฃ์„ ์ž๋ฆฌ -->
        </tr>
    </table>
</BODY>

</HTML>

DHT11 - ๊ฐœ์ธ - Microsoftโ€‹ Edge 2023-06-02 ์˜คํ›„ 9_11_57

-์ž‘์„ฑ ํ›„ ์‹คํ–‰ํ•  ๋•Œ์˜ ์‚ฌ์ดํŠธ ๋ชจ์Šต-

ํ•ด๋‹น ์‚ฌ์ดํŠธ๋ฅผ ์•„๋‘์ด๋ˆ„ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์œผ๋กœ ESP32 ์„œ๋ฒ„์— ์ ์šฉํ•˜๋Š” ๋ฒ•

#include <Wire.h>
#include <WiFi.h>
#include "DHT.h"

#define DHTTYPE DHT11
int Pin = 13;
DHT dht(Pin, DHTTYPE);

const char* ssid = "(์™€์ดํŒŒ์ด ID)";
const char* password = "(์™€์ดํŒŒ์ด ๋น„๋ฐ€๋ฒˆํ˜ธ)";

WiFiServer server(80); // ()์•ˆ์—๋Š” ํฌํŠธ๋ฒˆํ˜ธ ์ž‘์„ฑํ•˜๋Š”๋ฐ, ํฌํŠธ ๋ฒˆํ˜ธ 80์€ ์ผ๋ฐ˜์ ์œผ๋กœ HTTP ํ†ต์‹ ์„ ์œ„ํ•œ ๊ธฐ๋ณธ ํฌํŠธ ๋ฒˆํ˜ธ์ด๊ธฐ์—, HTTP ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ๋ฐ›๊ธฐ ์œ„ํ•ด 80๋ฒˆ ํฌํŠธ๋ฅผ ์‚ฌ์šฉ. ("WiFiServer" ํด๋ž˜์Šค๋Š” ESP32์˜ Wi-Fi ์„œ๋ฒ„ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ)

float temp;
float humid;

void setup() {
    Serial.begin(115200);
    dht.begin();

    Serial.print("Connecting to Wifi Network");
    Serial.println(ssid);
    WiFi.begin(ssid, password); // ์™€์ดํŒŒ์ด ์ค€๋น„.

    while (WiFi.status() != WL_CONNECTED) { // ์™€์ดํŒŒ์ด๊ฐ€ ์—ฐ๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ์ง„ํ–‰.
        delay(500);
        Serial.print(".");
    }

    Serial.println("");
    Serial.println("Successfully connected to WiFi.");
    Serial.print("IP address of ESP32 is : ");
    Serial.println(WiFi.localIP()); // ์‚ฌ์šฉ์ค‘์ธ ์™€์ดํŒŒ์ด๊ฐ€ ์ง€๊ธ‰ํ•˜๋Š” IP ์ถœ๋ ฅ.
    server.begin(); // WiFiServer ๊ฐ์ฒด์ธ server๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์—ญํ• . (์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์˜ ์—ฐ๊ฒฐ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ฉฐ, ์ดํ›„์˜ ์ฝ”๋“œ์—์„œ server ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ์™€์˜ ํ†ต์‹ ์„ ๊ด€๋ฆฌ)
    Serial.println("Server started \n");
    Serial.print("http://"); Serial.println(WiFi.localIP());
}

void loop() {
    temp = dht.readTemperature();
    humid  = dht.readHumidity();
    WiFiClient client = server.available(); // ์ฝ”๋“œ๋Š” ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์—ฐ๊ฒฐ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ์—ฐ๊ฒฐ๋œ ํด๋ผ์ด์–ธํŠธ์™€์˜ ํ†ต์‹ ์„ ์œ„ํ•œ WiFiClient ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ (server.available() ํ•จ์ˆ˜๋Š” ํ˜„์žฌ ์„œ๋ฒ„์— ๋Œ€๊ธฐ ์ค‘์ธ ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , ๋งŒ์•ฝ ๋Œ€๊ธฐ ์ค‘์ธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žˆ์œผ๋ฉด, ์ƒˆ๋กœ์šด WiFiClient ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ•ด๋‹น ํด๋ผ์ด์–ธํŠธ์™€์˜ ํ†ต์‹ ์„ ์œ„ํ•ด ์ด ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉ)

    if(client) { // "client"๋ผ๋Š” WiFiClient ๊ฐ์ฒด๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ผ๋ฉด if์˜ {}์•ˆ์˜ ์ฝ”๋“œ๊ฐ€ ์ž‘๋™ํ•˜๊ฒŒ ํ•จ.
        Serial.println("Web Client connected ");
        String request = client.readStringUntil('\r'); // ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฝ๋Š” ์—ญํ• ์„ ํ•จ. ์˜ˆ๋ฅผ ๋“ค์–ด,  "GET /index.html HTTP/1.1"๊ณผ ๊ฐ™์€ GET ์š”์ฒญ์„ ๋ณด๋ƒˆ๋‹ค๋ฉด ํ•ด๋‹น ๋ณ€์ˆ˜์—๋Š” "GET /index.html HTTP/1.1"๋ผ๊ณ  ์ €์žฅ.

        client.println("http://192.168.35.107 OK");
        client.println("Content-type:text/html");
        client.println("Connection : close");
        client.println("");

        // HTML ์›น ์‚ฌ์ดํŠธ ์ œ์ž‘ํ•œ ๊ฒƒ
        client.println("<html>");
        client.println("<head> <title> DHT11 </title> </head>");

        client.println("<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html;CHARSET=UTF-8\" name=\"SmartDevice\" >"); // ์„œ๋ฒ„์— ๋‚˜์˜ค๋Š” ํ•œ๊ธ€์ด ๊นจ์ ธ ๋‚˜์™€์„œ ์‚ฌ์šฉํ•จ.

        client.println("<body>");
        client.println("<H1> ESP32 Web Server Reading sensor values </H1>");
        client.println("<h2> DHT11 </h2>");
        client.println("<h3> ์‹ ๋™์šฐ ์ œ์ž‘ </h3>");

        client.println("<table width=\"190\">");
        client.println("<tr> <th> MEASUREMENT </th> <th> VALUE </th> </tr>");

        client.print("<tr align=\"center\"> <td> Temperature </td> <td>");
        client.print(temp);
        client.println("*C </td> </tr>");

        client.print("<tr align=\"center\"> <td> Humidity </td> <td>");
        client.print(humid);
        client.println("% </td> </tr>");

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

DHT11 ์™ธ ํŽ˜์ด์ง€ 1๊ฐœ - ๊ฐœ์ธ - Microsoftโ€‹ Edge 2023-06-02 ์˜คํ›„ 8_59_14

-ํ•ด๋‹น ์ฝ”๋“œ ์ž‘์„ฑ ํ›„ ์‹คํ–‰ ๊ฒฐ๊ณผ-

(*์ฃผ์˜ - ๋ช‡๋ช‡ ์ฝ”๋“œ๋ฅผ ์„ค๋ช…ํ•˜๋Š” ์ฃผ์„์€ Chat GPT๋ฅผ ํ†ตํ•ด ์ฐพ์€ ๊ฒƒ์ด๋ฏ€๋กœ ํ‹€๋ฆฐ ์ •๋ณด์ผ ๊ฐ€๋Šฅ์„ฑ๋„ ์žˆ์Œ.)

๊ณ ๊ธ‰ ์›นํŽ˜์ด์ง€ ๋งŒ๋“ค๊ธฐ(์ด๋ฏธ์ง€ ์ถ”๊ฐ€, ์ž๋™ ์ƒˆ๋กœ๊ณ ์นจ, ํฐ ์ œ๋ชฉ ์ถ”๊ฐ€, ์‚ฌ์ดํŠธ ๊ฐ„๋žตํ™”)

<HTML>

    <HEAD>
        <TITLE> DHT11 </TITLE>

        <!-- css ์‚ฌ์šฉ -->
        <style type="text/css">
            .title {text-align: center; font-size: 60px;}
            th, td {font-size: xx-large;}
            sup {font-size: 18px;}
        </style>
    </HEAD>

    <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=UTF-8">
    <META HTTP-EQUIV="refresh" CONTENT="10"> <!-- 10์ดˆ๋งˆ๋‹ค ์‚ฌ์ดํŠธ ์ƒˆ๋กœ๊ณ ์นจ -->

    <BODY>
        <H1 class="title"> ESP32 DHT11 Web Server </H1> <!-- "title" ํด๋ž˜์Šค ์‚ฌ์šฉ -->

        <table width="400" height="200" align="center"> <!-- ํ‘œ ์ƒ์„ฑ. "align" ์†์„ฑ์„ ํ†ตํ•ด ์‚ฌ์ดํŠธ ๊ฐ€์šด๋ฐ๋กœ ์ •๋ ฌ -->
            <tr>
                <th> MEASUREMENT </th>
                <th> VALUE </th>
            </tr>

            <tr align="center">
                <td> 
                    <sub><svg xmlns="http://www.w3.org/2000/svg" height="1.5em" viewBox="0 0 320 512"><style>svg{fill:#ff2e2e}</style><path d="M160 64c-26.5 0-48 21.5-48 48V276.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5V112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112V276.5c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6V112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3V144c0-8.8 7.2-16 16-16s16 7.2 16 16V322.7c18.6 6.6 32 24.4 32 45.3z"/></svg></sub> <!-- ์ด๋ฏธ์ง€ ์ถœ๋ ฅ, "sub" ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ์•„๋ž˜์ฒจ์ž๋กœ ์ถœ๋ ฅ -->
                    Temperature
                </td>
                <td> ---<sup>*C</sup> </td> <!-- "sup" ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ์œ„์ฒจ์ž๋กœ ์ถœ๋ ฅ. -->
            </tr>

            <tr align="center">
                <td>
                    <sub><svg xmlns="http://www.w3.org/2000/svg" height="1.5em" viewBox="0 0 384 512"><style>svg{fill:#3881ff}</style><path d="M192 512C86 512 0 426 0 320C0 228.8 130.2 57.7 166.6 11.7C172.6 4.2 181.5 0 191.1 0h1.8c9.6 0 18.5 4.2 24.5 11.7C253.8 57.7 384 228.8 384 320c0 106-86 192-192 192zM96 336c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 61.9 50.1 112 112 112c8.8 0 16-7.2 16-16s-7.2-16-16-16c-44.2 0-80-35.8-80-80z"/></svg></sub>
                    Humidity
                </td>
                <td> ---<sup>%</sup> </td>
            </tr>
        </table>
    </BODY>

</HTML>

DHT11 - ๊ฐœ์ธ - Microsoftโ€‹ Edge 2023-06-03 ์˜คํ›„ 2_38_11

-ํ•ด๋‹น ์ฝ”๋“œ ์ž‘์„ฑ ํ›„ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ-

๊ณ ๊ธ‰ ์›นํŽ˜์ด์ง€๋ฅผ ์•„๋‘์ด๋ˆ„ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ESP32 ์„œ๋ฒ„์— ์ ์šฉ์‹œํ‚ค๊ธฐ

#include <Wire.h>
#include <WiFi.h>
#include "DHT.h"

#define DHTTYPE DHT11
int Pin = 13;
DHT dht(Pin, DHTTYPE);

const char* ssid = "(์™€์ดํŒŒ์ด ID)";
const char* password = "(์™€์ดํŒŒ์ด ๋น„๋ฐ€๋ฒˆํ˜ธ)";

WiFiServer server(80);

float temp;
float humid;

void setup() {
    Serial.begin(115200);
    dht.begin();

    Serial.print("Connecting to Wifi Network");
    Serial.println(ssid);
    WiFi.begin(ssid, password); // ์™€์ดํŒŒ์ด ์ค€๋น„.

    while (WiFi.status() != WL_CONNECTED) { // ์™€์ดํŒŒ์ด๊ฐ€ ์—ฐ๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ์ง„ํ–‰.
        delay(500);
        Serial.print(".");
    }

    Serial.println("");
    Serial.println("Successfully connected to WiFi.");
    Serial.print("IP address of ESP32 is : ");
    Serial.println(WiFi.localIP()); // ์‚ฌ์šฉ์ค‘์ธ ์™€์ดํŒŒ์ด๊ฐ€ ์ง€๊ธ‰ํ•˜๋Š” IP ์ถœ๋ ฅ.
    server.begin();
    Serial.println("Server started \n");
    Serial.print("http://"); Serial.println(WiFi.localIP());
}

void loop() {
    temp = dht.readTemperature();
    humid  = dht.readHumidity();
    WiFiClient client = server.available();

    if(client) {
        Serial.println("Web Client connected ");
        String request = client.readStringUntil('\r');

        client.println("http://192.168.35.107 OK");
        client.println("Content-type:text/html");
        client.println("Connection : close");
        client.println("");

        // HTML ์›น ์‚ฌ์ดํŠธ ์ œ์ž‘ํ•œ ๊ฒƒ
        client.println("<html>");

        client.println("<head>");
        client.println("<title> DHT11 </title>");
        client.println("<style type=\"text/css\">");
        client.println(".title {text-align: center; font-size: 60px;}"); // HTML์˜ CSS์—์„œ ํด๋ž˜์Šค ์ž‘์„ฑ ๋ชจ์Šต์ž„.
        client.println("th, td {font-size: xx-large;}"); // HTML์˜ ํƒœ๊ทธ๋ฅผ ์ž‘์„ฑ ์‹œ, ๋ชจ๋“  ํ•ด๋‹น ํƒœ๊ทธ์— CSS ์ ์šฉ.
        client.println("sup {font-size: 18px;}");
        client.println("</style>");
        client.println("</head>");

        client.println("<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html;CHARSET=UTF-8\" name=\"SmartDevice\" >"); // ์„œ๋ฒ„์— ๋‚˜์˜ค๋Š” ํ•œ๊ธ€์ด ๊นจ์ ธ ๋‚˜์™€์„œ ์‚ฌ์šฉํ•จ.
        client.println("<META HTTP-EQUIV=\"refresh\" CONTENT=\"10\">");

        client.println("<body>");
        client.println("<H1 class=\"title\"> ESP32 DHT11 Web Server </H1>");

        client.println("<table width=\"400\" height=\"200\" align=\"center\">");
        client.println("<tr> <th> MEASUREMENT </th> <th> VALUE </th> </tr>");

        client.println("<tr align=\"center\"> <td>");
        client.println("<sub><svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1.5em\" viewBox=\"0 0 320 512\"><style>svg{fill:#ff2e2e}</style><path d=\"M160 64c-26.5 0-48 21.5-48 48V276.5c0 17.3-7.1 31.9-15.3 42.5C86.2 332.6 80 349.5 80 368c0 44.2 35.8 80 80 80s80-35.8 80-80c0-18.5-6.2-35.4-16.7-48.9c-8.2-10.6-15.3-25.2-15.3-42.5V112c0-26.5-21.5-48-48-48zM48 112C48 50.2 98.1 0 160 0s112 50.1 112 112V276.5c0 .1 .1 .3 .2 .6c.2 .6 .8 1.6 1.7 2.8c18.9 24.4 30.1 55 30.1 88.1c0 79.5-64.5 144-144 144S16 447.5 16 368c0-33.2 11.2-63.8 30.1-88.1c.9-1.2 1.5-2.2 1.7-2.8c.1-.3 .2-.5 .2-.6V112zM208 368c0 26.5-21.5 48-48 48s-48-21.5-48-48c0-20.9 13.4-38.7 32-45.3V144c0-8.8 7.2-16 16-16s16 7.2 16 16V322.7c18.6 6.6 32 24.4 32 45.3z\"/></svg></sub>");
        client.println("Temperature </td> ");
        client.println("<td>");
        client.print(temp);
        client.println("<sup>*C</sup> </td> </tr>");

        client.println("<tr align=\"center\"> <td>");
        client.println("<sub><svg xmlns=\"http://www.w3.org/2000/svg\" height=\"1.5em\" viewBox=\"0 0 384 512\"><style>svg{fill:#3881ff}</style><path d=\"M192 512C86 512 0 426 0 320C0 228.8 130.2 57.7 166.6 11.7C172.6 4.2 181.5 0 191.1 0h1.8c9.6 0 18.5 4.2 24.5 11.7C253.8 57.7 384 228.8 384 320c0 106-86 192-192 192zM96 336c0-8.8-7.2-16-16-16s-16 7.2-16 16c0 61.9 50.1 112 112 112c8.8 0 16-7.2 16-16s-7.2-16-16-16c-44.2 0-80-35.8-80-80z\"/></svg></sub>");
        client.println("Humidity </td>");
        client.println("<td>");
        client.print(humid);
        client.println("<sup>%</sup> </td> </tr>");

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

Editing 13  Make up the ESP32 Web Server ยท EnglishNo_ESP32 Wiki ์™ธ ํŽ˜์ด์ง€ 3๊ฐœ - ๊ฐœ์ธ - Microsoftโ€‹ Edge 2023-06-03 ์˜คํ›„ 2_37_08

-ํ•ด๋‹น ์ฝ”๋“œ ์ž‘์„ฑ ํ›„ ์‹คํ–‰ํ•œ ๋ชจ์Šต-

DHT11 ์˜จ์Šต๋„ ์‚ฌ์ดํŠธ์— ์ด๋ฏธ์ง€ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฒ•

  1. "img" ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉ.
    • HTML์—์„œ ๋ผ๊ณ  ์ž‘์„ฑํ•˜๊ณ , src์˜ ""์•ˆ์— ๊ฐ™์€ ํด๋” ์•ˆ์— ์žˆ๋Š” ์ด๋ฏธ์ง€ ์ด๋ฆ„(ํŒŒ์ผํ˜•์‹๊นŒ์ง€ ํฌํ•จ!)์„ ์ž‘์„ฑ.
    • ๋‹จ์ : ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•œ HTML๋ฅผ ESP32 ์„œ๋ฒ„์— ์ ์šฉํ• ๋ ค๊ณ  ํ•˜๋ฉด, ํ•ด๋‹น ์ด๋ฏธ์ง€๊ฐ€ ํ‘œ์‹œ ์•ˆ ๋จ.
  2. "svg" ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉ.
    • ์ด ์‚ฌ์ดํŠธ์— ๋“ค์–ด๊ฐ€, ๋ง˜์— ๋“œ๋Š” ์ด๋ฏธ์ง€ ํด๋ฆญํ•˜๊ณ , ํ•˜๋‹จ์˜ "SVG" ํด๋ฆญํ•ด์„œ ํ•ด๋‹น ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•ด HTML ํŒŒ์ผ์— ๋ถ™์–ด๋„ฃ๊ธฐ.
    • ๋‹จ์ 1: ๋ถ™์–ด๋„ฃ๊ธฐํ•œ ์ฝ”๋“œ์˜ ๊ธธ์ด๊ฐ€ ๋„ˆ๋ฌด ๊ธธ์–ด ๊ฐ€๋…์„ฑ์— ์•ˆ ์ข‹์Œ.
    • ๋‹จ์ 2: ์ด๋ฏธ์ง€๊ฐ€ ์ถœ๋ ฅ๋  ๋•Œ, ์ด๋ฏธ์ง€์˜ ์ƒ‰์ด ์›ํ•˜๋Š” ์ƒ‰๊น”๋กœ ์•ˆ ๋‚˜์˜ฌ ์ˆ˜๋„ ์žˆ์Œ.

ESP32์„œ๋ฒ„๊ฐ€ ์ž‘๋™๋˜๋Š” ์›๋ฆฌ

image

  1. ์›น์„œ๋ฒ„๋ž€?
    • ์›น ํŽ˜์ด์ง€๋ฅผ ์œ ์ง€ ๊ด€๋ฆฌํ•˜๊ณ  ๊ฐ€์ ธ์˜ค๊ณ  ์›น ํด๋ผ์ด์–ธํŠธ์— ์ œ๊ณตํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ํ•˜๋“œ์›จ์–ด์™€ ์†Œํ”„ํŠธ์›จ์–ด์˜ ์กฐํ•ฉ.
    • Hyper Text Transfer Protocol ๋˜๋Š” ๊ฐ„๋‹จํžˆ HTTP๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ๊ฐ„์˜ ํ†ต์‹ ์„ ๋‹ด๋‹นํ•˜๋Š” ํ”„๋กœํ† ์ฝœ๋กœ, ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ํ†ต์‹ ์—์„œ ์›น ํด๋ผ์ด์–ธํŠธ๋Š” HTTP๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„์— ์ •๋ณด๋ฅผ ์š”์ฒญ. (๋งŒ์•ฝ ์š”์ฒญํ•œ ํŽ˜์ด์ง€๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์œผ๋ฉด ์„œ๋ฒ„๋Š” HTTP 404 ์˜ค๋ฅ˜๋กœ ์‘๋‹ต.)

      Editing 13  Make up the ESP32 Web Server ยท EnglishNo_ESP32 Wiki ์™ธ ํŽ˜์ด์ง€ 4๊ฐœ - ๊ฐœ์ธ - Microsoftโ€‹ Edge 2023-06-03 ์˜คํ›„ 3_23_39

  2. ESP32์˜ WiFi ์ž‘๋™ ๋ชจ๋“œ ์ข…๋ฅ˜
    • ์Šคํ…Œ์ด์…˜ ๋ชจ๋“œ(STA)

      image

      • ESP32 ๋ชจ๋“ˆ์€ ๋ฌด์„  ๋ผ์šฐํ„ฐ์— ์˜ํ•ด ์„ค์ •๋œ ๊ธฐ์กด WiFi ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ๋จ.
      • ESP32 Wi-Fi ๋ชจ๋“ˆ์€ ๋ผ์šฐํ„ฐ์˜ SSID, ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด ๋ผ์šฐํ„ฐ์˜ WiFi ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ, ๋ผ์šฐํ„ฐ๋Š” ESP32์— ๋กœ์ปฌ IP ์ฃผ์†Œ ํ• ๋‹น.

    • ์—‘์„ธ์Šค ํฌ์ธํŠธ ๋ชจ๋“œ(AP)

      image

      • ํ•ด๋‹น ๋ชจ๋“œ๋กœ ์ „ํ™˜ ์‹œ, ESP32 ๋ชจ๋“ˆ์€ ๋ฌด์„  ๋ผ์šฐํ„ฐ์™€ ๊ฐ™์€ ์ž์ฒด WiFi ๋„คํŠธ์›Œํฌ ์ƒ์„ฑ.
      • ํœด๋Œ€ํฐ, ๋žฉํ†ฑ ๋ฐ ๊ธฐํƒ€ ESP32 ๋ชจ๋“ˆ(STA ๋ชจ๋“œ)์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์Šคํ…Œ์ด์…˜์ด ํ•ด๋‹น ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ.
      • ESP32๋Š” ์œ ์„  ์ด๋”๋„ท์ด ์ธํ„ฐ๋„ท์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ด AP๋ชจ๋“œ๋ฅผ ์†Œํ”„ํŠธ AP ๋ชจ๋“œ๋ผ๊ณ  ํ•˜๋ฉฐ, AP ๋ชจ๋“œ์—์„œ ESP32๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ๋™์•ˆ ๋„คํŠธ์›Œํฌ์— ๋Œ€ํ•œ SSID ๋ฐ ์•”ํ˜ธ๋ฅผ ์„ค์ •ํ•ด์•ผ ๋‹ค๋ฅธ ์žฅ์น˜๊ฐ€ ํ•ด๋‹น ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ.

    • ์Šคํ…Œ์ด์…˜ + ์†Œํ”„ํŠธ AP ๋ชจ๋“œ
      • ์Šคํ…Œ์ด์…˜ ๋ชจ๋“œ์™€ ์†Œํ”„ํŠธ AP ๋ชจ๋“œ์˜ ์กฐํ•ฉ.
      • ์—ฌ๊ธฐ์„œ ESP32๋Š” ์Šคํ…Œ์ด์…˜ ๋ฐ ์—‘์„ธ์Šค ํฌ์ธํŠธ ์—ญํ• ์„ ํ•จ.

-์ฐธ๊ณ ํ•  ์‚ฌ์ดํŠธ-

  1. https://modbusrtu.tistory.com/98

LED ์ „๋“ฑ ๋ถˆ์„ ์›น ์„œ๋ฒ„(์‚ฌ์ดํŠธ)๋ฅผ ํ†ตํ•ด ์ ๋ฉธ์‹œํ‚ค๊ธฐ

#include <WiFi.h>
#include <WebServer.h>

const char* ssid = "SK_WiFiGIGA1AA7";  // WiFi ๋„คํŠธ์›Œํฌ SSID
const char* password = "2006085191";  // WiFi ๋„คํŠธ์›Œํฌ ๋น„๋ฐ€๋ฒˆํ˜ธ

const int ledPin = 21;  // LED๊ฐ€ ์—ฐ๊ฒฐ๋œ ํ•€ ๋ฒˆํ˜ธ

WebServer server(80);  // ์›น ์„œ๋ฒ„ ๊ฐ์ฒด ์ƒ์„ฑ

void setup() {
    pinMode(ledPin, OUTPUT);  // LED ํ•€์„ ์ถœ๋ ฅ์œผ๋กœ ์„ค์ •
    digitalWrite(ledPin, LOW);  // LED ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ OFF๋กœ ์„ค์ •

    Serial.begin(115200);  // ์‹œ๋ฆฌ์–ผ ํ†ต์‹  ์ดˆ๊ธฐํ™”

    WiFi.begin(ssid, password);  // WiFi ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ
    while (WiFi.status() != WL_CONNECTED) {  // WiFi ์—ฐ๊ฒฐ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ
        delay(1000);
        Serial.println("Connecting to WiFi...");
    }

    Serial.println("Connected to WiFi");
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());  // ํ• ๋‹น๋œ IP ์ฃผ์†Œ ์ถœ๋ ฅ

    // "/on"๊ณผ "/off"๋Š” ์„œ๋ฒ„ ๊ฒฝ๋กœ
    server.on("/", handleRoot);  // ๋ฃจํŠธ ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์š”์ฒญ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก
    server.on("/on", handleOn);  // "/on" ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์š”์ฒญ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก
    server.on("/off", handleOff);  // "/off" ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์š”์ฒญ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก

    server.begin();  // ์›น ์„œ๋ฒ„ ์‹œ์ž‘
    Serial.println("Server started");
}

void loop() {
    server.handleClient();  // ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์ฒ˜๋ฆฌ.
    // 1. ํด๋ผ์ด์–ธํŠธ๋กœ๋ถ€ํ„ฐ ์š”์ฒญ์ด ๋„์ฐฉํ•˜๋ฉด, ํ•ด๋‹น ์š”์ฒญ์„ ์ฝ๊ณ  ํŒŒ์‹ฑ.
    // 2. ์š”์ฒญ๋œ ๊ฒฝ๋กœ์™€ ์ผ์น˜ํ•˜๋Š” ๋“ฑ๋ก๋œ ๊ฒฝ๋กœ ํ•ธ๋“ค๋Ÿฌ ํƒ์ƒ‰.
    // 3. ํ•ด๋‹น ๊ฒฝ๋กœ ํ•ธ๋“ค๋Ÿฌ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ต์„ ์ƒ์„ฑ.
    // 4. ์ƒ์„ฑ๋œ ์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „์†ก.
    // 5. ํด๋ผ์ด์–ธํŠธ์™€์˜ ์—ฐ๊ฒฐ์„ ๋‹ซ๊ฑฐ๋‚˜ ๋‹ค์Œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๊ธฐ.
}

void handleRoot() {
    String html = "<html><body>";
    html += "<h1>ESP32 LED Control</h1>";
    html += "<p>LED Status: ";

    if (digitalRead(ledPin) == HIGH) {
        html += "ON";
    }
    else {
        html += "OFF";
    }

    html += "</p>";
    html += "<p><a href='/on'>Turn On</a></p>"; // ํ•ด๋‹น ๋ฒ„ํŠผ์„ ํด๋ฆญ ์‹œ, ํ˜„์žฌ ์ฃผ์†Œ์— "/on"์ด ์ถ”๊ฐ€๋˜๋ฉด์„œ LED ๋ถˆ์ด ์ผœ์ง.
    html += "<p><a href='/off'>Turn Off</a></p>"; // ํ•ด๋‹น ๋ฒ„ํŠผ์„ ํด๋ฆญ ์‹œ, ํ˜„์žฌ ์ฃผ์†Œ์— "/off"์ด ์ถ”๊ฐ€๋˜๋ฉด์„œ LED ๋ถˆ์ด ๊บผ์ง.
    html += "</body></html>";

    server.send(200, "text/html", html);  // ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต ์ „์†ก, "text/html"๋Š” HTML ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚ด.
}

void handleOn() { // /on ๊ฒฝ๋กœ๊ฐ€ ์‚ฌ์šฉ๋  ์‹œ, ์Šค์Šค๋กœ ์ž‘๋™.
    digitalWrite(ledPin, HIGH);  // LED๋ฅผ ์ผฌ
    // "text/plain"๋Š” ์ผ๋ฐ˜ ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ
    server.send(200, "text/plain", "LED turned on");  // ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต ์ „์†ก
}

void handleOff() { // /off ๊ฒฝ๋กœ๊ฐ€ ์‚ฌ์šฉ๋  ์‹œ, ์Šค์Šค๋กœ ์ž‘๋™.
    digitalWrite(ledPin, LOW);  // LED๋ฅผ ๋”
    server.send(200, "text/plain", "LED turned off");  // ํด๋ผ์ด์–ธํŠธ์— ์‘๋‹ต ์ „์†ก, "200"๋Š” OK ์ƒํƒœ๋ฅผ ์•Œ๋ฆฌ๋Š” HTTP ์‘๋‹ต.
}

192 168 35 104 ์™ธ ํŽ˜์ด์ง€ 3๊ฐœ - ๊ฐœ์ธ - Microsoftโ€‹ Edge 2023-06-04 ์˜คํ›„ 2_42_42

-์ฝ”๋“œ ์ž‘์„ฑ ํ›„ ์‹คํ–‰ํ•œ ๊ฒฐ๊ณผ-

(*์ฃผ์˜ - ์ด ์ฝ”๋“œ์˜ ์ฃผ์„๋“ค ์—ญ์‹œ Chat GPT๋ฅผ ํ†ตํ•ด ์ฐพ์€ ๊ฒƒ์ด๋ฏ€๋กœ ํ‹€๋ฆฐ ์ •๋ณด์ผ ๊ฐ€๋Šฅ์„ฑ๋„ ์žˆ์Œ.)

20230604_144313

-"Turn On" ๋ฒ„ํŠผ์„ ํด๋ฆญ ์‹œ์˜ ๋ชจ์Šต-

20230604_144326

-"Turn Off" ๋ฒ„ํŠผ์„ ํด๋ฆญ ์‹œ์˜ ๋ชจ์Šต-

์ด๋ฒˆ ์‹ค์Šต์„ ํ†ตํ•ด ์•Œ๊ฒŒ ๋œ ์ 

  • ์•„๋‘์ด๋ˆ„ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ HTML๋ฅผ ํ†ตํ•ด ๋งŒ๋“  ์›น ํŽ˜์ด์ง€๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ WiFiServer, WebServer, WiFiClient ๊ฐ์ฒด์˜ ํ•จ์ˆ˜๋“ค(println, print, send((์‘๋‹ต ์ƒํƒœ), "(๋ฐ์ดํ„ฐ ํ˜•์‹)", "(๋ณด๋‚ผ ๋ฐ์ดํ„ฐ)"))์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋จ.
  • ํƒœ๊ทธ์˜ "href" ์†์„ฑ์— "/(์•„๋ฌด ๋ฌธ์žฅ)" ์ด๋Ÿฐ ์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋ฉด, ํ˜„์žฌ ์ฃผ์†Œ์—์„œ "/(์•„๋ฌด ๋ฌธ์žฅ)" ์ด๋Ÿฐ ์‹์œผ๋กœ ์ž‘์„ฑ๋œ ๊ฒƒ์ด ์ถ”๊ฐ€๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋จ.
  • "WebServer"๋กœ ๋งŒ๋“  ๊ฐ์ฒด์˜ "on()"ํ•จ์ˆ˜๋Š” ํ•ด๋‹น ์ฃผ์†Œ๊ฐ€ ์š”์ฒญ๋˜๋ฉด ๋˜ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋จ.

์ด๋ฒˆ ์‹ค์Šต์—์„œ ์–ด๋ ค์› ๋˜ ์ ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ์‹

  • DHT11๋กœ ์ธก์ •ํ•œ ์˜จ์Šต๋„ ๊ฐ’์„ ์•Œ๋ ค์ฃผ๋Š” ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค ๋•Œ, ํƒœ๊ทธ๋กœ ๋งŒ๋“  ์ด๋ฏธ์ง€๊ฐ€ ํ‘œ์‹œ๊ฐ€ ์•ˆ๋œ ์ ์ด ์žˆ์—ˆ์ง€๋งŒ, ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ด ์ด๋ฏธ์ง€๋ฅผ ํ‘œ์‹œํ•˜๋‹ˆ HTML๋กœ ๋งŒ๋“  ์›น ํŽ˜์ด์ง€๋ฅผ ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ์ด๋ฏธ์ง€๊ฐ€ ํ‘œ์‹œ๋จ.
  • LED ๋“ฑ์„ ์ ๋ฉธ์‹œํ‚ค๋Š” ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ• ๋•Œ, ํ‹€์„ ๋‹ค ๋งŒ๋“ค์—ˆ์ง€๋งŒ, ๋ง‰์ƒ ์„œ๋ฒ„์— ์ ์šฉ์‹œํ‚ค๋ ค๊ณ  ํ•˜๋‹ˆ๊น ์ œ๋Œ€๋กœ ๋œ ์ ์ด ์—†์—ˆ๋‹ค. ํ•˜์ง€๋งŒ Chat GPT๋ฅผ ํ†ตํ•ด ์งˆ๋ฌธ์„ ํ•˜๋‹ˆ ์ •์ƒ์ ์œผ๋กœ LED ๋“ฑ์„ ์ ๋ฉธ์‹œํ‚ค๋Š” ์„œ๋ฒ„๊ฐ€ ๋งŒ๋“ค์–ด์ง.
  • send(), on() ๋“ฑ์˜ ํ•จ์ˆ˜์˜ ์‚ฌ์šฉ์ฒ˜๋ฅผ ์ž˜ ๋ชฐ๋ž์œผ๋‚˜, GPTํ•œํ…Œ ๋ฌผ์–ด๋ณด๋‹ˆ ๊ทธ๋‚˜๋งˆ ์•Œ๊ฒŒ ๋จ.
โš ๏ธ **GitHub.com Fallback** โš ๏ธ