작업 전에 필요한 라이브러리를 다운로드 받는다.
테스트 용으로 여러 데이터를 담아 보내기 위해 JSON 라이브러리, 현재 시간을 받을 수 있는 NTPClient를 다운로드 받았다.
$ arduino-cli lib install "ArduinoJson"
$ arduino-cli lib install "NTPClient"
#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
#include <NTPClient.h>
const char* ssid = "WIFI";
const char* pwd = "PASSWORD";
const char* mqttServer = "MQTT INSTALL SERVER";
WiFiClient esbClient;
PubSubClient client(esbClient);
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 32400, 60000);
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, pwd);
while(WiFi.status() != WL_CONNECTED) {
delay(500);
}
client.setServer(mqttServer, 1883);
while(!client.connected()) {
if(client.connect("ESP32Client")) {
client.subscribe("/mqtt/mqtt_test");
} else {
delay(2000);
}
}
timeClient.begin();
}
void loop() {
timeClient.update();
String formattedTime = timeClient.getFormattedTime();
time_t rawTime = timeClient.getEpochTime();
String message = "MQTT CONNECTION SUCCESS!";
StaticJsonDocument<128> doc;
doc["message"] = message;
doc["timestamp"] = formattedTime.c_str(); // HH:MM:SS
doc["epoch"] = rawTime; // UNIX timestamp
char buffer[128];
serializeJson(doc, buffer);
client.publish("/mqtt/mqtt_test", buffer);
client.loop();
delay(5000);
}
# 컴파일
$ arduino-cli compile --fqbn esp32:esp32:esp32 {파일명}
# 업로드
$ arduino-cli upload --fqbn esp32:esp32:esp32 --port /dev/ttyUSB0 {파일명}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout" layout:decorate="~{fragments/layout-admin}" layout:fragment="body">
<body>
<section>
<div id="home-wrap">
<!-- 현재 시간 표출 -->
<p id="menu-name">MQTT 테스트</p>
</div>
<div class="table-wrap">
<table>
<thead>
<tr style="cursor: default">
<th>메세지 내용</th>
<th>수신 시간</th>
<th>UNIX 시간</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</section>
</body>
<script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
<script th:src="@{/js/admin_mqtt_test.js}"></script>
</html>
client.on('message', (topic, message) => {
// console.log(`MQTT CONNECTION SUCCESS..`);
// console.log(`⇒ ${message}`);
const json = JSON.parse(message);
const jsonMessage = json.message;
const jsonTimestamp = json.timestamp;
const jsonEpoch = json.epoch;
const el = `<tr>
<td>${jsonMessage}</td>
<td>${jsonTimestamp}</td>
<td>${jsonEpoch}</td>
</tr>`;
$('table tbody').append(el);
});
데이터 겁나 잘쌓인다.
'Arduino' 카테고리의 다른 글
[Arduino] ESP32 4채널 릴레이 모듈 배선 작업 및 테스트 코드 작성 (0) | 2025.04.05 |
---|---|
[Arduino] ESP32 기본 센서 호출 테스트 (0) | 2025.04.01 |
[Arduino] HTML/Javascript에서 WebSocket, MQTT를 이용한 Arduino 통신 (0) | 2025.03.29 |
[Arduino] CLI에서 테스트 코드 실행하기 (0) | 2025.03.29 |
[Arduino] Arduino CLI에서 .ino 실행하기 (0) | 2025.03.26 |