ESP8266과 릴레이 사용하여 전구 점등
아두이노를 다룰때 아두이노에 ESP8266을 장착하여 와이파이로 앱인벤터와 스마트폰으로 대상과 통신을 하는 방법은 예정에도 다루어 보았었다.
이번에는 아두이노가 아닌 ESP8266에 코드를 직접올려, 부트로더를 하여 아두이노를 통하는게 아닌 ESP8266과 직접적으로 통신을 사용했다.
➤필요 물품
ESP8266
릴레이
USB
➤코드
#include <ESP8266WiFi.h>
const char* ssid = "AR403";
const char* password = "itedu203";
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);
void setup() {
Serial.begin(9600);
delay(10);
// prepare GPIO2
pinMode(2, OUTPUT);
digitalWrite(2, 0);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
////////////
WiFi.mode(WIFI_STA);//ESP8266WiFilType.h에 존재
////////////
IPAddress ip(192,168,0,17);//사용할 ip주소
IPAddress gateway(192,168,0,1);//게이트웨이 주소
IPAddress subnet(255,255,255,0);//서브넷 주소
WiFi.config(ip,gateway,subnet);
////////////
WiFi.begin(ssid, password);
///////////
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.println(WiFi.localIP());
}
void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
// Wait until the client sends some data
Serial.println("new client");
while (!client.available()) {
delay(1);
}
// Read the first line of the request
String req = client.readStringUntil('\r');
Serial.println(req);
client.flush();
// Match the request
int val;
if (req.indexOf("/Relay=0") != -1) {
val = 0;
} else if (req.indexOf("/Relay=1") != -1) {
val = 1;
} else {
Serial.println("invalid request");
client.stop();
return;
}
// Set GPIO2 according to the request
digitalWrite(2, val);
client.flush();
// Prepare the response
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now ";
s += (val) ? "high" : "low";
s += "</html>\n";
// Send the response to the client
client.print(s);
delay(1);
Serial.println("Client disonnected");
// The client will actually be disconnected
// when the function returns and 'client' object is detroyed
}
ESP8266을 다시 켰을때 ip주소가 동일하게 하기 위한 코드도 작성하였다.
➤작동 사진
이번에는 아두이노가 아닌 ESP8266에 코드를 직접올려, 부트로더를 하여 아두이노를 통하는게 아닌 ESP8266과 직접적으로 통신을 사용했다.
➤필요 물품
ESP8266
릴레이
USB
➤코드
#include <ESP8266WiFi.h>
const char* ssid = "AR403";
const char* password = "itedu203";
// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);
void setup() {
Serial.begin(9600);
delay(10);
// prepare GPIO2
pinMode(2, OUTPUT);
digitalWrite(2, 0);
// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
////////////
WiFi.mode(WIFI_STA);//ESP8266WiFilType.h에 존재
////////////
IPAddress ip(192,168,0,17);//사용할 ip주소
IPAddress gateway(192,168,0,1);//게이트웨이 주소
IPAddress subnet(255,255,255,0);//서브넷 주소
WiFi.config(ip,gateway,subnet);
////////////
WiFi.begin(ssid, password);
///////////
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
// Start the server
server.begin();
Serial.println("Server started");
// Print the IP address
Serial.println(WiFi.localIP());
}
void loop() {
// Check if a client has connected
WiFiClient client = server.available();
if (!client) {
return;
}
// Wait until the client sends some data
Serial.println("new client");
while (!client.available()) {
delay(1);
}
// Read the first line of the request
String req = client.readStringUntil('\r');
Serial.println(req);
client.flush();
// Match the request
int val;
if (req.indexOf("/Relay=0") != -1) {
val = 0;
} else if (req.indexOf("/Relay=1") != -1) {
val = 1;
} else {
Serial.println("invalid request");
client.stop();
return;
}
// Set GPIO2 according to the request
digitalWrite(2, val);
client.flush();
// Prepare the response
String s = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\nGPIO is now ";
s += (val) ? "high" : "low";
s += "</html>\n";
// Send the response to the client
client.print(s);
delay(1);
Serial.println("Client disonnected");
// The client will actually be disconnected
// when the function returns and 'client' object is detroyed
}
ESP8266을 다시 켰을때 ip주소가 동일하게 하기 위한 코드도 작성하였다.
➤작동 사진
댓글
댓글 쓰기