MQTT
(Message Queing Telemetry Transport) : 서버로 데이터를 보낼때 자주 사용하는 프로토콜이다. 임베디드
에서의 저성능 환경에서 작은 기기
들이 지연 및 손실을 방지하는 안정적인 통신
이 가능토록 하는 프로토콜
실시간, 최소 전력, 신뢰성 있는 비동기적
메시징 방식, 다중 접속
을 지원한다.
발행 구독 패턴
: 발행(Publish), 구독(Subscribe) 패턴의 TCP/IP 기반 경량 메시지 프로토콜
QoS : Quality of Service로 메세지 전달 방식의 품질을 결정한다.
주제는 무엇이든 가능하며, 계층적으로 나타낼수 있다. /
를 이용하여 레벨별 표현 가능하다.
1. 단일 레벨 : +
2. 다중 레벨 : #
중재자 서버 역할을 하는 프로그램
설치에서 윈도우 버전 다운받기!
고급 시스템 설정 > 고급 > 환경변수 > 시스템 변수에서 Path > 추가 후 C:\Program Files\mosquitto
붙여넣기
작업관리자 > 서비스 > mosquitto를 중지됨 -> 시작 으로 변경
구독부터 하고 발행을 해야 구독한 사람이 받을 수 있다.
발행자
: mosquitto_pub -t "myhome/firstfloor/livingroom/temperature" -m 23.4
구독자
: mosquitto_sub -t "myhome/firstfloor/livingroom/temperature"
주제 구조를 변경하여 다른 구독자에게 데이터를 전송할 수 있다.
선행 슬래시 사용 x
공백 사용 x
주제는 짧고 간결하게
ASCll 문자만 사용 한글 x
+와 #을 활용해보자!
#은 항상 끝에서만 사용가능하다.
와일드 카드는 구독자
입장에서 사용가능하다.
+
: 단일레벨 - 1개의 주제를 대체한다.
구독자
: mosquitto_sub -t "myhome/firstfloor/+/temperature"
발행자
: mosquitto_pub -t "myhome/firstfloor/livingroom/temperature" -m 23.4
가능
: mosquitto_pub -t "myhome/firstfloor/kitchen/temperature" -m 23.4
불가능
mosquitto_pub -t "myhome/firstfloor/livingroom/brightness" -m 23.4
mosquitto_pub -t "myhome/secondfloor/livingroom/temperature" -m 23.4
mosquitto_pub -t "myhome/firstfloor/kitchen/livingroom/temperature" -m 23.4
#
: 다중레벨 - 하위의 모든 주제를 포함한다.
구독자
: mosquitto_sub -t "myhome/firstfloor/#"
발행자
: mosquitto_pub -t "myhome/firstfloor/livingroom/temperature" -m 23.4
가능
:
mosquitto_pub -t "myhome/firstfloor/kitchen/temperature" -m 23.4
mosquitto_pub -t "myhome/firstfloor/livingroom" -m 23.4
불가능
: mosquitto_pub -t "myhome/secondfloor/kitchen/temperature" -m 23.4
라즈베리파이 터미널 창에 sudo apt install mosquitto
를 통해 모스키토를 설치하자!
sudo apt install mosquitto-clients
: 브로커 동작 테스트 프로그램 설치
데이터 구독 빛 발행 명령어가 윈도우와는 살짝 다르다.
구독
: mosquitto_sub -t "everland/animals/tiger" -h 127.0.0.1
발행
: mosquitto_pub -t everland/animals/tiger" -h 127.0.0.1 -m aaa
-h는 IP주소로 동일한 PC에서 테스트하는거면 생략 해도 정상 작동한다.
발행 입장에서 -m 옵션 대신 -l 옵션
을 주면 채팅형식으로 계속 데이터를 전송할 수 있다.
관리자 권환
으로 실행 후 > mosquitto.conf
파일 열기 > 맨 하단에 다음 두줄 추가bind_address [본인 IP] => ip는 cmd > ipconfig를 통해 확인하기
allow_anonymous true
윈도우 검색 > 고급 보안이 포함된 ~ > 인바운드 규칙 > 새규칙 > 포트 > 특정 포트 > 1883 > 이름 : mosquitto로 설정
cd / > cd "Program Files" /mosquitto > mosquitto -c mosquitto.conf -v
로 mosquitto 서버 실행시키기
구독
: mosquitto_sub -h [설정한 브로커 IP] -t "test" -p 1883
발행
: mosquitto_pub -h [설정한 브로커 IP] -t "test" -m hello -p 1883
브로커 서버를 살펴보면, 데이터 용량
도 끝에 같이 표시된다.
아두이노 IDE의 라이브러리 관리자에서 espmqttclient
설치 , install all
아두이노 IDE에서 해당 코드에서 ssid, pw, ip
등을 변경하여 업로드 해보기
#include "EspMQTTClient.h"
EspMQTTClient client(
"본인 ssid",
"본인 pw",
"브로커 IP", // MQTT Broker server ip
"MQTTUsername", // Can be omitted if not needed
"MQTTPassword", // Can be omitted if not needed
"TestClient", // Client name that uniquely identify your device
1883 // The MQTT port, default to 1883. this line can be omitted
);
int abc = 10;
void setup() {
Serial.begin(9600);
client.enableDebuggingMessages(); // Enable debugging messages sent to serial output
client.enableHTTPWebUpdater(); // Enable the web updater. User and password default to values of MQTTUsername and MQTTPassword. These can be overrited with enableHTTPWebUpdater("user", "password").
client.enableLastWillMessage("TestClient/lastwill", "I am going offline"); // You can activate the retain flag by setting the third parameter to true
}
// This function is called once everything is connected (Wifi and MQTT)
// WARNING : YOU MUST IMPLEMENT IT IF YOU USE EspMQTTClient
void onConnectionEstablished() {
// Subscribe to "mytopic/test" and display received message to Serial
client.subscribe("mytopic/test", [](const String & payload) { Serial.println(payload); });
// Subscribe to "mytopic/wildcardtest/#" and display received message to Serial
client.subscribe("mytopic/wildcardtest/#", [](const String & topic, const String & payload) { Serial.println(topic + ": " + payload); });
// Publish a message to "mytopic/test"
client.publish("mytopic/test", "This is a message"); // You can activate the retain flag by setting the third parameter to true
// Execute delayed instructions
client.executeDelayed(5 * 1000, []() { client.publish("mytopic/test", "This is a message sent 5 seconds later"); });
}
void loop() {
client.loop();
// You can activate the retain flag by setting the third parameter to true
client.publish("mytopic/test", String(abc));
abc++;
delay(2000);
}
cmd 창에서 mosquitto_sub -h [브로커 IP] -t "mytopic/test" -p 1883
로 구독하기
sudo vi /etc/mosquitto/mosquitto.conf
에서 하단에 다음 두줄 추가
port 1883
allow_anonymous true
ps -ef | grep mosquitto
에서 확인한 id(앞)을 기억하여 sudo kill [id]
후 sudo mosquitto -v
를 통해 키자!