0. 라이브러리 설치
$ arduino-cli lib install "WiFi"
Downloading WiFi@1.2.7...
WiFi@1.2.7 downloaded
Installing WiFi@1.2.7...
Installed WiFi@1.2.7
$ arduino-cli lib install "PubSubClient"
Downloading PubSubClient@2.8.0...
PubSubClient@2.8.0 downloaded
Installing PubSubClient@2.8.0...
Installed PubSubClient@2.8.0
1. mqtt_test.ino 작성
#include <WiFi.h>
#include <PubSubClient.h>
const char* ssid = "WIFI";
const char* pwd = "PASSWORD";
const char* mqttServer = "MQTT INSTALL SERVER";
WiFiClient esbClient;
PubSubClient client(esbClient);
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);
}
}
}
void loop() {
String message = "HELLO WORLD!";
client.publish("/mqtt/mqtt_test", message.c_str());
client.loop();
delay(5000);
}
2. mqtt_test.ino 컴파일 및 업로드
이전에 테스트용으로 ‘/arduino/test/’ 경로에 ino 파일을 하나 뒀었는데 공부하다보니 ino 파일 자체가 아두이노 하나에 하나 씩만 존재하는거라 디렉토리 정리하면서 ‘/arduino/’ 경로에 ino 파일을 두었다.
root@WAS-1:/arduino# tree
.
└── arduino.ino
1 directory, 1 file
[참고] ino 파일은 상위 디렉토리명과 같아야 한다.
# 컴파일
$ arduino-cli compile --fqbn esp32:esp32:esp32 {파일명}
# 업로드
$ arduino-cli upload --fqbn esp32:esp32:esp32 --port /dev/ttyUSB0 {파일명}
3. HTML/Javascript 코드 작성
<!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="time"></p>
</div>
<div id="control-wrap">
<button id="tqtt_test" onclick="mqttTestControl()">MQTT TEST</button>
<button id="bluetooth-speaker" onclick="bluetoothSpeakerControl()">BLUETOOTH SPEAKER</button>
<button id="lighting" onclick="lightingControl()">LIGHTING</button>
</div>
</section>
</body>
<script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
<script th:src="@{/js/mqtt.js}"></script>
</html>
function mqttTestControl() {
const brokerUrl = 'ws://192.168.0.48:8081';
const topic = '/mqtt/mqtt_test';
const client = mqtt.connect(brokerUrl);
client.on('connect', () => {
console.log(`TOPIC CONNECT SUCCESS..`);
client.subscribe(topic, (e) => {
if(e) {
console.log(`TOPIC SUBSCRIPTION FAIL..`);
console.log(`⇒ ${e}`);
} else {
console.log(`TOPIC SUBSCRIPTION SUCCESS..`);
console.log(`⇒ ${topic}`);
}
});
});
client.on('message', (topic, message) => {
console.log(`MQTT CONNECTION SUCCESS..`);
console.log(`⇒ ${message}`);
});
}
- WIFI, WIFI PASSWORD 잘 적자..
- ino 파일 작성 ⇒ compile ⇒ upload ⇒ 코드 파일 적용 완료!
- 아두이노 보드 하나에 ino 파일은 하나 씩 존재한다.(Spring Boot 치면 ProjectApplication.java)
P.S 졌잘싸..
'Arduino' 카테고리의 다른 글
[Arduino] ESP32 기본 센서 호출 테스트 (0) | 2025.04.01 |
---|---|
[Arduino] MQTT로 JSON 데이터 타입 전송하기(+ JSON, NTPClient 라이브러리 다운로드) (0) | 2025.03.29 |
[Arduino] CLI에서 테스트 코드 실행하기 (0) | 2025.03.29 |
[Arduino] Arduino CLI에서 .ino 실행하기 (0) | 2025.03.26 |
[Arduino] Arduino CLI 설치 및 ESP32 연결하기 (0) | 2025.03.26 |