14. Supplementary Explanation about 13 Week Class And Explanation the AWS - EnglishNo/ESP32 GitHub Wiki
#include <Wire.h>
#include <WiFi.h>
#include "DHT.h"
#define DHTTYPE DHT11
int Pin = 13;
DHT dht(Pin, DHTTYPE);
const char* ssid = "SK_WiFiGIGA1AA7";
const char* password = "2006085191";
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');
// μλ²κ° 보λ΄μ€μΌ νλ ν€ μ 보 3κ°μ§
client.println("HTTP/1.1 200 OK"); // μλ²κ° μ μμ μΌλ‘ μλ΅νμμ 보μ¬μ€.
client.println("Content-type:text/html"); // μλ²μ 보λ΄λ λ°μ΄ν°κ° text νμμ html λ¬ΈμλΌλ κ²μ μλ €μ€.
client.println("Connection : close"); // μλ΅μ΄ λλ©΄ μ μμ λλλ€λ κ²μ μλ―Έ.
client.println(""); // μν°
// HTML μ½λ μ 보(body)
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>");
client.stop(); // html λ΄μ©μ΄ μ’
λ£λ¨μ μλ €μ€.
client.println(); // ν΄λΌμ΄μΈνΈνν
ν€λμ λ°λ μ 보λ₯Ό μλ²½νκ² μ μ‘λ¨μΌλ‘μ μ’
λ£.
Serial.println("Client disconnected."); // μ»΄ν¨ν°(μλ¦¬μΌ λͺ¨λν°)νν
μΆλ ₯νλ λ΄μ©
Serial.println("");
}
}
1. μλ²μ 보λ΄λ HTML ν€λ μ 보
client.println("HTTP/1.1 200 OK"); // -> μλ²κ° μλ²½ν λμνμμ μλ €μ€.
client.println("Content-type:text/html"); // -> μλ²λ‘ 보λ΄λ λ°μ΄ν°κ° "html" νμμ "text" μμ μλ €μ€.
client.println("Connection : close"); // -> μλ΅μ΄ λλ©΄ μ μμ λλλ€λ κ²μ μλ―Έν¨.
2. μν° λ° html μ½λ μ’ λ£ μ μΈ
client.println(); // -> μν°λ₯Ό μνν¨.
client.stop(); // -> λ°μ΄ν° μ μ‘ μ’
λ£, μ¦ html λ΄μ©μ΄ μ’
λ£λ¨μ μλ €μ€.
- μλ§μ‘΄μ μνμ¬λ‘, 2006λ μ μ€λ¦½. μ£Όλ ₯ μ νμ ν΄λΌμ°λ μλ²μ€.
- κ°λ°μ μμ§λμ΄ λ±μ IT κ΄κ³μλ€μ΄ μ£Όμ κ³ κ°μ΄λ©°(νΉν μμ°μ΄ μ μ μ€ννΈμ , ν΄μΈ μ§μΆμ λ Έλ¦¬λ μ 체), AWSκ° μ 곡νλ μλΉμ€λ "μΈνλΌ".
- AWS μλΉμ€λ₯Ό "μΈνλΌλ‘μμ μλΉμ€"λΌκ³ λΆλ₯΄λ λ°, λλμ μλ², μ€ν 리μ§, λ€νΈμν¬ μ₯λΉλ₯Ό ꡬ맀ν΄λκ³ μ¬μ©μμκ² μΈνλΌλ₯Ό λμ¬ν΄ μ£Όκ³ , μ¬μ©μλ κ° μ₯λΉλ₯Ό μ¬μ©ν λ§νΌλ§ λΉμ©μ μ§λΆνλ©΄ λκΈ° λλ¬Έ.
- κΈ°μ λ΄μ μλ²μ μ μ₯μ₯μΉλ₯Ό λμ§ μκ³ μΈλΆμ μμμμ±ν΄ μ°λ μλΉμ€. λΉ λ°μ΄ν°λ₯Ό ν΄λΌμ°λλ‘ κ΄λ¦¬νλ©΄ λΆμκ³Ό νμ©μ μ©μ΄. μμμΉ λͺ»ν νΈλν½ νμ£Όλ₯Ό μΌλ €ν΄ κ³Όλν μ€λΉν¬μλ₯Ό ν νμλ μμ.
- νΌλΈλ¦(κ°λ°©ν) ν΄λΌμ°λ, νλΌμ΄λΉ(νμν) ν΄λΌμ°λλ‘ λλ¨. ν΄λΌμ°λ μ 체μ λ°μ΄ν° μΌμμ 보κ΄νκ³ μ νλ©΄ "νΌλΈλ¦ ν΄λΌμ°λ", κΈ°μ μμ΄λ λ°μ΄ν° μΌμμ λ 립λ μλ²μ 보κ΄νκ³ μ ν μ "νλΌμ΄λΉ ν΄λΌμ°λ".
- ν΄λΌμ°λ μλΉμ€λ₯Ό μ 곡νλ μ 체λ λ§μ μ΄μ©μλ€μ λ°μ΄ν°λ₯Ό 보κ΄νλ―λ‘, μλ²μ 보μ κ΄λ¦¬μ μ² μ ν΄μΌ νκ³ , λλμ λ°μ΄ν° λ³΄κ΄ λ° μ²λ¦¬λ₯Ό ν¨μ¨μ μΌλ‘ νλ κΈ°μ λ©΄μμλ μ§μμ μΈ λ°μ μ΄ λκ³ μμ.
μ°Έκ³ μ¬μ΄νΈ
AWS - https://terms.naver.com/entry.naver?docId=3580218&cid=59088&categoryId=59096
ν΄λΌμ°λ - https://terms.naver.com/entry.naver?docId=2066705&cid=50305&categoryId=50305 / https://terms.naver.com/entry.naver?docId=4383209&cid=59941&categoryId=59941
λͺ°λλ λ¨μ΄ μ 리
- μ€ν λ¦¬μ§ - μ»΄ν¨ν°μμ λ°μ΄ν°λ₯Ό μ μ₯νλ 곡κ°. λλ κ·Έλ° κ³΅κ°μ΄ λ§λ ¨λ μ₯μΉ.
- μμμμ± - κΈ°μ μ 무μ μΌλΆ λΆλ¬Έμ΄λ κ³Όμ μ κ²½μ ν¨κ³Ό λ° ν¨μ¨μ κ·Ήλνλ₯Ό μν λ°©μμΌλ‘ μ μΌμμκ² μνν΄ μ²λ¦¬νλ κ². (κ΄λ ¨ μ©μ΄ - μμμμ± μλΉμ€)
- νΈλν½ - μ ν λλ μ»΄ν¨ν° ν΅μ μ νΉμ μ μ‘λ‘μμ μΌμ μκ° λ΄μ νλ₯΄λ μ 보μ μ΄λλ.
AWSμ΄ ESP32νκ³ ν΅μ νλ €λ©΄, λλ°μ΄μ€ μ격 μ¦λͺ μ μ¬μ©ν΄ "AWS IoT Core"νκ³ μ°κ²°λμ΄μΌ ν¨. κ·Έλ¦¬κ³ "publish", "subscribe" κΆνμ΄ μλ μ£Όμ λ μ§μ ν΄μΌ ν¨.
- "Get Started for Free(무λ£λ‘ μμνκΈ°)" λ²νΌμ λλ € AWS κ³μ μμ±.
- AWS IoT console μμ "Register a new thing", "Create a single thing" μ μ ν.
- μ νλͺ©μ μ΄λ¦μ "MyNewESP32"λ‘ μ§μ . λλ¨Έμ§ νλλ κΈ°λ³Έκ°μΌλ‘ μ€μ λ μνλ‘ λκ³ , "Next(λ€)" λ²νΌ ν΄λ¦.
- "Create certificate"λ₯Ό ν΄λ¦νκ³ , ESP32μ μ°κ²°νκΈ° μν΄ "thing cert(μ¬λ¬Ό μΈμ¦μ)", "private key(κ°μΈ ν€)", "Amazon Root CA 1"λ§ λ€μ΄λ‘λ.
- "Activate", "Attach a policy"λ₯Ό μ ν.
- "policy"λ₯Ό μΆκ°νλ κ²μ 건λλ°κ³ , "Register Thing" μ ν.
- AWS IoT console μ¬μ΄λ λ©λ΄μμ "Secure", "Policies", "Create a policy" μ ν.
- Policy μ΄λ¦μ "ESP32Policy"λ‘ νκ³ , "Advanced" ν μ ν.
- λ€μ policy ν
νλ¦Ώμ λΆμ¬ λ£κΈ°.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "iot:Connect", "Resource": "arn:aws:iot:REGION:ACCOUNT_ID:client/MyNewESP32" }, { "Effect": "Allow", "Action": "iot:Subscribe", "Resource": "arn:aws:iot:REGION:ACCOUNT_ID:topicfilter/esp32/sub" }, { "Effect": "Allow", "Action": "iot:Receive", "Resource": "arn:aws:iot:REGION:ACCOUNT_ID:topic/esp32/sub" }, { "Effect": "Allow", "Action": "iot:Publish", "Resource": "arn:aws:iot:REGION:ACCOUNT_ID:topic/esp32/pub" } ] }
- "REGION"λ₯Ό νμ¬ μ΄μ μ€μΈ AWS Region λ§μΆκΈ°. (REGIONλ AWS console windowμ μλ¨ μ€λ₯Έμͺ½ ꡬμμ λ°κ²¬λλ€κ³ ν¨.)
- "ACCOUNT_ID"μ μμ μ μμ΄λλ‘ λ°κΎΈκΈ°. (μ΄κ²μ μ΄κ³³μμ μ°Ύμ μ μλ€κ³ ν¨.)
- "Create" ν΄λ¦.
- AWS IoT consoleμμ "Secure", "Certification" μ ν. λλ°μ΄μ€λ₯Ό μν΄ μμ±λ νλͺ© μ ννκ³ , "Actions", "Attach policy" μ ν.
- "Esp32Policy", "Attach" μ ν.
-μ£Όμ-
μμ μ€λͺ μ μ¬μ΄νΈ λ²μ κΈ°λ₯ λλ μμλ‘ ν΄μν΄ μμ±ν κ²μ΄κ³ , AWSλ₯Ό μ§μ μ¬μ© μνκ³ μ¬μ΄νΈ λ΄μ μ€λͺ μΌλ‘λ§ μμ±ν κ²μ΄λΌ ν릴 μ μμ.μ°Έκ³ μ¬μ΄νΈ
- μ λ² μ€μ΅μκ°μ μ©λλ₯Ό λͺ¨λ₯΄κ±°λ μ κ·Έλ κ² μ ν μλμ§ κΆκΈνλ μ½λλ€μ μ©λκ° νΉμ§μ μκ² λμλ€.
- AWSνκ³ ν΄λΌμ°λ, κ·Έ μΈμ μ©μ΄λ€μ λν΄ μκ² λμλ€.