MQTT Server and Client
Written By HJ Jang, VCANUS
MQTT 프로토콜은 NATS와 마찬가지로 발행-구독(Publish-Subscribe) 기반의 메시징 시스템이다.
저전력 및 저대역폭 통신을 위해 가볍게 설계되어 아두이노, 라즈베리파이 같은 소형 컴퓨터나 센서 간의 통신에 적합하다.
Install MQTT for Ubuntu
1. 빌드 라이브러리 설치
$ sudo apt-get install openssl build-essential libc-ares-dev uuid-dev libssl-dev libcurl4-openssl-dev libmysqlclient-dev
참고. 빌드 라이브러리 설치 오류
다음과 같은 에러가 뜨는 경우:
$ sudo apt-get update
에러 메시지의 마지막 줄에 제시된 것처럼 apt-get update
하면 해결된다.
2. Mosquitto 설치
$ cd ~/
$ mkdir mosquitto_sources
$ cd mosquitto_sources/
$ wget http://mosquitto.org/files/source/mosquitto-1.4.8.tar.gz
$ tar xvf mosquitto-1.4.8.tar.gz
$ cd ~/mosquitto_sources/mosquitto-1.4.8/
$ make
$ sudo make install
$ sudo apt-get install mosquitto-clients
$ sudo apt install mosquitto
3. Mosquitto 실행
broker
MQTT 클라이언트 연결을 모니터링할 수 있다.
$ sudo mosquitto
subscribe
$ mosquitto_sub -h 127.0.0.1 -t 'topic' -i 'subscriber_id'
publish
$ mosquitto_pub -h 127.0.0.1 -t 'topic' -i 'publisher_id' -m 'payload'
$ mosquitto_pub -h 127.0.0.1 -t 'topic' -l # 긴 메시지 옵션
4. Mosquitto 실행 종료
$ sudo /etc/init.d/mosquitto stop
Arduino and MQTT
Arduino MQTT Library
zip 파일 다운로드 또는 Sketch > Include Library > Manage Libraries...
에서 “PubSubClient” 검색 후 설치
ESP32 예제 설명
#include <WiFi.h>
#include <PubSubClient.h> // 아두이노 MQTT 라이브러리
const char* ssid = ""; // WiFi 이름
const char* password = ""; // WiFi 비밀번호
const char* mqtt_server = ""; // MQTT 서버 IP주소(ex. 127.0.0.1)
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
Serial.println();
connectWiFi();
client.setServer(mqtt_server, 1883); // MQTT 프로토콜의 기본 port주소: 1883
client.connect("pub_id"); // "pub_id"라는 id로 MQTT 브로커에 연결
bool res = client.publish("topic", "test!"); // "topic"에 "test!" 메시지 pubish
Serial.println(res); // publish 성공 시 1, 실패 시 0 출력
}
client.connect("id");
가 잘 동작했다면, mosquitto broker를 실행한 터미널에 다음과 같이 출력되어야 한다.
1604278058: New connection from mqtt_server on port 1883.
1604278058: New client connected from mqtt_server as pub_id (p2, c1, k15).
새로운 터미널을 열어 subscribe client를 열어준다.
$ mosquitto_sub -h mqtt_server -t 'topic' -i 'sub_id' # id는 중복되면 안 된다.
test!
ESP32 클라이언트에서 보낸 메시지 “test!”가 출력되면 잘 동작하고 있는 것이다.
Leave a comment