개요
신뢰성 있는 데이터 전송 및 원격제어를 위해 만들어진 프로토콜 ( ISO 표준 )
열악한 네트워크 환경에서 센서 하나 정도 달린 작은 기기들의 데이터 전송 및 원격제어를 위해 만들어짐
→ 임베디드 장치에 알맞은 프로토콜이다
- 실시간, 최소 전력, 신뢰성 있는 비동기적 메시징 방식 ( TCP/IP 기반 )
- 경량 프로토콜
- 이벤트 방식의 N:N 통신 지원
임베디드 IoT에 필수적인 기능만 모여 있다.
구성
MQTT에는 3개의 구성원이 존재한다.
- Broker
- publisher
- subscriber
Broker
Broker는 메시지가 들어오는 통로이다.
- 반드시 Broker를 통해서만 통신이 가능하다
- 메시지의 전송 여부, 에러 여부를 확인할 수 있다.
Publish / Subscribe
누구나 발행/구독을 할 수 있으며, 구독과 발행을 동시에 할 수도 있다.
- 발행 : publish
- 구독 : subscribe
topic
메시지에 태그를 거는 용도로 사용한다.
구독자는 원하는 토픽만 선택해서 메시지를 받는다.
만약 A의 topic이 web이고, B의 topic도 web, C의 topic이 embedded라면
A에서 발행한 메시지는 B에서는 구독을 한다.
단, 토픽이 맞지 않은 C에서는 해당 메시지를 구독하지 않는다.
이와 같이 토픽은 계층적으로 관리한다.
* 와일드 카드 활용법을 이용하면, 다량의 센서 노드를 한꺼번에 제어 할 수 있다.
topic선정엔 일정 규칙이 있다.
- 가급적 선행 슬래시를 사용하지 마라.
- 주제에 공백을 사용하지 마라
- MQTT 주제를 짧고 간결하게 유지해라
- ASCII 문자만 사용해라
- 주제에 가급적 아이디를 넣어주면 좋다.
- 확장성을 염두에 두고 만들면 좋다.
MQTT 설치
MQTT 공식 사이트에서 MQTT 서버를 다운로드 할 수 있다.
https://mosquitto.org/download/
설치가 완료되었다면 환경 변수에 등록해 주면 된다.
환경 변수 등록 후 cmd창에서 mosquitto -ver을 입력하면 설치된 버전을 확인할 수 있다.
MQTT Broker
mosquitto -v를 입력하면 MQTT Broker을 실행할 수 있다.
MQTT Subscribe
cmd 창을 하나 더 열어서 subscriber를 실행한다.
broker창이 실행된 상태에서 진행해야한다.
subscriber가 등록되면, broker에 알림이 뜬다.
subscriber는 현재 수신 대기 중이다.
MQTT Publish
cmd 창을 하나 더 열어서, publish를 실행한다.
subscriber와 마찬가지로 publish가 등록되면 broker에 알림이 뜬다.
subscribe를 확인해 보면 메시지가 정상적으로 도착한 것을 볼 수 있다.
메시지는 반드시 broker 를 거쳐서 subscriber 에게 도착한다.
WildCard
wildcard 를 이용해서 다량의 장치를 한꺼번에 제어할 수 있다.
IoT 에 쓰이는 Mqtt 프로토콜은 다양한 장치를 한꺼번에 제어할 수 있도록 Topic 을 이용해 계층적으로 표현이 가능하다.
마치 트리형태와 같은 구조로 subscriber를 생성해 준다.
publisher를 생성하여 Node4에게 메시지를 전달해 본다.
Node4에 메시지가 정상적으로 전달되었다.
이제 Wildcard를 활용한 메시지 전달을 실행해 보자.
wildcard란, 한번에 다량의 메시지 를 관리할 때 사용된다.
- 단일 레벨: + , 중간 계층을 선택해서 동일한 하위 계층의 메시지 를 읽어온다.
- 멀티 레벨: # , 가장 마지막에 추가할 수 있으며, 상위 계층의 모든 하위계층 메시지를 읽어온다.
단일계층 (+)
만약 Node1에 있는 모든 자식 노드의 메시지를 받으려면 wildcard를 사용해 쉽게 처리할 수 있다.
publisher
subscriber
멀티계층 (#)
읽어올 노드의 부모 노드의 뒤에 #을 추가하면 자식 노드에게 전달받은 메시지를 모두 볼 수 있다.
publisher
subscriber
'임베디드 > IoT' 카테고리의 다른 글
임베디드 IoT, 아두이노 ESP32 보드 (2) | 2024.11.07 |
---|---|
임베디드 IoT (0) | 2024.11.07 |