Arduino IDE를 사용하는 ESP32 웹 서버

Arduino Ideleul Sayonghaneun Esp32 Web Seobeo



ESP32는 GPIO 핀을 사용하여 여러 장치와 연결할 수 있는 마이크로 컨트롤러 보드입니다. Wi-Fi 및 Bluetooth 인터페이스가 내장된 듀얼 코어 프로세서가 있습니다. 이 두 가지 기능 덕분에 ESP32는 IoT 프로젝트 설계에 적합한 보드입니다. ESP32 보드의 주요 기능 중 하나는 기존 액세스 포인트와 연결하는 기능입니다. 그뿐만 아니라 액세스 포인트를 생성하여 다른 장치도 연결할 수 있습니다.

이 ESP32 기사에서는 ESP32 보드를 액세스 포인트와 연결하고 웹 서버를 설계하는 방법을 살펴보겠습니다. 해당 웹 서버를 사용하여 릴레이 모듈의 도움으로 LED 및 AC 기기를 제어합니다.

내용물:

1. ESP32 웹 서버

웹 서버에는 웹 페이지를 처리하고 웹 클라이언트로 보낼 수 있는 특수 프로그램이 있습니다. 웹사이트를 열려면 웹 브라우저를 사용합니다. 이 웹 브라우저는 웹 클라이언트라고도 합니다. 보고 싶은 웹사이트는 웹서버라는 다른 컴퓨터에 저장되어 있습니다.







웹 서버와 웹 클라이언트는 서로 통신하기 위해 HTTP라는 공통 언어를 사용합니다. 작동 방식은 다음과 같습니다. 웹 클라이언트는 HTTP 요청을 사용하여 웹 서버에 웹 페이지를 요청합니다. 웹 서버는 요청된 웹 페이지를 다시 보냅니다. 웹페이지가 없으면 오류 메시지가 표시됩니다.



ESP32에서는 ESP32가 네트워크를 통해 다른 장치와 연결할 수 있을 뿐만 아니라 웹 서버를 생성하고 수신된 요청에 응답할 수 있으므로 웹 서버를 설계할 수 있습니다. ESP32는 세 가지 다른 모드로 작동할 수 있기 때문에 이 모든 것이 가능합니다.



  • 액세스 포인트
  • 스테이션과 액세스 포인트 모두

이 기사를 확인하면 ESP32의 세 가지 모드 모두에 대한 통찰력을 얻을 수 있습니다.





Arduino IDE를 사용하여 ESP32 액세스 포인트(AP)를 설정하는 방법

2. Arduino IDE를 사용하여 ESP32 웹 서버를 만드는 방법

Arduino IDE를 사용하여 ESP32 웹 서버를 생성하려면 ESP32를 액세스 포인트에 연결하고 웹 서버에 대한 IP 주소를 생성할 수 있습니다. HTML과 CSS를 적용하여 서버 인터페이스를 디자인할 수 있습니다.



ESP32 액세스 포인트의 작동을 이해하고 나면 Arduino IDE 코드를 사용하여 ESP32 웹 서버를 쉽게 설계할 수 있습니다. ESP32 웹 서버 코드는 ESP32 Wi-Fi 라이브러리를 사용합니다. 이 라이브러리에는 ESP32를 액세스 포인트에 연결하는 데 필요한 모든 중요한 기능이 포함되어 있으므로 작업이 더 쉬워집니다.

Arduino IDE 코드를 사용하여 ESP32 웹 서버를 설계해 보겠습니다.

3. ESP32 웹 서버 코드

ESP32 웹 서버 코드에는 액세스 포인트와의 ESP32 연결 및 서버의 IP 주소 가져오기가 포함됩니다. IP 주소를 얻은 후에는 ESP32 웹 서버에 액세스하려면 동일한 네트워크에 연결해야 합니다. 여기에서 LED 및 기타 장치를 제어할 수 있습니다.

Arduino IDE를 열고 ESP32 보드를 연결합니다.

Arduino IDE에 ESP32 보드 설치

ESP32 보드가 연결되면 다음 코드를 보드에 업로드하세요.

/****************

Linuxhint.com
LED를 제어하는 ​​ESP32 웹 서버

**************/
// 라이브러리 가져오기 ~을 위한 Wi-Fi 연결
#include
// Wi-Fi 이름과 비밀번호를 입력하세요.
const 문자 * ssid = 'ESP32' ;
const 문자 * 비밀번호 = '123456789' ;
// 포트 번호를 선택하세요 ~을 위한 웹 서버
WiFi서버 서버 ( 80 ) ;
// 웹 요청을 저장할 변수 만들기
문자열 헤더;
// 출력 상태를 저장하는 변수 만들기
문자열 출력26상태 = '끄다' ;
문자열 출력27상태 = '끄다' ;
// 변수에 출력 핀 할당
const int 출력26 = 26 ;
const int 출력27 = 27 ;
부호 없는 긴 currentTime = 밀리초 ( ) ;
부호 없는 긴 이전 시간 = 0 ;
// 다음을 선택하세요. 시간 한계 ~을 위한 웹 요청 ~에 밀리초
const 긴 timeoutTime = 2000 ;
보이드 설정 ( ) {
직렬.시작 ( 115200 ) ;
// 출력 핀 설정 ~처럼 출력
  pinMode ( 출력26, 출력 ) ;
  pinMode ( 출력27, 출력 ) ;
// 출력 끄기
디지털 쓰기 ( 출력26, 낮음 ) ;
디지털 쓰기 ( 출력27, 낮음 ) ;
// Wi-Fi 네트워크에 연결
직렬.인쇄 ( '연결 중' ) ;
Serial.println ( SSID ) ;
WiFi.시작 ( ssid, 비밀번호 ) ;
// 기다리다 ~까지 연결이 설정되었습니다
~하는 동안 ( WiFi.상태 ( ) ! = WL_연결됨 ) {
지연 ( 500 ) ;
직렬.인쇄 ( '.' ) ;
}
Serial.println ( '' ) ;
Serial.println ( '와이파이가 연결되었습니다.' ) ;
Serial.println ( 'IP 주소: ' ) ;
Serial.println ( WiFi.localIP ( ) ) ;
서버.시작 ( ) ;
}

무효 루프 ( ) {
WiFiClient 클라이언트 = server.available ( ) ; // 확인하다 ~을 위한 신규 고객
만약에 ( 고객 ) { // 클라이언트가 연결되어 있는 경우,
현재시간 = 밀리초 ( ) ;
이전시간 = 현재시간;
Serial.println ( '새 클라이언트.' ) ; // 직렬 포트에 알림
문자열 currentLine = '' ; // 클라이언트 데이터를 저장할 문자열 만들기
~하는 동안 ( 클라이언트.연결됨 ( ) && 현재시간 - 이전시간 = 0 ) {
Serial.println ( 'GPIO 26 켜짐' ) ;
출력26상태 = '에' ;
디지털 쓰기 ( 출력26, 높음 ) ;
} 또 다른 만약에 ( header.indexOf ( 'GET /26/오프' ) > = 0 ) {
Serial.println ( 'GPIO 26 꺼짐' ) ;
출력26상태 = '끄다' ;
디지털 쓰기 ( 출력26, 낮음 ) ;
} 또 다른 만약에 ( header.indexOf ( 'GET /27/on' ) > = 0 ) {
Serial.println ( 'GPIO 27 켜짐' ) ;
출력27상태 = '에' ;
디지털 쓰기 ( 출력27, 높음 ) ;
} 또 다른 만약에 ( header.indexOf ( 'GET /27/오프' ) > = 0 ) {
Serial.println ( 'GPIO 27 꺼짐' ) ;
출력27상태 = '끄다' ;
디지털 쓰기 ( 출력27, 낮음 ) ;
}

클라이언트.println ( '' ) ;
클라이언트.println ( '<헤드><메타 이름=' 뷰포트 ' 내용=' 너비 =장치 너비, 초기 규모= 1 '>' ) ;
클라이언트.println ( '<링크 상대=' ' href=' 데이터:, '>' ) ;
// 버튼 스타일을 지정하는 CSS
클라이언트.println ( '<스타일>html { 글꼴 계열: Helvetica; 디스플레이: 인라인 블록; 여백: 0px 자동; 텍스트 정렬: 센터;}' ) ;
클라이언트.println ( 'body { 배경: 선형 그라데이션(오른쪽으로, #0f0c29, #302b63, #24243e); }' ) ;
// 네온 효과가 있는 네온 블루 버튼
클라이언트.println ( '.button { 배경색: #08f; 테두리: 없음; 색상: 흰색; 패딩: 16px 40px;' ) ;
클라이언트.println ( '텍스트 장식: 없음; 글꼴 크기: 30px; 여백: 2px; 커서: 포인터; 상자 그림자: 0 0 20px #08f;}' ) ;
// 글로우 효과가 있는 어두운 회색 버튼
클라이언트.println ( '.button2 {배경색: #333; 상자 그림자: 0 0 20px #333;}' ) ;
// 전환 효과 ~을 위한 버튼
클라이언트.println ( '.button, .button2 {전환: 모든 0.3초 Ease-in-out;}' ) ;
// 둥근 버튼
클라이언트.println ( '.button, .button2 {테두리 반경: 50%;}' ) ;
// 웹페이지 제목
클라이언트.println ( '<본체>

Linuxhint ESP32 웹 서버

'
) ;
// 웹페이지 제목
클라이언트.println ( '

ESP32 웹 서버

');

// 상태와 버튼 표시 ~을 위한 GPIO 26
클라이언트.println ( '

GPIO 26 - 상태 ' + 출력26상태 + '

'
) ;
// ON 버튼 표시 만약에 상태는 꺼짐
만약에 ( 출력26상태 == '끄다' ) {
클라이언트.println ( '

<버튼 클래스=' 단추 '>켜기

'
) ;
} 또 다른 { // OFF 버튼 표시 만약에 상태는 ON이다
클라이언트.println ( '

<버튼 클래스=' 버튼 버튼2 '>끄기

'
) ;
}
// 상태와 버튼 표시 ~을 위한 GPIO 27
클라이언트.println ( '

GPIO 27 - 상태 ' + 출력27상태 + '

'
) ;
// ON 버튼 표시 만약에 상태는 꺼짐
만약에 ( 출력27상태 == '끄다' ) {
클라이언트.println ( '

<버튼 클래스=' 단추 '>켜기

'
) ;
} 또 다른 { // OFF 버튼 표시 만약에 상태는 ON이다
클라이언트.println ( '

<버튼 클래스=' 버튼 버튼2 '>끄기

'
) ;
}
클라이언트.println ( '' ) ;
// 빈 줄로 HTTP 응답 종료
클라이언트.println ( ) ;
// 종료 ~하는 동안 고리
부서지다 ;
} 또 다른 { // 현재 줄 지우기 만약에 그것 개행 문자야
currentLine = '';
}
} else if (c != '
\아르 자형 ') { // 현재 줄에 바이트를 추가합니다.' 마차가 아니야 반품
currentLine += c;
}
}
}
// 헤더 재설정
헤더 = '' ;
// 클라이언트 연결을 닫습니다.
클라이언트.중지 ( ) ;
Serial.println ( '클라이언트 연결이 끊어졌습니다.' ) ;
Serial.println ( '' ) ;
}
}

코드 설명

ESP32 웹 서버 코드는 Wi-Fi 연결을 설정하여 시작되었습니다. 첫째, WiFi.h 라이브러리가 포함되어 있습니다. 다음으로, 이 코드에서는 ESP32 보드를 연결하려는 네트워크의 SSID와 비밀번호를 입력해야 합니다. 그 후 출력 상태를 저장하기 위한 변수를 생성하고 이 변수에 출력 핀을 할당했습니다. 여기서는 GPIO 핀 26과 27을 사용하고 있지만 장치나 LED를 연결하기 위해 다른 GPIO 핀을 사용할 수도 있습니다.

코드의 두 번째 부분에서는 직렬 통신이 시작됩니다. 이는 ESP32 보드 및 이에 연결된 주변 장치의 상태를 확인하는 데 도움이 됩니다. 이와 함께 연결된 두 LED의 다양한 상태에 대한 직렬 출력을 정의했습니다. LED 조명을 연결하고 상태를 ON 및 OFF로 정의할 수 있습니다. 이 코드 부분은 코드를 업로드한 후 ESP32 웹 서버의 IP 주소도 인쇄합니다. IP 주소를 포함한 코드 부분은 Setup() 함수 내에 있으므로 한 번만 인쇄됩니다.

세 번째 부분 또는 Loop() 함수 내부에서는 웹 요청을 처리하고 GPIO 핀을 제어하기 위한 코드를 정의했습니다. 이 코드 부분은 loop() 함수에서와 마찬가지로 반복적으로 실행됩니다. 새 클라이언트를 확인하고 클라이언트에서 데이터를 읽습니다. 읽은 후 HTTP 요청을 구문 분석하고 LED를 켜거나 끄는 등 적절한 응답을 보냅니다. 이 코드 부분에는 ESP32 웹 서버의 기본 스타일에 대한 정보도 포함되어 있습니다. 인터페이스에는 LED 버튼과 현재 상태가 포함됩니다.

4. ESP32 웹 서버 IP 주소

ESP32 웹 서버 IP 주소는 네트워크에 있는 장치의 고유 식별자입니다. ESP32 웹 서버에 액세스하려면 이 IP 주소가 필요합니다. 위 코드를 업로드하면 IP 주소가 동적 IP라고도 하는 라우터에 의해 자동으로 할당됩니다. 그러나 고정 IP라고도 하는 IP 주소를 수동으로 할당할 수도 있습니다.

ESP32 서버의 IP 주소를 확인하려면 코드를 업로드한 후 Arduino IDE의 직렬 모니터를 확인하세요. 이 IP 주소는 ESP32 보드가 액세스 포인트에 성공적으로 연결된 경우에만 표시된다는 점을 기억하세요.

메모 : ESP32 보드를 액세스 포인트에 연결하기 어려운 경우, 라우터(액세스 포인트) SSID를 변경해 보세요. SSID에 특수문자를 사용하지 마세요.

5. ESP32 웹 서버를 사용하여 LED 제어

이제 ESP32 보드로 두 개의 LED를 설정하고 ESP32 웹 서버를 사용하여 제어해 보겠습니다. 코드 내부에 정의된 동일한 GPIO 핀을 사용하거나 다른 GPIO 핀에 대한 코드를 수정할 수 있습니다. 여기서는 LED 하나를 GPIO 26에 연결하고 다른 하나를 GPIO 27에 연결하겠습니다.

데스크탑 인터페이스

하드웨어가 준비되면 다음 단계는 Arduino IDE 터미널의 ESP32에서 제공한 것과 동일한 IP 주소를 사용하여 웹 서버에 액세스하는 것입니다. 이를 위해서는 시스템이 동일한 네트워크에 연결되어 있어야 합니다. 데스크탑에서 WiFi 설정을 열고 네트워크에 연결하세요.

접속이 완료되면 웹브라우저(Chrome)를 이용하여 웹서버에 접속할 수 있습니다. URL 표시줄에 ESP32 웹 서버 IP를 입력하고 누르세요. 입력하다 . 열면 다음 인터페이스가 표시됩니다.

코드 내부에 설정된 현재 상태에서는 두 LED가 모두 꺼져 있습니다. 따라서 ESP32를 PC에 연결한 후에는 LED가 켜지지 않는 것을 볼 수 있습니다.

GPIO 26에서 LED를 켜는 것부터 시작하겠습니다. OFF 스위치를 전환하면 LED가 빛나는 것을 볼 수 있습니다.

GPIO 26의 LED가 켜져 있습니다.

마찬가지로 GPIO 27의 LED에 대해 두 번째 버튼을 전환합니다.

이제 GPIO 27에 연결된 두 번째 LED도 켜지는 것을 볼 수 있습니다.

버튼을 전환하여 두 LED를 모두 켤 수도 있습니다.

두 LED를 모두 전환하면 두 LED가 모두 빛나는 것을 볼 수 있습니다.

모바일 인터페이스

ESP32 웹 서버는 데스크톱 브라우저에만 국한되지 않고 스마트폰이나 태블릿과 같은 다른 장치에서도 액세스할 수 있습니다. ESP32 웹 서버에 연결하려면 WiFi 네트워크 설정을 열고 코드 내에 정의한 것과 동일한 SSID를 검색하세요.

액세스 포인트를 검색한 후 스마트폰을 해당 액세스 포인트에 연결하세요.

연결되면 스마트폰에서 브라우저를 열고 ESP32 IP 주소를 사용하여 웹 서버에 접속하세요. 스마트폰의 인터페이스는 데스크톱과 유사합니다. 데스크톱 브라우저에서와 마찬가지로 GPIO 핀을 완벽하게 제어할 수 있습니다.

6. ESP32 웹 서버를 사용하여 AC 기기 제어

지금은 간단한 LED를 ESP32와 연결하고 ESP32 웹 서버를 사용하여 제어했습니다. 하지만 이는 ESP32 웹 서버를 위한 단순한 프로그램일 뿐입니다. 동일한 개념을 센서나 모듈에 적용하여 원하는 출력을 생성할 수 있습니다.

예를 들어, 릴레이 모듈을 ESP32와 연결하고 위에 제공된 동일한 웹 서버 코드를 사용하여 모든 AC 기기를 제어할 수 있습니다.

읽다 : Arduino IDE를 사용하여 ESP32로 릴레이

이제 릴레이 모듈을 사용하여 AC 전구를 ESP32와 연결하겠습니다. 여기서는 AC 전구를 제어하기 위해 GPIO 핀 26을 사용하겠습니다. 원하는 GPIO 핀을 정의하여 릴레이를 제어할 수 있습니다.

ESP32 핀 릴레이 모듈 핀
빈/3V3 Vcc
접지 접지
GPIO 26 또는 GPIO 27 IN1 또는 IN2

아래는 릴레이 모듈과 AC 전구가 포함된 ESP32의 개략도입니다.

릴레이 모듈을 연결한 후 ESP32 웹 서버를 열고 GPIO 26 스위치를 전환합니다.

전구가 켜지는 것을 볼 수 있습니다.

우리는 ESP32 웹 서버를 성공적으로 생성했으며 이를 통해 AC 및 DC 장치를 모두 제어했습니다. 다른 센서에 동일한 코드를 적용하고 프로젝트에 대한 사용자 정의 웹 서버를 만들 수 있습니다.

결론

ESP32는 액세스 포인트에 연결하거나 다른 장치의 액세스 포인트 역할을 할 수 있는 마이크로컨트롤러 보드입니다. ESP32의 이 기능을 사용하면 ESP32 웹 서버를 설계할 수 있습니다. ESP32 보드를 액세스 포인트에 연결하고 웹 서버의 IP 주소를 가져오기만 하면 됩니다. 그 후에는 어느 웹 브라우저에나 동일한 IP를 입력해야 웹 서버에 즉시 액세스할 수 있습니다. 하지만 ESP32 웹 서버에 접속하는 동안 동일한 네트워크에 연결되어 있는지 확인하세요. 또한, 주어진 코드를 수정하고 원하는 센서나 모듈을 제어할 수 있습니다.