MQTT Server and Client

1 minute read

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

참고. 빌드 라이브러리 설치 오류

다음과 같은 에러가 뜨는 경우: mqtt_install_error

$ 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” 검색 후 설치

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