아두이노 와이파이 원격 제어 - adu-ino waipai wongyeog jeeo

//##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

  • ESP8266 Server 동작 모드
    • Web server 개요
    • Station (STA) Mode
    • AP(Soft Access Point) Mode
  • ESP8266 Web Server를 이용한 원격제어
    • ESP8266 Web Server 예를 위한 회로 구성
    • ESP8266 Web Server를 이용한 원격제어 시스템(IoT(Internet of things))의 동작 흐름
    • ESP8266WiFi Library를 이용한 프로그램(STA mode) 예
    • ESP8266WEBServer Library를 이용한 프로그램(STA mode) 예
    • ESP8266WEBServer Library를 이용한 프로그램(AP mode) 예
    • ESP8266WEBServer Library를 이용한 DC Motor Car(Two Wheel) 예
    • ESP8266WEBServer Library와 XMLHttpRequest를 이용한 DC Motor Car 예
  • ESP8266 Module(WiFi)을 이용한 원격 제어(Web server) - 관련 페이지 보기
    • ESP8266 Module의 이해와 개발 환경
    • ESP8266 Module(WiFi)을 이용한 원격 제어(Telnet 환경) - Arduino IDE


  • ESP8266 Server 동작 모드
    • Web server 개요
      • 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) 문서 이다.

    • Station (STA) Mode
      • ESP8266이 제공하는 가장 큰 기능 중 하나는 기존 WiFi 네트워크에 연결하고 웹 서버로 작동 할 수 있고, 자체 네트워크를 설정하여 다른 장치가 직접 연결하여 웹 서버에 액세스 할 수 있도록하는 것이다.

        ESP8266의 이런 기능은 ESP8266이 스테이션(Station) 모드, 소프트 액세스 포인트(Soft Access Point) 모드 및 동시에 두 가지 모드로 작동 할 수 있기 때문에 가능하다.

      • 기존 WiFi 네트워크(Wireless router network)에 ESP8266을 Server로 연결하는 경우 Station(STA) 이라고 한다.
      • WiFi Router에 ESP8266/ESP32 Server를 STA(Station) 모드로 시용하는 예

      아두이노 와이파이 원격 제어 - adu-ino waipai wongyeog jeeo

      • STA 모드에서 ESP8266은 연결된 무선(WiFi) 라우터에서 IP를 부여 받는다.
      • 기존 WiFi 네트워크에 연결된 모든 장치는 이 IP를 이용하여 ESP8266 Server에 접속하고, 웹 페이지 또는 데이터를 전달 받을 수 있다.

    • AP(Soft Access Point) Mode
    • AP Mode인 경우 ESP8266는 자신의 WiFi network를 구성하고 하나 이상의 Station을 위한 Hub(WiFI router 처럼 동작)로 동작 한다.

      ESP8266/ESP32 Server를 WiFi AP(Access Point) 모드로 시용하는 예

      아두이노 와이파이 원격 제어 - adu-ino waipai wongyeog jeeo

      • AP Mode로 동작하는 ESP8266 Server는 WiFi router와 다르게 Wired network를 갖지 않기 때문에 Soft-AP(Soft Access Point)라고 한다.
      • 또한 최대 연결 가능한 Station 수가 5개로 제한된다.
      • AP mode로 WiFi network을 구성할 때는 SSID(Name of the network)와 IP address를 설정하여야 한다.
      • 이 IP address를 이용하여 자신의 Network에 연결된 모든 장치(Devices)에게 Web page를 전송한다.

  • ESP8266 Web Server를 이용한 원격제어
    • ESP8266 Web Server 예를 위한 회로 구성
      • ESP8266 Web Server를 이용한 원격제어 예를 설명하기 위하여 ESP8266 Web Server에 2개의 LED를 연결한다.

        ESP8266 Web Server에 2개의 LED를 연결하는 회로 예

        아두이노 와이파이 원격 제어 - adu-ino waipai wongyeog jeeo

    • ESP8266 Web Server를 이용한 원격제어 시스템(IoT(Internet of things))의 동작 흐름
      • 웹 브라우저에 URL을 입력하고 Enter 키를 누르면 Browser가 HTTP Request(예 : GET Request)을 웹 서버로 전송한다.
      • Web Server는 이 요청을 아래와 같이 처리한다.
        • 예를 들어 Web browser에 http://192.168.1.1/LEDon과 같은 URL을 입력하는 경우, Web browser는이 요청을 처리하기 위한 HTTP Request를 ESP8266 Server로 전송한다.
        • ESP8266 Server는 이 Request를 읽을 때 사용자가 LED를 켜고 싶어한다는 것을 알고, Request에 대응하여 LED를 켜고 LED 상태를 보여주는 Web page를 작성(Dynamic webpage)하여 Browser로 전송한다.
    • ESP8266WiFi Library를 이용한 프로그램(STA mode) 예
      • 이 예에서는 ESP8266WiFi Library를 사용 한다.

      • 시스템 구성과 설정
        • STA Mode 예이기 때문에 자신이 사용하는 WiFI Router 가 있어야 한다. WiFI Router 가 없는 경우에는 아래 AP Mode를 참고 바람.
        • 외부(WiFI Router 외부)에서 접속하고자 하는 경우에는 자신의 WiFI Router에서 포트포워드 설정(ip-TIME 과 같이 공유기를 제공하는 회사 자료에서 공유기 포트포워드 설정을 참고 바람)을 하여야 한다.
        • 자신이 사용하는 WiFI Router의 SSID(Service Set IDentifier)와 PASSWORD를 프로그램에 설정한다.
        • USB-UART0: TxD0를 Logger로 사용한다.
        • LED: NodeMCU 보드인 경우에는 GPIO5, GPIO4를 LED 제어 Port로 사용하고, ESP-01 모듈인 경우에는 GPIO2, GPIO3를 LED 제어 Port로 사용한다.
      • ESP8266WiFi Library를 이용한 LED 제어 프로그램 예: "cho-ESP8266WiFi-server-led-button-1.ino"
      • LED 제어를 위한 Web page 예

        아두이노 와이파이 원격 제어 - adu-ino waipai wongyeog jeeo

      • 실험 방법
        • Arduino IDE를 실행하고 "파일 -> 새 파일"을 클릭한다.
        • 윗 cho-ESP8266WiFi-server-led-button-1.ino 프로그램을 프로그램 편집 창에 복사한다.
        • "툴 -> 보드: "보오드 이름" 에서 "NodeMCU 1.0(ESP-12E Module)" 보드를 선택(ESP-01 모듈인 경우에는 "Generic ESP8266 Module") 한다.
        • "툴 -> 포트: "에서 COM Port(제어판에서 Port 번호를 확인)를 선택 한다.
        • "스케치 -> 확인/컴파일"을 클릭하여 프로그램이 정상으로 컴파일되는지 확인한다.
        • "업 로드"를 실행 한다. 컴파일이 완료되고 Arduino IDE와 개발 보드 사이에 연결이 시작되면 FLSH Switch를 먼저 누른 상태에서 RST Switch를 클릭(NodeMCU 보드인 경우에는 Switch를 누르지 않아도 자동으로 진행 됨) 한다.
        • Upload 가 완료되면 터미널 프로그램을 실행하고 USB-UART0에 연결(COM Port 번호와 Baud rate: 19200를 설정하여야 함) 한다.
        • Reset Switch(RST)를 클릭하면(NodeMCU 보드인 경우에는 터미널 프로그램을 실행하면 자동으로 시작 됨) 프로그램이 시작되고 터미널에 실행 메세지가 출력된다.
        • 터미널에 메세지에서 IP Address(예: 192.168.0.21)를 확인한다. 자신의 WiFI Router(공유기)에 관리자로 접속하여 "고급설정 -> 네트워크 관리 -> 내부 네트워크 설정"에서 사용중인 IP 주소 정보 창에서 확인 하여도 된다.
        • PC(또는 휴대폰)에서 위에서 확인한 IP Address를 사용하여 Web browser로 연결한다.
        • Web browser 에서 명령 버튼을 누르면 해당 명령에 따른 동작이 실행된다.
    • ESP8266WEBServer Library를 이용한 프로그램(STA mode) 예
      • 이 예에서는 ESP8266WEBServer Library를 사용하여 STA mode Server를 구현 한다.

      • 시스템 구성과 설정
        • STA Mode 예이기 때문에 자신이 사용하는 WiFI Router 가 있어야 한다. WiFI Router 가 없는 경우에는 아래 AP Mode를 참고 바람.
        • 외부(WiFI Router 외부)에서 접속하고자 하는 경우에는 자신의 WiFI Router에서 포트포워드 설정(ip-TIME 과 같이 공유기를 제공하는 회사 자료에서 공유기 포트포워드 설정을 참고 바람)을 하여야 한다.
        • 자신이 사용하는 WiFI Router의 SSID와 PASSWORD를 프로그램에 설정한다.
        • USB-UART0: TxD0를 Logger로 사용한다.
        • LED: NodeMCU 보드인 경우에는 GPIO5, GPIO4를 LED 제어 Port로 사용하고, ESP-01 모듈인 경우에는 GPIO2, GPIO3를 LED 제어 Port로 사용한다.
      • ESP8266WEBServer Library를 이용(STA Mode)한 LED 제어 프로그램 예: "cho-ESP8266WEBServer-STA-mode-1.ino"
      • 실험 방법
        • 실험 방법은 위 "ESP8266WiFi Library를 이용한 프로그램(STA mode) 예"와 유사하기 때문에 생략 한다.
    • ESP8266WEBServer Library를 이용한 프로그램(AP mode) 예
      • 이 예에서는 ESP8266WEBServer Library를 사용하여 AP mode Server를 구현 한다.

      • 시스템 구성과 설정
        • AP Mode 예이기 때문에 자신이 사용하는 WiFI Router 가 없어도 ESP8266으로 구성한 Soft-AP를 이용 할 수 있다.
        • 외부(WiFI Router 외부)에서 접속하고자 하는 경우에는 자신의 WiFI Router에서 포트포워드 설정(ip-TIME 과 같이 공유기를 제공하는 회사 자료에서 공유기 포트포워드 설정을 참고 바람)을 하여야 한다.
        • ESP8266을 Soft-AP로 사용하기 때문에 Soft-AP의 IP Address, Gateway, Subnet mask를 프로그램에 설정한다.
        • USB-UART0: TxD0를 Logger로 사용한다.
        • LED: NodeMCU 보드인 경우에는 GPIO5, GPIO4를 LED 제어 Port로 사용하고, ESP-01 모듈인 경우에는 GPIO2, GPIO3를 LED 제어 Port로 사용한다.
      • ESP8266WEBServer Library를 이용(AP Mode)한 LED 제어 프로그램 예: "cho-ESP8266WEBServer-AP-mode-1.ino"
      • 실험 방법
        • 실험 방법은 위 "ESP8266WiFi Library를 이용한 프로그램(STA mode) 예"와 유사하기 때문에 생략 한다.
    • ESP8266WEBServer Library(STA mode)를 이용한 DC Motor Car(Two Wheel) 예
      • 이 예는 ESP8266WEBServer Library를 사용한 STA Mode Server를 이용하여 DC Motor Car(Two Wheel)를 제어하는 프로그램 이다.

        DC Motor Car 제어 Web page 예

        아두이노 와이파이 원격 제어 - adu-ino waipai wongyeog jeeo

      • 시스템 구성과 설정
        • STA Mode 예이기 때문에 자신이 사용하는 WiFI Router 가 있어야 한다. WiFI Router 가 없는 경우에는 아래 AP Mode를 참고 바람.
        • 외부(WiFI Router 외부)에서 접속하고자 하는 경우에는 자신의 WiFI Router에서 포트포워드 설정(ip-TIME 과 같이 공유기를 제공하는 회사 자료에서 공유기 포트포워드 설정을 참고 바람)을 하여야 한다.
        • 자신이 사용하는 WiFI Router의 SSID와 PASSWORD를 프로그램에 설정한다.
        • USB-UART1: TxD1를 Logger로 사용한다.
      • ESP8266WEBServer Library(STA mode)를 이용한 DC Motor Car(Two Wheel) 프로그램 예:
        • Aduino 프로그램 예: "cho_EspWEb_car_two_wheel_control_STA_mode.ino"
        • DC Motor Car 제어를 위한 ATmega128 프로그램(Atmel Studio 7.0 사용) 예: "cho_WiFi_car_two_wheel_control.zip"
      • 실험 방법
        • 실험 방법은 위 "ESP8266WiFi Library를 이용한 프로그램(STA mode) 예"와 유사하기 때문에 생략 한다.
    • ESP8266WEBServer Library(AP mode)를 이용한 DC Motor Car(Two Wheel) 예
      • 이 예는 ESP8266WEBServer Library를 사용한 AP Mode Server를 이용하여 DC Motor Car(Two Wheel)를 제어하는 프로그램 이다.

      • 시스템 구성과 설정
        • AP Mode 예이기 때문에 자신이 사용하는 WiFI Router 가 없어도 ESP8266으로 구성한 Soft-AP를 이용 할 수 있다.
        • 외부(WiFI Router 외부)에서 접속하고자 하는 경우에는 자신의 WiFI Router에서 포트포워드 설정(ip-TIME 과 같이 공유기를 제공하는 회사 자료에서 공유기 포트포워드 설정을 참고 바람)을 하여야 한다.
        • ESP8266을 Soft-AP로 사용하기 때문에 Soft-AP의 IP Address, Gateway, Subnet mask를 프로그램에 설정한다.
        • ESP8266의 UART0는 DC Motor Car를 제어하는 ATmega128과 Serial 통신에 사용한다.
        • USB-UART1: TxD1를 Logger로 사용한다.
      • ESP8266WEBServer Library(AP mode)를 이용한 DC Motor Car(Two Wheel) 프로그램 예:
        • Aduino 프로그램 예: 프로그램 예: "cho_EspWEb_car_two_wheel_control_AP_mode_ino.ino"
        • DC Motor Car 제어를 위한 ATmega128 프로그램(Atmel Studio 7.0 사용) 예: "cho_WiFi_car_two_wheel_control.zip"
      • 실험 방법
        • 실험 방법은 위 "ESP8266WiFi Library를 이용한 프로그램(STA mode) 예"와 유사하기 때문에 생략 한다.
    • ESP8266WEBServer Library와 XMLHttpRequest를 이용한 DC Motor Car 예
      • 이 예는 ESP8266WEBServer Library와 XMLHttpRequest를 이용하여 Web 환경에서 DC Motor Car(Differential gears를 사용한 4 wheel drive car)를 실시간으로 제어하는 프로그램 이다.

        주: 과학상자를 이용한 4 wheel drive car(Differential gears를 사용)는 손자의 작품이고 전자회로와 프로그램은 손자의 프로그램 공부를 위하여 함께 만들었음.

      • 시스템 구성과 설정
        • 속도 측정, Steering Position 측정에는 Hall sensor를 사용하고 장애물 거리측정에는 초음파 센서를 사용하였다.
        • 인터넷 환경에서 DC Motor Car의 속도, Steering Position, 장애물까지의 거리를 실시간으로 휴대폰에 표시하도록 하기 위하여 ESP8266 Web Server와 Web page 전체를 Reloading 하지 않고 Web page를 Update 할 수 있게 XMLHttpRequest 기술을 사용하였다.
        • STA Mode 이기 때문에 자신이 사용하는 WiFI Router 가 있어야 한다. WiFI Router 가 없는 경우에는 AP Mode를 참고 바람.
        • 외부(WiFI Router 외부)에서 접속하고자 하는 경우에는 자신의 WiFI Router에서 포트포워드 설정(ip-TIME 과 같이 공유기를 제공하는 회사 자료에서 공유기 포트포워드 설정을 참고 바람)을 하여야 한다.
        • DC Motor Car의 제어에는 ATmega128를 사용하였다. DC Motor 제어에는 PWM 기술을 사용하고, Timer를 이용한 Pulse width 측정, External interrupt과 Timer를 이용한 Pulse width 측정 등의 기술을 사용하였다.
        • ESP8266의 모듈과 ATmega128 사이의 통신은 Serial 통신을 사용한다.
        • 구체적인 프로그램에 대한 설명은 프로그램 내에 자세히 설명하였으니 참고 바람.

        과학상자를 이용하여 만든 DC Motor Car(Differential gears를 사용한 4 whell drive car)

        아두이노 와이파이 원격 제어 - adu-ino waipai wongyeog jeeo

        차동기어, Steering 제어 구조를 보여주는 아래 쪽 사진

        아두이노 와이파이 원격 제어 - adu-ino waipai wongyeog jeeo

        DC Motor Car 제어 Web page 예

        아두이노 와이파이 원격 제어 - adu-ino waipai wongyeog jeeo

      • ESP8266WEBServer Library와 XMLHttpRequest를 이용한 DC Motor Car 프로그램 예:
        • Aduino 프로그램 예: 프로그램 예: "cho_sol_EspWebAJAX_car_speed_sonic_dir_STA.ino"
        • DC Motor Car 제어를 위한 ATmega128 c 프로그램(Atmel Studio 7.0 사용) 예: "cho_sol_WiFi_car_speed-dis.zip"
        • DC Motor Car 제어를 위한 ATmega128 cpp 프로그램(Atmel Studio 7.0 사용) 예: "cho-sol-WiFi-car-speed-dis-cpp.zip"
      • 실험 방법
        • 실험 방법은 위 "ESP8266WiFi Library를 이용한 프로그램(STA mode) 예"와 유사하기 때문에 생략 한다.

  • ESP8266 Module(WiFi)을 이용한 원격 제어(Web server) - 관련 페이지 보기
    • ESP8266 Module의 이해와 개발 환경
    • ESP8266 Module(WiFi)을 이용한 원격 제어(Telnet 환경) - Arduino IDE