0% found this document useful (0 votes)
11 views6 pages

ESP8266 LED Control via WiFi

Uploaded by

Tita Fifi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
11 views6 pages

ESP8266 LED Control via WiFi

Uploaded by

Tita Fifi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

‫‪ARDUINO PROJECTS‬‬

‫‪STEP BY STEP‬‬ ‫‪Ali Bayati, Dec. 2019‬‬

‫‪Soft Access Point (AP) Mode‬‬


‫ﻫﻨﮕﺎﻣﯽ ﮐﻪ ‪ ESP8266‬در ﻧﻘﺶ ﯾﮏ ‪ WiFi Router‬ﻇﺎﻫﺮ ﺷﻮد و دﯾﮕﺮ ﮐﻼﯾﻨﺖ ﻫﺎ ﺑﻪ آن ‪ Join‬ﮐﻨﻨﺪ‪،‬‬
‫در ﺣﺎﻟﺖ ‪ Access Point‬راه اﻧﺪازي ﺷﺪه اﺳﺖ‪ .‬اﻣﺎ ﺑﺮ ﺧﻼف ‪ WiFi Router‬ﻗﺎدر ﺑﻪ ﺳﺮوﯾﺲ دﻫﯽ ﺑﺎ‬
‫ﮐﺎﺑﻞ ‪ Ethernet‬ﻧﯿﺴﺖ‪) .‬ﻓﻘﻂ ‪ (WiFi‬و ﻧﻬﺎﯾﺘﺎً ‪ 5‬ﮐﻼﯾﻨﺖ را ﻣﯿﺘﻮاﻧﺪ ﭘﺬﯾﺮا ﺑﺎﺷﺪ‪.‬‬

‫در ﻣﻮد ‪ AP‬ﻗﺎدر ﺑﻪ ﺗﻨﻈﯿﻢ ‪ (Service Set Identifier) SSID‬و ‪ Password‬ﺑﻮده و ﻣﯿﺘﻮاﻧﺪ ﺑﻪ ﺗﻤﺎﻣﯽ‬
‫ﮐﻼﯾﻨﺖ ﻫﺎﯾﺶ‪ ،‬ﺻﻔﺤﺎت وب ارﺳﺎل ﮐﻨﺪ‪.‬‬

‫روﺷﻦ ﮐﺮدن ‪ LED‬ﺑﺎ اﺳﺘﻔﺎده از ‪ ESP8266‬از ﻃﺮﯾﻖ ‪WiFi‬‬

‫ﺣﺎﻻ ﻧﻮﺑﺖ ﺑﻪ آن رﺳﯿﺪه ﮐﻪ ﺑﺎ ﯾﮏ ﻣﺜﺎل ﺳﺎده‪ ،‬ﯾﮏ وب ﺳﺮور ﺗﻮﺳﻂ ‪ ESP8266‬اﯾﺠﺎد ﮐﻨﯿﻢ و از ﻃﺮﯾﻖ‬
‫‪ WiFi‬اﻗﺪام ﺑﻪ ﺧﺎﻣﻮش و روﺷﻦ ﮐﺮدن ﭼﻨﺪ ‪ LED‬ﮐﻨﯿﻢ‪ .‬ﺑﺮاي اﯾﻨﮑﺎر‪ ،‬ﻣﺎژول را روي ﯾﮏ ﺑﺮدﺑﻮرد ﺑﻪ ﻧﺤﻮي‬
‫ﻣﯿﮕﺬارﯾﻢ ﮐﻪ ﻫﺮ ردﯾﻒ از ﭘﯿﻦ ﻫﺎي ﻣﺎژول‪ ،‬در ﯾﮏ ﻧﯿﻤﮥ ﺑﺮدﺑﻮرد ﺑﺎﺷﺪ )ﭘﺎﯾﻪ ﻫﺎي روﺑﺮوي ﻫﻢ‪ ،‬اﺗﺼﺎل ﭘﯿﺪا‬
‫ﻧﮑﻨﻨﺪ(‪ .‬ﺑﺮاي ﭘﺎﯾﮥ آﻧﻮد ﻫﺮ ‪ LED‬ﯾﮏ ﻣﻘﺎوﻣﺖ ‪ 220Ω‬ﻗﺮار ﻣﯿﺪﻫﯿﻢ‪.‬‬
‫‪137‬‬
‫‪Page‬‬
ARDUINO PROJECTS
STEP BY STEP Ali Bayati, Dec. 2019

IDE ‫ ﺳﭙﺲ ﮐﺪ ﻧﺴﺒﺘﺎً ﻃﻮﻻﻧﯽ زﯾﺮ را در‬.‫ ﺑﺎز ﻣﯿﮑﻨﯿﻢ‬Tools ‫ را از ﻣﻨﻮي‬Serial Monitor ‫اﺑﺘﺪا ﭘﻨﺠﺮة‬
.‫ آﭘﻠﻮد ﻣﯿﮑﻨﯿﻢ‬،‫ﮐﺎﻣﭙﺎﯾﻞ و ﺑﻪ ﺑﻮرد‬
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

/* Put your SSID & Password */


const char* ssid = "NodeMCU"; // Enter SSID here
const char* password = "12345678"; //Enter Password here

/* Put IP Address details */


IPAddress local_ip(192, 168, 1, 1);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);

ESP8266WebServer server(80);

uint8_t LED1pin = D7;


138

bool LED1status = LOW;

uint8_t LED2pin = D6;


Page

bool LED2status = LOW;


ARDUINO PROJECTS
STEP BY STEP Ali Bayati, Dec. 2019

void setup() {
[Link](115200);
pinMode(LED1pin, OUTPUT);
pinMode(LED2pin, OUTPUT);

[Link](ssid, password);
[Link](local_ip, gateway, subnet);
delay(100);

[Link]("/", handle_OnConnect);
[Link]("/led1on", handle_led1on);
[Link]("/led1off", handle_led1off);
[Link]("/led2on", handle_led2on);
[Link]("/led2off", handle_led2off);
[Link](handle_NotFound);

[Link]();
[Link]("HTTP server started");
}

void loop() {
[Link]();
if (LED1status)
{
digitalWrite(LED1pin, HIGH);
}
else
{
digitalWrite(LED1pin, LOW);
}

if (LED2status)
{
digitalWrite(LED2pin, HIGH);
}
else
{
digitalWrite(LED2pin, LOW);
}
}

void handle_OnConnect() {
LED1status = LOW;
LED2status = LOW;
[Link]("GPIO7 Status: OFF | GPIO6 Status: OFF");
[Link](200, "text/html", SendHTML(LED1status, LED2status));
}

void handle_led1on() {
139

LED1status = HIGH;
[Link]("GPIO7 Status: ON");
[Link](200, "text/html", SendHTML(true, LED2status));
Page

}
ARDUINO PROJECTS
STEP BY STEP Ali Bayati, Dec. 2019

void handle_led1off() {
LED1status = LOW;
[Link]("GPIO7 Status: OFF");
[Link](200, "text/html", SendHTML(false, LED2status));
}

void handle_led2on() {
LED2status = HIGH;
[Link]("GPIO6 Status: ON");
[Link](200, "text/html", SendHTML(LED1status, true));
}

void handle_led2off() {
LED2status = LOW;
[Link]("GPIO6 Status: OFF");
[Link](200, "text/html", SendHTML(LED1status, false));
}

void handle_NotFound() {
[Link](404, "text/plain", "Not found");
}

String SendHTML(uint8_t led1stat, uint8_t led2stat) {


String ptr = "<!DOCTYPE html> <html>\n";
ptr += "<head><meta name=\"viewport\" content=\"width=device-width, initial-
scale=1.0, user-scalable=no\">\n";
ptr += "<title>LED Control</title>\n";
ptr += "<style>html { font-family: Helvetica; display: inline-block; margin: 0px
auto; text-align: center;}\n";
ptr += "body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;} h3
{color: #444444;margin-bottom: 50px;}\n";
ptr += ".button {display: block;width: 80px;background-color: #1abc9c;border:
none;color: white;padding: 13px 30px;text-decoration: none;font-size: 25px;margin: 0px
auto 35px;cursor: pointer;border-radius: 4px;}\n";
ptr += ".button-on {background-color: #1abc9c;}\n";
ptr += ".button-on:active {background-color: #16a085;}\n";
ptr += ".button-off {background-color: #34495e;}\n";
ptr += ".button-off:active {background-color: #2c3e50;}\n";
ptr += "p {font-size: 14px;color: #888;margin-bottom: 10px;}\n";
ptr += "</style>\n";
ptr += "</head>\n";
ptr += "<body>\n";
ptr += "<h1>ESP8266 Web Server</h1>\n";
ptr += "<h3>Using Access Point(AP) Mode</h3>\n";

if (led1stat)
{
ptr += "<p>LED1 Status: ON</p><a class=\"button button-off\"
href=\"/led1off\">OFF</a>\n";
140

}
else
{
Page
‫‪ARDUINO PROJECTS‬‬
‫‪Ali Bayati, Dec. 2019‬‬
‫‪STEP BY STEP‬‬

‫"\‪ptr += "<p>LED1 Status: OFF</p><a class=\"button button-on‬‬


‫;"‪href=\"/led1on\">ON</a>\n‬‬
‫}‬

‫)‪if (led2stat‬‬
‫{‬
‫"\‪ptr += "<p>LED2 Status: ON</p><a class=\"button button-off‬‬
‫;"‪href=\"/led2off\">OFF</a>\n‬‬
‫}‬
‫‪else‬‬
‫{‬
‫"\‪ptr += "<p>LED2 Status: OFF</p><a class=\"button button-on‬‬
‫;"‪href=\"/led2on\">ON</a>\n‬‬
‫}‬

‫;"‪ptr += "</body>\n‬‬
‫;"‪ptr += "</html>\n‬‬
‫;‪return ptr‬‬
‫}‬

‫ﺑﻌﺪ از آﭘﻠﻮد ﮐﺪ‪ ،‬ﻣﻮﺑﺎﯾﻞ ﯾﺎ ﺗﺒﻠﺖ ﯾﺎ ﮐﺎﻣﭙﯿﻮﺗﺮ را ﺑﻪ ‪WiFi‬‬


‫ﺑﻮﺟﻮد آﻣﺪه ﺑﻪ ﻧﺎم ‪ NodeMCU‬ﻣﺘﺼﻞ ﮐﺮده و ﻋﺪد‬
‫‪ 12345678‬را ﺑﻌﻨﻮان ‪ Password‬وارد ﻣﯿﮑﻨﯿﻢ‪.‬‬
‫ﺳﭙﺲ در ﯾﮏ ‪ Web Browser‬ﻣﺜﻞ ‪Safari,‬‬
‫‪ Firefox, Google‬در ﻗﺴﻤﺖ ﺑﺎﻻ‪ ،‬آدرس ‪ IP‬ﺑﻮرد را‬
‫‪ [Link]‬وارد ﻣﯿﮑﻨﯿﻢ‪ .‬ﺑﺎ ارﺳﺎل آدرس‪ ،‬ﺻﻔﺤﮥ‬
‫روﺑﺮو در ‪ Browser‬ﺑﻪ ﻧﻤﺎﯾﺶ در ﻣﯿﺎﯾﺪ‪ .‬ﺑﺎ ﮐﻠﯿﮏ روي‬
‫ﻫﺮ ﮐﺪام از دﮐﻤﻪ ﻫﺎي ﻧﻤﺎﯾﺶ داده ﺷﺪه‪ LED ،‬ﻣﺘﻨﺎﻇﺮ ﺑﺎ‬
‫آن دﮐﻤﻪ‪ ،‬روﺷﻦ ﺷﺪه و ﺑﺎ ﮐﻠﯿﮏ ﻣﺠﺪد ﺑﺮ روي آن‪،‬‬
‫ﺧﺎﻣﻮش ﺧﻮاﻫﺪ ﺷﺪ‪ .‬اﮔﺮ دﻗﺖ ﮐﻨﯿﺪ‪ ،‬ﺑﺎ ﻫﺮ ﺑﺎر ﮐﻠﯿﮏ ﮐﺮدن‬
‫روي دﮐﻤﻪ‪ ،‬ﺻﻔﺤﻪ ‪ Refresh‬ﻣﯿﺸﻮد و ﺻﻔﺤﮥ ﺟﺪﯾﺪي‬
‫ﺑﺎر ﮔﺬاري ﻣﯿﺸﻮد‪.‬‬
‫‪141‬‬
‫‪Page‬‬
‫‪ARDUINO PROJECTS‬‬
‫‪STEP BY STEP‬‬ ‫‪Ali Bayati, Dec. 2019‬‬

‫در ﺑﺮﻧﺎﻣﮥ ﻓﻮق‪ ،‬ﺗﻌﺪادي ﺗﺎﺑﻊ ﺗﻌﺮﯾﻒ ﮐﺮده اﯾﻢ‪ .‬ﻣﻬﻤﺘﺮﯾﻦ آﻧﻬﺎ ﺗﺎﺑﻊ ‪ SendHTML‬اﺳﺖ ﮐﻪ وﻇﯿﻔﮥ‬
‫ﺳﺎﺧﺖ ﯾﮏ رﺷﺘﮥ ﺑﻠﻨﺪ را دارد ﮐﻪ ﺑﻮﺳﯿﻠﮥ آن رﺷﺘﻪ ﯾﺎ ‪ ،String‬ﯾﮏ ﺻﻔﺤﮥ وب ﺧﺎص‪ ،‬ﻣﺘﻨﺎﻇﺮ ﺑﺎ وﺿﻌﯿﺖ ‪LED‬‬
‫ﻫﺎ ﺳﺎﺧﺘﻪ ﺧﻮاﻫﺪ ﺷﺪ‪ .‬ﺑﻪ اﯾﻦ ﺗﺎﺑﻊ‪ ،‬دو ورودي )وﺿﻌﯿﺖ ﺧﺎﻣﻮش‪/‬روﺷﻦ ‪ LED‬ﻫﺎ( را ﺑﺎﯾﺪ ﺑﺪﻫﯿﻢ‪ .‬ﺑﺮ ﺣﺴﺐ اﯾﻨﮑﻪ‬
‫ﮐﺪام ‪ LED‬ﺑﺎﯾﺪ ﺧﺎﻣﻮش ﯾﺎ روﺷﻦ ﺑﺸﻮد‪ ،‬اﯾﻦ ﺗﺎﺑﻊ اﻗﺪام ﺑﻪ اﯾﺠﺎد ﯾﮏ رﺷﺘﮥ ﺑﻠﻨﺪ )ﺑﻪ ﻧﺎم ‪ (ptr‬ﻣﯿﮑﻨﺪ و آن را‬
‫ﺑﻌﻨﻮان ﺧﺮوﺟﯽ ﺗﺎﺑﻊ‪ ،‬ﺑﺎز ﻣﯿﮕﺮداﻧﺪ‪ .‬ﻣﺤﺘﻮﯾﺎت اﯾﻦ رﺷﺘﻪ‪ ،‬ﮐﺪﻫﺎي ‪ HTML‬اﺳﺖ ﮐﻪ ‪ Browser‬ﺷﻤﺎ ﺑﺎ ﺗﻔﺴﯿﺮ‬
‫آن رﺷﺘﻪ‪ ،‬اﻗﺪام ﺑﻪ ﻧﻤﺎﯾﺶ ﯾﮏ ﺻﻔﺤﮥ وب ﺧﻮاﻫﺪ ﮐﺮد‪ .‬در اﯾﻦ رﺷﺘﻪ‪ ،‬ﺗﻤﺎﻣﯽ ﺟﺰﺋﯿﺎت ﺻﻔﺤﮥ وب‪ ،‬از ﻗﺒﯿﻞ ﻋﻨﻮان‪،‬‬
‫ﻣﺘﻮن‪ ،‬دﮐﻤﻪ ﻫﺎ و ‪ ...‬ﺑﺎ ﺗﻤﺎﻣﯽ ﻣﺸﺨﺼﺎت آﻧﻬﺎ‪ ،‬ﺷﺎﻣﻞ ﻧﻮع ﻓﻮﻧﺖ‪ ،‬ﺳﺎﯾﺰ‪ ،‬رﻧﮓ‪ ،‬ﻣﻮﻗﻌﯿﺖ ﻗﺮارﮔﯿﺮي در ﺻﻔﺤﮥ وب‪،‬‬
‫و ﭘﺎراﻣﺘﺮﻫﺎي دﯾﮕﺮ‪ ،‬ﺗﻨﻈﯿﻢ ﻣﯿﺸﻮد‪ .‬ﻻزﻣﮥ ﯾﺎدﮔﯿﺮي ‪ HTML‬ﮔﺬراﻧﺪن دوره‪ ،‬ﻣﺸﺎﻫﺪة آﻣﻮزش وﯾﺪﺋﻮﯾﯽ ﯾﺎ ﻣﻄﺎﻟﻌﮥ‬
‫ﮐﺘﺎب آﻣﻮزﺷﯽ ﺑﻮده و آﻣﻮزش آن‪ ،‬ﺑﻌﻠﺖ ﮔﺴﺘﺮدﮔﯽ و ﺣﺠﻢ ﺑﺎﻻي ﻣﻄﺎﻟﺐ‪ ،‬از ﭼﻬﺎرﭼﻮب اﯾﻦ ﺟﺰوه ﺧﺎرج اﺳﺖ‪.‬‬
‫ﺑﺮاي آﺷﻨﺎﯾﯽ ﺑﺎ ﮐﺪﻫﺎي ‪ HTML‬ﻣﯿﺘﻮاﻧﯿﺪ ﺑﻪ ﻟﯿﻨﮏ زﯾﺮ رﺟﻮع ﮐﻨﯿﺪ‪.‬‬

‫‪[Link]

‫در ﻣﺠﻤﻮع‪ 4 ،‬ﺣﺎﻟﺖ ﺑﺮاي دو ‪ LED‬وﺟﻮد دارد ﮐﻪ ﺑﺮاي ﻫﺮ ﯾﮏ از آﻧﻬﺎ‪ ،‬ﯾﮏ ﺻﻔﺤﮥ وب )ﺗﺼﺎوﯾﺮ زﯾﺮ(‬
‫ﻧﺘﯿﺠﻪ ﺧﻮاﻫﺪ ﺷﺪ‪ .‬وﻇﯿﻔﮥ ﺗﻮﻟﯿﺪ اﯾﻦ ﺻﻔﺤﺎت‪ ،‬ﺑﺮ ﻋﻬﺪة ﺗﺎﺑﻊ ‪ SendHTML‬اﺳﺖ‪.‬‬

‫‪142‬‬
‫‪Page‬‬

You might also like