ESP8266 모듈을 이용한 웹서버 예제
ESP8266은 WiFi 네트워크에 접속할 수 있는 기능을 제공하는 WiFi 모듈이며 낮은 가격이 특히 장점이다. Arduino IDE에 ESP8266 개발용 라이브러리를 설치하고 ESP8266 펌웨어를 작성하면 ESP8266 모듈을 웹클라이언트나 웹서버로서 작동하도록 할 수 있다.
아래의 내용은 ESP8266 라이브러리에 포함되어 있는 기본적인 웹서버 예제를 약간 변경하여 ESP-01 모듈에 내장된 LED를 ON/OFF하는 내용이다. 내장된 청색 LED는 GPIO 1번 핀에 연결되어 있고, 라이브러리에서는 LED_BUILTIN변수를 사용하여 다룰 수 있다. LED_BUILTIN은 GPIO 1번핀을 의미하며 GPIO 1번핀은 Active LOW로 작동하므로 LOW 상태일 때 내장된 청색 LED가 켜지고 HIGH 상태일 때 켜진다. 참고로 ESP-01 모듈의 GPIO 1번 핀은 시리얼 통신시 Tx 용으로도 사용되므로 시리얼 통신과 내장 LED 점등 기능을 위해 동시에 사용될 수는 없다.
그러므로 아래의 코드는 GPIO 1번 핀에 연결된 내장 LED를 점등하기 위해 핀 모드를 설정했기 때문에 코드에 사용된 Serial.print() 기능은 실행되지 않으며 LED ON/OFF 기능만 작동한다
Arduino IDE에 ESP8266 개발을 위한 라이브러리 설치법은 여기를 클릭하여 참조하면 된다
테스트 환경
ESP8266 (ESP-01)
ESP8266개발을 위한 Arduino IDE
펌웨어 개발을 위한 연결도
http://micropilot.tistory.com/category/Arduino/ESP8266%20Arduino%20IDE
ESP8266 Arduino IDE 라이브러리에 포함된 웹서버 예제 (1번핀에 연결된 청색 내장 LED를 ON/OFF할 수 있도록 약간 변경함)
/* * This sketch demonstrates how to set up a simple HTTP-like server. * The server will set a GPIO pin depending on the request * http://server_ip/gpio/0 will set the GPIO2 low, * http://server_ip/gpio/1 will set the GPIO2 high * server_ip is the IP address of the ESP8266 module, will be * printed to Serial when the module is connected. */ #include <ESP8266WiFi.h> const char* ssid = "my_class_id"; const char* password = "duniv2016"; // Create an instance of the server // specify the port to listen on as an argument WiFiServer server(80); void setup() { Serial.begin(115200); delay(10); // prepare GPIO1(LED_BUILTIN), GPIO1 is connected to internal blue LED // LED_BUILTIN is Active LOW. So, 0 is ON, 1 is OFF pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, 0); // LED_BUILTIN ON // Connect to WiFi network Serial.println(); Serial.println(); Serial.print("Connecting to "); Serial.println(ssid); 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('\n'); Serial.println(req); client.flush(); // Match the request int val; if (req.indexOf("/gpio/0") != -1) val = 0; else if (req.indexOf("/gpio/1") != -1) val = 1; else { Serial.println("invalid request"); client.stop(); return; } // Set GPIO2 according to the request digitalWrite(LED_BUILTIN, 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(LED_BUILTIN OFF)":"low(LED_BUILTIN ON)"; 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 }