ในบทความนี้ผมจะอธิบายถึงวิธีการทําให้ ESP8266 เป็น Access point ให้อุปกรณ์อุปกรณ์อื่นๆ ที่เชื่อมต่อ wifi ได้ เช่น computer, smart phone ฯลฯ มาเชื่อมต่อกับ SEP8266 แล้วควบคุม i/o ปิด/เปิด LED ผ่านเว็บ ด้วยวิธีส่งข้อมูลผ่าน HTTP_GET เช่น
- http://192.1681.2/led?set=1 คือสั่งให้ LED ติด
- http://192.1681.2/led?set=0 คือสั่งให้ LED ดับ
อุปกรณ์ที่ต้องใช้คือ
- NodeMcu(ESP8266)
- Arduino IDE(ติดตั้งบอร์ด ESP8266 เรียบร้อยแล้ว)
Source Code ตัวอย่าง
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
/*-- Set SSID, Password and IP --*/
const char *ssid = "test-esp8266"; //config ssid
const char *password = "12345678"; //config password
const byte wifi_ip[4] = {192, 168, 1, 2}; //config ipaddress of access point
const byte wifi_subnet[4] = {255, 255, 255, 0}; //config subnet mask of access point
const byte wifi_gateway[4] = {192, 168, 1, 1}; //config gateway of access point
/*-- Create server port 80 --*/
ESP8266WebServer server(80);
/*-- http://ip_address/ --*/
void root() {
server.send(200, "text/html", "<h1>Hello World :)</h1><br/>");
}
/*-- http://ip_address/led --*/
void led(){
if(server.arg("set")=="1"){
digitalWrite(BUILTIN_LED, LOW); // LED ON
server.send(200, "text/html", "<h1>LED: ON</h1><br/>");
}else if(server.arg("set")=="0"){
digitalWrite(BUILTIN_LED, HIGH); // LED OFF
server.send(200, "text/html", "<h1>LED: OFF</h1><br/>");
}
}
void setup() {
/*-- Initial pin output --*/
pinMode(BUILTIN_LED, OUTPUT);
/*-- Config wifi ---*/
WiFi.softAP(ssid, password);
WiFi.softAPConfig(
IPAddress(wifi_ip[0], wifi_ip[1], wifi_ip[2], wifi_ip[3]),
IPAddress(wifi_gateway[0], wifi_gateway[1], wifi_gateway[2], wifi_gateway[3]),
IPAddress(wifi_subnet[0], wifi_subnet[1], wifi_subnet[2], wifi_subnet[3])
);
/*-- Handle url request --*/
server.on("/", root); // http://ip_address/
server.on("/led", HTTP_GET, led); // http://ip_address/led
/*-- Server start --*/
server.begin();
}
void loop() {
server.handleClient();
}
download source code จาก Source code ตัวอย่าง esp8266 จะทำงานเป็น Access point โดยมีรายละเอียดดังนี้
- ssid : test-esp8266
- password : 123456789
- ip address : 192.168.1.2
- subnet mask : 255.255.255.0
- gateway : 192.168.1.1
สามารถเปลี่ยนได้ตรงบรรทัดที่ 6-10 ถ้าไม่ต้องการใส่ password สามารถแก้ตรงบรรทัดที่ 37 โดยลบพารามิเตอร์ password ออก function root จะทำงานเมื่อเรียก http://192.168.1.2/ โดยใน function นี้ผมเขียนให้แสดงคำว่า Hello World function led จะทำงานเมื่อเรียก http://192.168.1.2/led โดยใน function นี้ ผมเขียนให้รับค่าจาก HTTP_GET มาเพื่อควบคุมการ ปิด-เปิด LED ตัวอย่างการเรียกคือ http://192.168.1.2/led?set=1 มีข้อสงสัยตรงไหน หรือผิดพลาดอะไรก็ comment ได้เลยนะครับ :) ดูวีดีโอตัวอย่าง