이 블로그는 Web 환경을 이용한 원격 제어 기술에 필요한 지식을 공유 하기 위한 블로그 입니다.
실제 개발과 프로그램 예를 위하여 WiFi Module과 Raspberry Pi, Raspberry Pi Pico, ATmega128 보드, Arduino Mega 보드(ATmega2560)를 사용 합니다.

esp8266-server-arduino - Web Seber로 이동

ESP8266(Web server) - Arduino IDE
ESP8266 Module(WiFi)을 이용한 원격 제어(Web server) - 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) 모드로 시용하는 예

      • 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) 모드로 시용하는 예

      • 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를 연결하는 회로 예

    • 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 예

      • 실험 방법
        • 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 예

      • 시스템 구성과 설정
        • 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) 프로그램 예:
      • 실험 방법
        • 실험 방법은 위 "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) 프로그램 예:
      • 실험 방법
        • 실험 방법은 위 "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)

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

        DC Motor Car 제어 Web page 예

      • ESP8266WEBServer Library와 XMLHttpRequest를 이용한 DC Motor Car 프로그램 예:
      • 실험 방법
        • 실험 방법은 위 "ESP8266WiFi Library를 이용한 프로그램(STA mode) 예"와 유사하기 때문에 생략 한다.

  • ESP8266 Module(WiFi)을 이용한 원격 제어(Web server) - 관련 페이지 보기