2021. 3. 29. 22:23ㆍDev/Etc
캡스톤디자인 프로젝트에서 MQTT를 이용하여 통신할 일이 있다.
따라서 MQTT를 공부하면서 내 나름대로 정리를 해 보고, 실제로 라즈베리파이를 허브로 두고 웹 서버와 통신한 예제를 간단하게 써볼것이다.
* MQTT란?
HTTP/TCP와 같이 Client <> Server 구조로 통신하는 것이 아닌, Publisher <> Broker <> Subscriber의 구조로 통신하는 통신 프로토콜로, 전력량이 낮아 IOT 등의 통신에 매우 적합한 통신 프로토콜이다.
* Broker
일반적으로 이 Broker를 구현하는 것은 힘들기 때문에, Mosquitto등을 사용하는 것이 일반적이다. Broker를 통해 장치는 Publishing을 할 수도, Subscribe를 할 수도 있다.
그렇다면 실제로 해보자!
Broker
라즈베리파이의 OS 라즈비안은 linux기반이므로 linux에 설치하듯이 하면 된다.
sudo apt install mosquitto
설치 한 후 제대로 설치 및 실행이 됐는지 확인해보려면 터미널에 아래와 같이 입력한다.
sudo systemctl status mosquitto.service
Client
나는 라즈베리파이에서 메시지를 Publishing 하고 Mac OS에서 Subscribe을 하기 위해 NodeJS를 위한 간단한 코드를 작성해봤다.
npm install mqtt --save
먼저 mqtt 모듈을 설치한다.
const mqtt = require('mqtt');
const options = {
host : 'Raspberry IP Address',
port : 1883,
};
const client = mqtt.connect(options);
client.subscribe('test');
client.on('message', (topic, message) => {
console.log('토픽 : ', topic, '메시지 : ', message.toString());
});
Mosquitto의 포트는 기본적으로 1883으로 제공되고, host 주소는 라즈베리파이의 IP 주소를 사용하면 된다.(공유기를 사용한다면 192.168.xx.xx 처럼 될 것이다).
이후 client를 test topic을 구독하게 하면 이제부터 test topic에서 publishing이 될 때마다 메시지를 받을 수 있다!
(참고로 메시지는 Buffer로 오기 때문에, toString으로 변환해줘야 제대로 읽을 수 있다.)
반대로 NodeJS에서 Publish를 하고 다른 장치에서 Subscribe를 하는 것 또한 물론 가능하다.
'Dev > Etc' 카테고리의 다른 글
[Docker DB]Docker에서 Postgres, MongoDB, Redis 구동하기 (0) | 2022.02.08 |
---|---|
[PostgreSQL] SQL 명령어 관련 (0) | 2022.01.24 |
[Mac OS] Homebrew 관련 명령어 정리 (0) | 2022.01.15 |
[PostgreSQL] db 생성 및 삭제 명령어 (0) | 2021.11.06 |
KhuHub(그 외) -> GitHub로 immigration 하기 (0) | 2021.03.29 |