본문 바로가기

ESPRESSIF/ESP32-C6

[ESP32-C6 SSM] WiFi AP 모드 웹서버 테스트

 

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제어나 설정을 할 수 있다.

 

 

반응형