ESP8266 เป็นเว็บเซิฟเวอร์ คุมรีเลย์ 4 channel control by web browser



ESP8266 เป็นเว็บเซิฟเวอร์ คุมรีเลย์ 4 channel control by web browser

อุปกรณ์ 

1. บอร์ด esp8266

2. เครื่องคอมพิวเตอร์ 

3. สายเชื่อมต่อ usb หรือสำหรับอัพโหลดโปรแกรมและจ่ายพลังงาน

4. Relay 4 channel


ขั้นตอนและวิธีการสร้าง 

ขั้นตอนที่ 1. ทำความเข้าใจเกี่ยวกับโค้ดเว็บไซต์  HTML 

บันทึกเป็นไฟล์ helloworld.html

(คลิปก่อนหน้านี้)

ขั้นตอนที่ 2: การสร้างเว็บเซิร์ฟเวอร์บน ESP8266

สั่งพิมพ์ hello World และ next page 

(คลิปก่อนหน้านี้)

ขั้นตอนที่ 3.ปรับโค้ด HTML บันทึกเป็น index.h เก็บไฟล์ไว้ระดับเดียวกับ

ไฟล์ Arduino IDE 

const char MAIN_page[] PROGMEM = R"=====(

<HTML>

<HEAD>

<TITLE>My first web page</TITLE>

</HEAD>

<BODY>

<CENTER>

<B>Hello World.... </B>

</CENTER>

</BODY>

</HTML>

)=====";


อธิบายโค้ด const char MAIN_page[] PROGMEM = R"

โค้ดบรรทัดนี้ในภาษา C/C++ กำหนดตัวแปรและค่าให้กับตัวแปรนั้น 

เพื่อใช้ในการจัดเก็บข้อความ HTML สำหรับแสดงผลบนหน้าเว็บไซต์ โดยมีรายละเอียดดังนี้:

การประกาศตัวแปร 

const char MAIN_page[]:

const: ระบุว่าค่าของตัวแปรนี้จะไม่สามารถเปลี่ยนแปลงได้หลังจากการกำหนดค่าครั้งแรก (constant)

char: ระบุว่าตัวแปรนี้จะเก็บข้อมูลชนิดอักขระ (character)

MAIN_page[]: ชื่อของตัวแปร (identifier) ที่ใช้ในการอ้างอิงถึงข้อความ HTML นี้ 

โดย [] บ่งบอกว่าเป็น array (อาร์เรย์) ของอักขระ หรือก็คือสตริงนั่นเอง


อธิบายโค้ด const char MAIN_page[] PROGMEM = R"

โค้ดบรรทัดนี้ในภาษา C/C++ กำหนดตัวแปรและค่าให้กับตัวแปรนั้น เพื่อใช้ในการจัดเก็บข้อความ HTML สำหรับแสดงผลบนหน้าเว็บไซต์ โดยมีรายละเอียดดังนี้:


การกำหนดค่าด้วย R"

R": เป็น raw string literal ในภาษา C++ ช่วยให้สามารถเขียนสตริงที่มีอักขระพิเศษ เช่น \n, 

ได้โดยไม่ต้องใส่ backslash (\) เหตุผลที่ใช้ raw string literal:

ความสะดวกในการเขียน: ไม่ต้องกังวลกับการใส่ backslash อักขระพิเศษ

ลดความผิดพลาด: ลดโอกาสในการเกิดข้อผิดพลาดจากการใส่ backslash ผิด

เรียกใช้ใหม่ เป็น 

void handleRoot() {

  server.send(200, "text / plain", MAIN_page);

}

ขั้นตอนที่ 3: สร้างปุ่มบนเว็บ โดยเพิ่มโค้ด HTML 

<h1>Switch 1 : on  off </h1><br>

Click to turn <a href="Swon">Switch ON</a><br>

Click to turn <a href="Swoff">Switch OFF</a><br>    

ขั้นตอนที่ 4: เพิ่มโค้ด Switch On /OFF  

void handleSwon() { 

 Serial.println("Switch On");

 server.send(200, "text/html", "Switch is ON"); 

}

void handleSwoff() { 

 Serial.println("Switch Off");

 server.send(200, "text/html", "Switch is Off"); 

}

ขั้นตอนที่ 4: ประกอบเข้าด้วยกันทดสอบและแก้ไข 

#include <ESP8266WiFi.h>

#include <WiFiClient.h>

#include <ESP8266WebServer.h>

//SSID and Password of your WiFi router

const char* ssid = "Nui 2.4G";

const char* password = "0895515998";

ESP8266WebServer server(80); //Server on port 80

const char MAIN_page[] PROGMEM = R"=====(

<HTML>

<HEAD>

<TITLE>My first web page</TITLE>

</HEAD>

<BODY>

<CENTER>

<B>Hello World ESP8266 EP02</B>

      <h1>Switch 1 :</h1>

      Ciclk to turn <a href="Swon">Switch ON</a><br>

      Ciclk to turn <a href="Swoff">Switch OFF</a><br>      

</CENTER>

</BODY>

</HTML>

)=====";

void handleRoot() {

  server.send(200, "text / plain", MAIN_page);

}

void handleSwon() { 

 Serial.println("Switch On");

 server.send(200, "text/html", "Switch is ON"); 

}

void handleSwoff() { 

 Serial.println("Switch Off");

 server.send(200, "text/html", "Switch is Off"); 

}

void setup(void){

  Serial.begin(115200);

  //เชื่อมต่อวายฟาย ด้วยคำสั่ง

  WiFi.begin(ssid,password);     //Connect to your WiFi router

  Serial.println("");

  //คำสั่งสำหรับ พยายามเชื่อมต่อจนกว่าจะได้

  // Wait for connection

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

    delay(500);

    Serial.print(".");

  }


  //If connection successful show IP address in serial monitor

  Serial.println("");

  Serial.print("Connected to ");

  Serial.println(ssid);

  Serial.print("IP address: ");

  //พิมพ์หมายเลขไอพี เพื่อเปิดดูในหน้าเว็บ

  Serial.println(WiFi.localIP());  //IP address assigned to your ESP

 

  server.on("/", handleRoot);      //Which routine to handle at root location

  server.on("/Swon", handleSwon); //as Per  <a href="ledOn">, Subroutine to be called

  server.on("/Swoff", handleSwoff);  

  server.begin();                  //Start server

  Serial.println("HTTP server started");

}

  

void loop(void){

  server.handleClient();          //Handle client requests

}


 

5. ปรับให้คลิกแล้วอยู่หน้าเดิมด้วยคำสั่ง Tags

target="thispage" และ 

<iframe name="thispage">


<CENTER>

<h1>Hello World ESP8266 EP02</h1>   

      Ciclk to turn <a href="Swon"  target="thispage">Switch ON</a><br>

      Ciclk to turn <a href="Swoff" target="thispage">Switch OFF</a><br>      

      <iframe name="thispage" width="200" height="50" frameBorder="0">

</CENTER>


6.ทำการเชื่อมต่อกับอุปกรณ์ เช่น Led ,Relay  เป็นต้น

ESP8266 เชื่อมต่อรีเลย์ 4 channel 

การเชื่อมต่อ ใช้ ขารีเลย์ ตัวเดียว

ESP8266   -> Relay 4 channel

3V        -> VCC

D1(GPIO5) -> In1

GND     -> GND

ประกาศตัวแปร 

int r1 = 5;

void setup() {

//ตั้งค่า พินเลข  เป็นเอาท์พุต

pinMode(r1, OUTPUT);

//เปิดจ่ายไฟ ค่าพินเลข   เพื่อปิดการทำงานของ Relay

digitalWrite(r1, HIGH);

}

สั่งเปิด / รีเลย์ 

digitalWrite(r1,HIGH); // off

digitalWrite(r1,LOW); //  on


//Complete Code

#include <ESP8266WiFi.h>

#include <WiFiClient.h>

#include <ESP8266WebServer.h>

//SSID and Password of your WiFi router

const char* ssid = "Nui 2.4G";

const char* password = "0895515998";

ESP8266WebServer server(80); //Server on port 80

int r1 = 5;

const char MAIN_page[] PROGMEM = R"=====(

<HTML>

<HEAD>

<TITLE>My first web page</TITLE>

</HEAD>

<BODY>

<CENTER>

<h1>Hello World ESP8266 EP02</h1>   

      Ciclk to turn <a href="Swon"  target="thispage">Switch ON</a><br>

      Ciclk to turn <a href="Swoff" target="thispage">Switch OFF</a><br>      

      <iframe name="thispage" width="200" height="50" frameBorder="0">

</CENTER>

</BODY>

</HTML>

)=====";

void handleRoot() {

  server.send(200, "text / plain", MAIN_page);

}

void handleSwon() { 

 Serial.println("Switch On");

 digitalWrite(r1,LOW); //LED off 

 server.send(200, "text/html", "Switch is ON"); 

}

void handleSwoff() { 

 Serial.println("Switch Off");

 digitalWrite(r1,HIGH); //LED off  

 server.send(200, "text/html", "Switch is Off"); 

}

void setup(void){

  Serial.begin(115200);

  //ตั้งค่า พินเลข  เป็นเอาท์พุต

  pinMode(r1, OUTPUT);

  //เปิดจ่ายไฟ ค่าพินเลข   เพื่อปิดการทำงานของ Relay

  digitalWrite(r1, HIGH);

  //เชื่อมต่อวายฟาย ด้วยคำสั่ง

  WiFi.begin(ssid,password);     //Connect to your WiFi router

  Serial.println("");

  //คำสั่งสำหรับ พยายามเชื่อมต่อจนกว่าจะได้

  // Wait for connection

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

    delay(500);

    Serial.print(".");

  }


  //If connection successful show IP address in serial monitor

  Serial.println("");

  Serial.print("Connected to ");

  Serial.println(ssid);

  Serial.print("IP address: ");

  //พิมพ์หมายเลขไอพี เพื่อเปิดดูในหน้าเว็บ

  Serial.println(WiFi.localIP());  //IP address assigned to your ESP

 

  server.on("/", handleRoot);      //Which routine to handle at root location

  server.on("/Swon", handleSwon); //as Per  <a href="ledOn">, Subroutine to be called

  server.on("/Swoff", handleSwoff);  

  server.begin();                  //Start server

  Serial.println("HTTP server started");

}

  

void loop(void){

  server.handleClient();          //Handle client requests

}

/////////////////////////////////////////////////

Relate:

https://gnipsel.com/esp8266/esp8266_01.html 

https://circuits4you.com/2018/02/05/esp8266-arduino-wifi-web-server-led-on-off-control/



ความคิดเห็น