
ESP32는 AP(access point) 기능이 있고 스마트 폰, 노트북 등이 ESP32에 접속하여 기기를 제어 할 수 있다. 기존에 제작했던 프로젝트에서 ESP32의 AP 기능을 이용해서 핸드폰으로 원격지의 보드에 접속해서 간단한 설정이나 제어를 해야 하는 상황이 되었다.
ESP32C6의 AP 모드를 테스트 해 보자.
ESP32C6의 AP모드를 설정하고 AP가 검색되는 간단한 예제를 구동해 보자.
#include <WiFi.h>
#include <WebServer.h>
const char *ssid = "ESP32-AP";
const char *password = "123456789";
#define LED_PIN 14
#define Led1On() digitalWrite(LED_PIN, 0)
#define Led1Off() digitalWrite(LED_PIN, 1)
#define SW_PIN 1
WebServer server(80); // Object of WebServer(HTTP port, 80 is defult)
void InitWiFi(void)
{
WiFi.mode(WIFI_AP); // Only Access point (AP mode)
IPAddress myIP = WiFi.softAP(ssid, password);
Serial.print("AP SSID: ");
Serial.println(ssid);
Serial.println("HTTP server started");
Serial.print("HotSpt IP:");
Serial.println(myIP);
}
void InitWebServer()
{
server.begin();
}
void setup() {
pinMode(LED_PIN, OUTPUT);
Led1On();
pinMode(SW_PIN, INPUT_PULLUP);
Serial.begin(115200);
Serial.println("ESP32 Simple web Start");
Serial.println(ssid);
InitWiFi();
InitWebServer();
Serial.println("HTTP server started");
delay(100);
}
void loop() {
server.handleClient();
}
프로그램 실행후 WiFi 검색을 하면 설정한 ESP32-AP가 검색 되는 것을 확인 할 수 있다.

네트웍 연결후 원격 제어를 위해 가장 간단한 방법으로 웹서버를 구현해서 제어 하면 특별한 프로그램 개발 필요 없이 간단히 설정 및 제어를 할수 있다.
테스트를 위해 간단히 LED를 제어 하는 웹페이지를 작성하고 원격지에서 제어 할 수 있는 코드를 작성해 보자.
#include <WiFi.h>
#include <WebServer.h>
const char *ssid = "ESP32-AP";
const char *password = "123456789";
#define LED_PIN 14
#define Led1On() digitalWrite(LED_PIN, 0)
#define Led1Off() digitalWrite(LED_PIN, 1)
#define SW_PIN 1
WebServer server(80); // Object of WebServer(HTTP port, 80 is defult)
void handle_root();
int motor_step = 0;
// HTML 페이지
#if 1
const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE html> <html>
<head><meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
<title>LED Control</title>
<style>
body{
background:#2c3e50;
font-family: 'Open Sans', sans-serif;
}
h1, button{
color:#fff;
text-align: center;
padding: 20px;
}
p{
color:#fff;
text-align: center;
padding-top: 500px;
font-size: 10px;
}
a{
text-decoration:none;
color:#fff;
}
.main{
text-align: center;
width: 100%;
margin-bottom:20px;
}
.button-1{
text-align: center;
cursor: pointer;
font-size:24px;
}
.button-1 {
border-radius: 10px;
//background-color:#d32000;
background-color: #27ae60;
border: none;
padding: 20px;
width: 300px;
box-shadow: 0 2px #FFFFFF;
}
</style>
</head>
<body>
<h1>Simple Webserber</h1>
<div class="main">
<a href="on"><button class="button-1"><span>LED On</span></button></a>
</div>
<div class="main">
<a href="off"><button class="button-1"><span>LED Off</span></button></a>
</div>
</body>
)rawliteral";
#endif
//페이지 요청이 들어 오면 처리 하는 함수
void handle_root()
{
server.send(200, "text/html", index_html);
}
//On 버튼 페이지 처리함수
void SetLedStatusOn()
{
Serial.println("On");
Led1On();
server.send(200, "text/html", index_html);
}
//Off 버튼 페이지 처리함수
void SetLedStatusOff()
{
Serial.println("Off");
Led1Off();
server.send(200, "text/html", index_html);
}
void InitWiFi(void)
{
WiFi.mode(WIFI_AP); // Only Access point (AP mode)
IPAddress myIP = WiFi.softAP(ssid, password);
Serial.print("AP SSID: ");
Serial.println(ssid);
Serial.println("HTTP server started");
Serial.print("HotSpt IP:");
Serial.println(myIP);
}
void InitWebServer()
{
//페이지 요청 처리 함수 등록
server.on("/", handle_root);
server.on("/index.html", handle_root);
server.on("/on", SetLedStatusOn);
server.on("/off", SetLedStatusOff);
server.begin();
}
void setup() {
pinMode(LED_PIN, OUTPUT);
Led1On();
pinMode(SW_PIN, INPUT_PULLUP);
Serial.begin(115200);
Serial.println("ESP32 Simple web Start");
Serial.println(ssid);
InitWiFi();
InitWebServer();
Serial.println("HTTP server started");
delay(100);
}
void loop() {
server.handleClient();
}
핸드폰에서 AP를 검색해서 접속한후 웹브라우저에서 AP의 디폴트 IP인 192.168.4.1에 접속하면 웹서버에 접속할 수 있다. ESP32 AP기능을 이용하여 원격지에서 특별한 장비 없이 간단히 LED제어나 설정을 할 수 있다.

반응형