esp32에 연결된 각종 센서 정보를 mqtt를 이용하여 통신 및 조작할 수 있도록 노력 중...
mqtt 연결 문제로 꽤 오래 고생하다가
HIVEMQ Cloud를 이용하여 드디어 연결에 성공.
아래는 해당 코드
각자 본인에 맞는 wifi 이름/비번, 클라우드 url/아이디/비번 등 관련 사항을 입력하면 접속될 거라 믿습니다.
시행착오는 Chatgpt에게 도움 요청을....
#include <WiFi.h>
#include <PubSubClient.h>
#include <WiFiClientSecure.h>
// WiFi 및 MQTT 설정
const char* ssid = "your_wifi_name";
const char* password = "your_wifi_password";
const char* mqtt_server = "your_mqtt_url";
const int mqtt_port = 8883; //your_mqtt_port
const char* mqtt_user = "your_mqtt_ID";
const char* mqtt_pass = "your_mqtt_password";
WiFiClientSecure espClient;
PubSubClient client(espClient);
unsigned long lastMsg = 0;
#define MSG_BUFFER_SIZE (500)
char msg[MSG_BUFFER_SIZE];
int value = 0;
// WiFi 연결 설정
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
// MQTT 콜백 함수
void callback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
for (int i = 0; i < length; i++) {
Serial.print((char)payload[i]);
}
Serial.println();
}
// MQTT 연결 함수
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection... ");
String clientId = "ESP32Client";
if (client.connect(clientId.c_str(), mqtt_user, mqtt_pass)) {
Serial.println("connected");
client.publish("testTopic", "Hello from ESP32");
client.subscribe("testTopic");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
// 초기화 설정
void setup() {
Serial.begin(115200);
setup_wifi();
// 인증서 설정 (테스트용 비보안 설정)
espClient.setInsecure();
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
}
// 메인 루프
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
unsigned long now = millis();
if (now - lastMsg > 60000) {
lastMsg = now;
++value;
snprintf(msg, MSG_BUFFER_SIZE, "Hello World #%ld", value);
Serial.print("Publish message: ");
Serial.println(msg);
client.publish("testTopic", msg);
}
}

connected....보려고 참 고생했네요....
현재는 60초에 한번씩 메시지를 주고받는 것을 아두이노의 시리얼 모니터로 볼 수 있는 상태입니다.
앞으로는 각종 센서를 연결해서 해당 수치를 볼 수 있도록 하는 것과
mqtt통신을 통해 센서가 작동되는 임의의 설정값 등을 등록 및 수정할 수 있도록 하여
원격으로 센서와 구동부들을 작동할 수 있도록 할 생각입니다.
천천히 꾸준히 아자!!
'1인창조기업' 카테고리의 다른 글
예비창업자의 창업일지_006탄 (0) | 2025.01.18 |
---|---|
예비창업자의 창업일지_004탄 (0) | 2025.01.18 |
예비창업자의 창업일지_003탄 (0) | 2025.01.18 |
예비창업자의 창업일지_002탄 (0) | 2025.01.18 |
예비창업자의 창업일지_001탄 (0) | 2025.01.18 |