Arduino Projects, Step by Step
Arduino Projects, Step by Step
در ﻣﻮد APﻗﺎدر ﺑﻪ ﺗﻨﻈﯿﻢ (Service Set Identifier) SSIDو Passwordﺑﻮده و ﻣﯿﺘﻮاﻧﺪ ﺑﻪ ﺗﻤﺎﻣﯽ
ﮐﻼﯾﻨﺖ ﻫﺎﯾﺶ ،ﺻﻔﺤﺎت وب ارﺳﺎل ﮐﻨﺪ.
ﺣﺎﻻ ﻧﻮﺑﺖ ﺑﻪ آن رﺳﯿﺪه ﮐﻪ ﺑﺎ ﯾﮏ ﻣﺜﺎل ﺳﺎده ،ﯾﮏ وب ﺳﺮور ﺗﻮﺳﻂ 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>
ESP8266WebServer server(80);
void setup() {
Serial.begin(115200);
pinMode(LED1pin, OUTPUT);
pinMode(LED2pin, OUTPUT);
WiFi.softAP(ssid, password);
WiFi.softAPConfig(local_ip, gateway, subnet);
delay(100);
server.on("/", handle_OnConnect);
server.on("/led1on", handle_led1on);
server.on("/led1off", handle_led1off);
server.on("/led2on", handle_led2on);
server.on("/led2off", handle_led2off);
server.onNotFound(handle_NotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop() {
server.handleClient();
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;
Serial.println("GPIO7 Status: OFF | GPIO6 Status: OFF");
server.send(200, "text/html", SendHTML(LED1status, LED2status));
}
void handle_led1on() {
139
LED1status = HIGH;
Serial.println("GPIO7 Status: ON");
server.send(200, "text/html", SendHTML(true, LED2status));
Page
}
ARDUINO PROJECTS
STEP BY STEP Ali Bayati, Dec. 2019
void handle_led1off() {
LED1status = LOW;
Serial.println("GPIO7 Status: OFF");
server.send(200, "text/html", SendHTML(false, LED2status));
}
void handle_led2on() {
LED2status = HIGH;
Serial.println("GPIO6 Status: ON");
server.send(200, "text/html", SendHTML(LED1status, true));
}
void handle_led2off() {
LED2status = LOW;
Serial.println("GPIO6 Status: OFF");
server.send(200, "text/html", SendHTML(LED1status, false));
}
void handle_NotFound() {
server.send(404, "text/plain", "Not found");
}
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
)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
}
در ﺑﺮﻧﺎﻣﮥ ﻓﻮق ،ﺗﻌﺪادي ﺗﺎﺑﻊ ﺗﻌﺮﯾﻒ ﮐﺮده اﯾﻢ .ﻣﻬﻤﺘﺮﯾﻦ آﻧﻬﺎ ﺗﺎﺑﻊ SendHTMLاﺳﺖ ﮐﻪ وﻇﯿﻔﮥ
ﺳﺎﺧﺖ ﯾﮏ رﺷﺘﮥ ﺑﻠﻨﺪ را دارد ﮐﻪ ﺑﻮﺳﯿﻠﮥ آن رﺷﺘﻪ ﯾﺎ ،Stringﯾﮏ ﺻﻔﺤﮥ وب ﺧﺎص ،ﻣﺘﻨﺎﻇﺮ ﺑﺎ وﺿﻌﯿﺖ LED
ﻫﺎ ﺳﺎﺧﺘﻪ ﺧﻮاﻫﺪ ﺷﺪ .ﺑﻪ اﯾﻦ ﺗﺎﺑﻊ ،دو ورودي )وﺿﻌﯿﺖ ﺧﺎﻣﻮش/روﺷﻦ LEDﻫﺎ( را ﺑﺎﯾﺪ ﺑﺪﻫﯿﻢ .ﺑﺮ ﺣﺴﺐ اﯾﻨﮑﻪ
ﮐﺪام LEDﺑﺎﯾﺪ ﺧﺎﻣﻮش ﯾﺎ روﺷﻦ ﺑﺸﻮد ،اﯾﻦ ﺗﺎﺑﻊ اﻗﺪام ﺑﻪ اﯾﺠﺎد ﯾﮏ رﺷﺘﮥ ﺑﻠﻨﺪ )ﺑﻪ ﻧﺎم (ptrﻣﯿﮑﻨﺪ و آن را
ﺑﻌﻨﻮان ﺧﺮوﺟﯽ ﺗﺎﺑﻊ ،ﺑﺎز ﻣﯿﮕﺮداﻧﺪ .ﻣﺤﺘﻮﯾﺎت اﯾﻦ رﺷﺘﻪ ،ﮐﺪﻫﺎي HTMLاﺳﺖ ﮐﻪ Browserﺷﻤﺎ ﺑﺎ ﺗﻔﺴﯿﺮ
آن رﺷﺘﻪ ،اﻗﺪام ﺑﻪ ﻧﻤﺎﯾﺶ ﯾﮏ ﺻﻔﺤﮥ وب ﺧﻮاﻫﺪ ﮐﺮد .در اﯾﻦ رﺷﺘﻪ ،ﺗﻤﺎﻣﯽ ﺟﺰﺋﯿﺎت ﺻﻔﺤﮥ وب ،از ﻗﺒﯿﻞ ﻋﻨﻮان،
ﻣﺘﻮن ،دﮐﻤﻪ ﻫﺎ و ...ﺑﺎ ﺗﻤﺎﻣﯽ ﻣﺸﺨﺼﺎت آﻧﻬﺎ ،ﺷﺎﻣﻞ ﻧﻮع ﻓﻮﻧﺖ ،ﺳﺎﯾﺰ ،رﻧﮓ ،ﻣﻮﻗﻌﯿﺖ ﻗﺮارﮔﯿﺮي در ﺻﻔﺤﮥ وب،
و ﭘﺎراﻣﺘﺮﻫﺎي دﯾﮕﺮ ،ﺗﻨﻈﯿﻢ ﻣﯿﺸﻮد .ﻻزﻣﮥ ﯾﺎدﮔﯿﺮي HTMLﮔﺬراﻧﺪن دوره ،ﻣﺸﺎﻫﺪة آﻣﻮزش وﯾﺪﺋﻮﯾﯽ ﯾﺎ ﻣﻄﺎﻟﻌﮥ
ﮐﺘﺎب آﻣﻮزﺷﯽ ﺑﻮده و آﻣﻮزش آن ،ﺑﻌﻠﺖ ﮔﺴﺘﺮدﮔﯽ و ﺣﺠﻢ ﺑﺎﻻي ﻣﻄﺎﻟﺐ ،از ﭼﻬﺎرﭼﻮب اﯾﻦ ﺟﺰوه ﺧﺎرج اﺳﺖ.
ﺑﺮاي آﺷﻨﺎﯾﯽ ﺑﺎ ﮐﺪﻫﺎي HTMLﻣﯿﺘﻮاﻧﯿﺪ ﺑﻪ ﻟﯿﻨﮏ زﯾﺮ رﺟﻮع ﮐﻨﯿﺪ.
https://www.w3schools.com/html/html_intro.asp
در ﻣﺠﻤﻮع 4 ،ﺣﺎﻟﺖ ﺑﺮاي دو LEDوﺟﻮد دارد ﮐﻪ ﺑﺮاي ﻫﺮ ﯾﮏ از آﻧﻬﺎ ،ﯾﮏ ﺻﻔﺤﮥ وب )ﺗﺼﺎوﯾﺮ زﯾﺮ(
ﻧﺘﯿﺠﻪ ﺧﻮاﻫﺪ ﺷﺪ .وﻇﯿﻔﮥ ﺗﻮﻟﯿﺪ اﯾﻦ ﺻﻔﺤﺎت ،ﺑﺮ ﻋﻬﺪة ﺗﺎﺑﻊ SendHTMLاﺳﺖ.
142
Page