Wi Fi를 통한 원격 데이터베이스 자료 입력
ESP32와 Aduino와 가장 큰 차이로 Wi Fi나 블루투스 지원을 꼽는다. 이전에 Aduino 대신 라즈베리 파이를 사용한 이유 중 하나가 Wi Fi 지원 가능성이었다. 개인적으로 ESP32의 Wi Fi를 이용한 응용 중 가장 효과적인 응용은 원격 데이터베이스에 자료 입력이라고 생각한다. ESP32에서 비전 센서(카메라)로 입력된 결과를 처리해 Wi Fi를 통해 원격 데이터베이스에 저장하는 것은 많은 분야에 필요한 기능이다.
ESP32와 MySQL 연동 준비
ESP32-C3와 공개 데이터베이스 관리 시스템인 MySQL(혹은 MariaDB)와 연동 - ESP32에서 원격 MySQL 데이터베이스 서버의 데이터베이스에 자료 입력-을 위해 다음을 준비해야 한다.
- ESP32-C3와 Aduino IDE 준비 '개발 환경 준비(1) XIAO ESP32-C3 프로그래밍' 읽어보기 >
- MariaDB 데이터베이스 관리 시스템 서버 설치
- 서버에 사용자와 데이터베이스 생성
- 데이터베이스에 테이블 생성
- ESP32-C3에 데이터베이스 서버에 접근하여 테이블에 레코드 입력 프로그램 업로드
이 글에서는 데이터베이스 테이블 생성과 ESP32 프로그램 개발에 대하여 설명한다.
test 데이터베이스에 a_table 테이블 생성
현재 개발용 노트북에는 MariaDB 데이터베이스 서버가 설치되어 동작하고 있으며, 데이터베이스 서버에 test 데이터베이스가 생성되어 있다. test에 접근 권한이 있는 사용자로 dnc가 생성되어 있다.
ESP32에서 접근하여 자료를 입력할 테이블 a_table은 다음 데이터베이스 테이블 생성 명령어를 통해 만들 수 있다. date_create 속성은 자료가 입력될 때 서버 시간을 자동으로 입력하도록 정의되어 있다.
create table a_table(
name varchar(32),
date_create datetime default now());
위 명령어를 실행시킨 후 생성된 a_table을 확인하면 다음과 같다.
desc a_table;
+-------------+-------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------------------+-------+
| name | varchar(32) | YES | | NULL | |
| date_create | datetime | YES | | current_timestamp() | |
+-------------+-------------+------+-----+---------------------+-------+
생성된 table에 데이터베이스 자료 생성 명령어를 이용하여 자료를 입력하고 확인하면 다음과 같다.
insert into a_table(name) values('NDoLab');
Query OK, 1 row affected (0.015 sec)
select * from a_table;
+--------+---------------------+
| name | date_create |
+--------+---------------------+
| NDoLab | 2025-09-15 13:53:57 |
+--------+---------------------+
'NDoLab'이라는 자료와 자동으로 입력된 생성 시간을 확인할 수 있다.
ESP32에서 DB에 자료 입력하는 프로그램 작성

- MySQL 연결을 위한 라이브러리를 Aduino IDE 도구 > 라이브러리 관리 선택 후, 'MySQL' 검색으로 'ESP32_MySQL'을 선택하여 설치한다.

- 아래 프로그램을 작성한다. 단 ***로 표시된 네트워크 이름, 네트워크 패스워드, 데이터베이스 사용자 이름, 데이터베이스 사용자 패스워드는 현재 정의된 값으로 바꾸어준다.
#define ESP32_MYSQL_DEBUG_PORT Serial
// Debug Level from 0 to 4
#define _ESP32_MYSQL_LOGLEVEL_ 1
#include <ESP32_MySQL.h>
#define USING_HOST_NAME false
const char ssid[] = "***"; // 네트워크 이름
const char pass[] = "******"; // 네트워크 접근 패스워드
#if USING_HOST_NAME
// Optional using hostname
char server[] = "192.168.0.20"; // change to your server's hostname/URL
//IPAddress server(192, 168, 000, 020);
#else
//IPAddress server(192, 168, 0, 20);
IPAddress server(192, 168, 0, 20);
#endif
uint16_t server_port = 3306; // MySQL server port (default : 3306)
char user[] = "***"; // MySQL 사용자 로그인
char password[] = "*****"; // MySQL 사용자 패스워드
char default_database[] = "test"; //default DB
char default_table[] = "a_table"; //default table
char default_column[] = "name"; //default column
String default_value = "NDoLab"; //default value (make sure datatype same with column of DB table, like you can use String for VARCHAR)
// Sample query
String INSERT_SQL = String("INSERT INTO ") + default_database + "." + default_table
+ " (" + default_column + ")" + " VALUES ('" + default_value + "')";
ESP32_MySQL_Connection conn((Client *)&client);
ESP32_MySQL_Query *query_mem;
void setup()
{
Serial.begin(115200);
while (!Serial && millis() < 5000); // wait for serial port to connect
ESP32_MYSQL_DISPLAY1("\nStarting Basic_Insert_ESP on", ARDUINO_BOARD);
// Begin WiFi section
ESP32_MYSQL_DISPLAY1("Connecting to", ssid);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
ESP32_MYSQL_DISPLAY0(".");
}
// print out info about the connection:
ESP32_MYSQL_DISPLAY1("Connected to network. My IP address is:", WiFi.localIP());
ESP32_MYSQL_DISPLAY3("Connecting to SQL Server @", server, ", Port =", server_port);
ESP32_MYSQL_DISPLAY5("User =", user, ", PW =", password, ", DB =", default_database);
}
void runInsert()
{
// Initiate the query class instance
ESP32_MySQL_Query query_mem = ESP32_MySQL_Query(&conn);
if (conn.connected())
{
ESP32_MYSQL_DISPLAY(INSERT_SQL);
// Execute the query
if ( !query_mem.execute(INSERT_SQL.c_str()) )
{
ESP32_MYSQL_DISPLAY("Insert error");
}
else
{
ESP32_MYSQL_DISPLAY("Data Inserted.");
}
}
else
{
ESP32_MYSQL_DISPLAY("Disconnected from Server. Can't insert.");
}
}
void loop()
{
ESP32_MYSQL_DISPLAY("Connecting...");
//if (conn.connect(server, server_port, user, password))
if (conn.connectNonBlocking(server, server_port, user, password) != RESULT_FAIL)
{
delay(500);
runInsert();
conn.close(); // close the connection
}
else
{
ESP32_MYSQL_DISPLAY("\nConnect failed. Trying again on next iteration.");
}
ESP32_MYSQL_DISPLAY("\nSleeping...");
ESP32_MYSQL_DISPLAY("================================================");
delay(10000); // every 10 seconds
}
- 작성한 프로그램을 컴파일하고 업로드하면 자동으로 실행된다. 프로그램은 데이터베이스에 접근하여 10초 마다 'NDoLab'이라는 이름을 a_table에 입력한다.


업로드가 완료되었으면 아래 사진과 같이 ESP32에 전원을 연결하면 자동으로 프로그램이 실행되어 Wi Fi를 통해 원격 데이터베이스 서버에 10초 마다 자료를 입력한다.

2025 NDoLab
2025/9/13 처음 2025/9/13
#ESP32 #ESP32C3 #XIAO #MySQL #DB연동 #MariaDB
'스마트커넥티드 > ESP32' 카테고리의 다른 글
| XIAO ESP32-C3 개발 환경 (2) AI CAM 응용 (0) | 2025.09.16 |
|---|---|
| XIAO ESP32-S3 sense에서 AI 모델 구동하기 (1) AI CAM 응용 (0) | 2025.09.16 |
| 웹을 이용한 원격 서보 동작 (5) ESP32 프로그램 개발 (0) | 2025.09.16 |
| 와이파이를 이용한 웹 서버 운영 (4) ESP32 프로그램 개발 (0) | 2025.09.16 |
| SG90 서보 모터 제어 (3) ESP32 프로그램 개발 (0) | 2025.09.16 |