//##1. 라이브러리 선언 #include "DM_G_I2C.h" // 다이바이스마트-I2C통신라이브러리 #include <SPI.h> // SPI,WIRE 등 LCD제어 라이브러리 #include <Wire.h> //##2. WIFI통신을 하기 위한 내용들 ---------------------------------- String sendData(String command, const int timeout, boolean debug); // 와이파이 모듈과 통신하기 위한 한숨 void WIFI_Initial(); // 와이파이 초기 설정 함수 #include <SoftwareSerial.h> // 라이브러리(헤더파일) 선언 SoftwareSerial WIFI_Serial(2,3); // 소프트시리얼 사용 (아두이노는 시리얼이 1개 이기 때문) #define DEBUG true // 체크 확인 디버그 const int WIFI_Initial_time = 2000; // 와이파이 대기 시간 String WIFI_Name = "AT+CWSAP=\"DEVICEMART\",\"99999999\",5,3\r\n"; // ((Check)) WIFI -> Name, Password String WIFI_DATA = ""; // 데이터 받는 변수 String DATA_STRING; //-------------------------------------------------------------------- //##3. Setup문 void setup() { Serial.begin(9600); // 시리얼 신호 속도 선언 및 초기화 (시리얼모니터(PC) 사용하기 위함) WIFI_Serial.begin(9600); // 시리얼 신호 속도 선언 및 초기화 (와이파이 모듈과 통신하기 위함) WIFI_Initial(); // 와이파이 통신 초기화 하기 OLED_SETUP(); // OLED 초기 셋업 하기 pinMode(12,OUTPUT); // LED 키기 위한 핀 모드 초기 작업 digitalWrite(12,LOW); // LED 초기 설정 - LOW(꺼짐) } //##4. Loop문 void loop() { if(WIFI_Serial.available()>0) { /*** DATA SENSING Function ***/ int timeout =100; String response = ""; long int time = millis(); while( (time+timeout) > millis()) { while(WIFI_Serial.available()) { // The esp has data so display its output to the serial window char c = WIFI_Serial.read(); // read the next character. response+=c; } } Serial.println(response); DATA_STRING = response.substring(12,15); /*** DATA SENSING Function ***/ if(DATA_STRING == "/on"){ // /on데이터가 들어왔을 때 LED 켜기 digitalWrite(12,HIGH); OLED_Display(2,0,0,"DEVICEMART"); delay(1000); OLED_Display_add(2,0,15,DATA_STRING); delay(1000);} if(DATA_STRING == "/of") { // /of데이터가 들어왔을 때 LED 꺼기 digitalWrite(12,LOW); OLED_Display(2,0,0,"DEVICEMART"); delay(1000); OLED_Display_add(2,0,15,DATA_STRING); delay(1000);} } } void WIFI_Initial(){ // 와이파이 초기화 함수 sendData("AT+RST\r\n",WIFI_Initial_time,DEBUG); // 모듈 리셋 명령어 sendData("AT+CWMODE=3\r\n",WIFI_Initial_time,DEBUG); // STATION, AP모드 동시 사용 명령어 sendData(WIFI_Name,WIFI_Initial_time,DEBUG); // 와이파이 서버 설정(이름, 암호) sendData("AT+CIPMUX=1\r\n",WIFI_Initial_time,DEBUG); // MUX On sendData("AT+CIPSERVER=1,1314\r\n",WIFI_Initial_time,DEBUG); //서버 구축 Port number 12000 Serial.println("initial OK"); } // 아두이노에서 와이파이로 패킷 보내며, 시리얼 통신에 표기하는 함수 String sendData(String command, const int timeout, boolean debug) { // 와이파이 모듈과 아두이노 간의 시리얼 통신을 하기 때문에 다음과 같이 설정함. String response = ""; Serial.print(command); // 명령어-시리얼 모니터에 표기 WIFI_Serial.print(command); // 명령어-와이파이 모듈에 명령 long int time = millis(); while( (time+timeout) > millis()) { // 타임 오버 시간 동안 데이터 받기 while(WIFI_Serial.available()) { // The esp has data so display its output to the serial window char c = WIFI_Serial.read(); // read the next character. response+=c; } } if(debug) { Serial.print(response); // 시리얼 모니터에 출력 } return response; }
esp8266-server-arduino - Web Seber로 이동ESP8266(Web server) - Arduino IDE ESP8266 Module(WiFi)을 이용한 원격 제어(Web server) - Arduino IDE
Web server는 Web clients(예: PC나 휴대폰에서 실행되는 Web browser)로 부터 요청을 받아들이고, HTML 문서와 같은 웹 페이지 또는 데이터를 반환하는 컴퓨터 프로그램 이다. Web server와 Web client 사이 통신에는 HTTP(Hypertext Transfer Protocol)를 사용 한다. 이 Protocol에서는 먼저 Web browser의 Web page가 HTTP를 사용하여 Web server에게 원하는 Web page 또는 자료를 Request 하면 Server 가 응답(Responds: 요구에 맞는 Web page 또는 데이터를 전송) 한다. 만약 Server가 응답 불가능한 Request인 경우에는 Error message(예: 404 Error)를 전송한다. Server로 부터 전송되는 Page는 대부분 HTML(HyperText Markup Language) 문서 이다. ESP8266이 제공하는 가장 큰 기능 중 하나는 기존 WiFi 네트워크에 연결하고 웹 서버로 작동 할 수 있고, 자체 네트워크를 설정하여 다른 장치가 직접 연결하여 웹 서버에 액세스 할 수 있도록하는 것이다. ESP8266의 이런 기능은 ESP8266이 스테이션(Station) 모드, 소프트 액세스 포인트(Soft Access Point) 모드 및 동시에 두 가지 모드로 작동 할 수 있기 때문에 가능하다. WiFi Router에 ESP8266/ESP32 Server를 STA(Station) 모드로 시용하는 예 AP Mode인 경우 ESP8266는 자신의 WiFi network를 구성하고 하나 이상의 Station을 위한 Hub(WiFI router 처럼 동작)로 동작 한다. ESP8266/ESP32 Server를 WiFi AP(Access Point) 모드로 시용하는 예
ESP8266 Web Server를 이용한 원격제어 예를 설명하기 위하여 ESP8266 Web Server에 2개의 LED를 연결한다. ESP8266 Web Server에 2개의 LED를 연결하는 회로 예 이 예에서는 ESP8266WiFi Library를 사용 한다. LED 제어를 위한 Web page 예 이 예에서는 ESP8266WEBServer Library를 사용하여 STA mode Server를 구현 한다. 이 예에서는 ESP8266WEBServer Library를 사용하여 AP mode Server를 구현 한다. 이 예는 ESP8266WEBServer Library를 사용한 STA Mode Server를 이용하여 DC Motor Car(Two Wheel)를 제어하는 프로그램 이다. DC Motor Car 제어 Web page 예 이 예는 ESP8266WEBServer Library를 사용한 AP Mode Server를 이용하여 DC Motor Car(Two Wheel)를 제어하는 프로그램 이다. 이 예는 ESP8266WEBServer Library와 XMLHttpRequest를 이용하여 Web 환경에서 DC Motor Car(Differential gears를 사용한 4 wheel drive car)를 실시간으로 제어하는 프로그램 이다. 주: 과학상자를 이용한 4 wheel drive car(Differential gears를 사용)는 손자의 작품이고 전자회로와 프로그램은 손자의 프로그램 공부를 위하여 함께 만들었음. 과학상자를 이용하여 만든 DC Motor Car(Differential gears를 사용한 4 whell drive car) 차동기어, Steering 제어 구조를 보여주는 아래 쪽 사진 DC Motor Car 제어 Web page 예
|