(기본 라이브러리) ESP8266Wifi.h & PubsubClient.h
↓↓
(보완한 라이브러리) AimMqtt.h
1) 와이파이 접속 후 MQTT 서버에 접속
2) MQTT 서버에 접속하면 토픽 led를 sub
3) 10초 간격으로 토픽 msg 발행
4) 토픽 led 수신하면 페이로드에 따라 LED를 ON/OFF하고 LED 상태를 토픽 led-r로 발행pub
5) 시리얼 모니터에서 LED on/off 명령어 입력하면 보드에서 받아서 토픽 led로 발행
< mqtt-led-control >
define TOPIC_LED "led" // led의 payload값이 1:ON, 0:OFF(led 제어)
define TOPIC_LED_R "led-r" // receive한 값을 응답하기 위한 것.(LED 상태 응답)
define TOPIC_MSG "msg" // 디바이스에서 브로커로 보낸 것으로 10초마다 카운트하여 진행 상태 보고
#include <myConfig.h>
방법 1) 기본 라이브러리 ESP8266Wifi.h & PubsubClient.h를 사용하면// 무선 공유기(AP,엑세스 포인트)의 이름과 비밀번호 #define AP_SSID1 "my-ssid1" #define AP_PASS1 "my-pass1" #define AP_SSID2 "my-ssid2" // 없으면 "" #define AP_PASS2 "my-pass2" // 없으면 "" #define AP_SSID3 "my-ssid3" // 없으면 "" #define AP_PASS3 "my-pass3" // 없으면 "" // MQTT 설정 #define SERVER "192.168.XXX.XXX" #define PORT 1883 #define USER "user" #define PASS "yourPass" #define DEVICE "ESP-{{mac}}" //{{auto}},{{mac}},{{user}}
SERVER : MQTT 브로커의 URL이나 IP주소 지정
PORT : 대체로 1883 사용
USER : MQTT 브로커에 등록된 유저네임
PASS : MQTT 브로커에 등록된 비밀번호
DEVICE : MQTT 브로커에 접속할 때 사용하는 디바이스 아이디로 중복X
   {{mac}} - 디바이스의 맥 주소
   {{auto}} - 16진수 난수로 접속할 때마다 바뀐다.
   {{user}} - 앞에서 지정한 USER
- **AimMqtt.h 포함하기**
myLib 파일 수정하고 저장
```java
#include<AimMqtt.h>
오브젝트 생성하기
AimMqtt mqtt;
함수 지정하기
두 개의 callback 함수에 의해 mqtt가 동작, 전달된 내용이 디바이스와 대시보드에 전달.
mqtt.begin(myMqttSub, myMqttCallback);
지속적인 실행
mqtt 브로커에 실시간으로 동작하도록 한다.
mqtt.run();
주기적으로 토픽 발행
타이머가 10초 간격으로 true가 될때마다 value가 증가하다가 TOPIC_MST(msg) 보내고 토픽과 value를 숫자로 mqtt에 보낸다.
if(timerMsg.inOn()){
static unsigend long value = 0;
mqtt.pub(TOPIC_MSG, ++value);
}
pub 메소드 용법
myMqttSub()
mqtt 서버에 접속할 때마다 호출. 호출되어올 때 구독을 하는데 TOPIC_LED를 브로커를 통해 들어오는 것을 받도록한다.
void myMqttSub(){
int QoS = 1;
mqtt.sub(TOPIC_LED,QoS);
}
myMqttCallback()
topic이 led로 넘어오면 그 led를 payload에서 가져온 값(0 or 1)을 가져와서 led를 동작시킨다.
동작이 일어난 결과를 브로커로 발행. led_r을 토픽형태로 발행하고 payload에 의한 값(0 or 1)을 방행하라는 명령어 → led 상태를 브로커를 통해 대시보드에 표시하기 위한 명령
void myMqttCallback(const String& topic, const String& payload){
//수신된 topic, payload 처리
if(topic == TOPIC_LED){
led.set(payload);
mqtt.pub(TOPIC_LED_R,led.status(),true);
}
}