-
[Raspberry Pi] MQTT로 원격 LED 제어하기Raspberry Pi/Build with Pi 2026. 4. 27. 13:39
오늘은 이전 포스팅과 동일하게 LED ON/OFF 실습을 진행할 것인데, MQTT를 이용해서 원격 제어를 하는 실습을 진행할 예정이다.
LED제어와 MQTT에 대해서는 아래 링크에서 확인할 수 있다.
https://yeontachi.tistory.com/18
[Raspberry Pi] 라즈베리 파이 LED 제어하기
오늘은 LED ON/OFF를 실습했다.두 가지 방식으로 진행을 했는데,먼저 프로그램 없이 명령어로 LED 제어하기, 그 다음은 프로그램을 이용한 LED 제어이다.(Python을 사용했다.)먼저 LED 제어를 위해서는 G
yeontachi.tistory.com
MQTT 설치
실습을 들어가기 전에 mqtt 설치를 진행해야 한다. 먼저 mosquitto를 이용할 것이므로 mosquitto를 설치해보자.
일단 먼저 apt를 이용해서 update를 해준 뒤,
sudo apt -y upgrade; sudo apt -y updateapt-cache에 mosquitto가 있는지 확인해준다.

sudo apt-cache search mosquitto 확인이 되었다면, mosquitto를 설치해 주면된다.
sudo apt -y install mosquitto mosquitto-clients설치가 완료되었다면 which를 이용해 설치 확인을 해주고, 아래처럼 /usr/bin/mosquitto가 나온다면 설치가 정상적으로 완료된 것이다. 추가적으로, systectl status를 이용해 active 상태를 확인해준다.(설치가 완료되었다면 running 중인게 정상이다.)

MQTT 기본 통신 테스트
이제 터미널을 2개 정도 띄어놓고, Publisher가 메세지를 보냈을 때, Subscriber가 메세지를 잘 수신하는지 확인해보자. 먼저 Subscriber 터미널에는 아래 명령어를 쳐주고,
mosquitto_sub -t topic1Publisher에서는 아래 명령어로 "hello!" 메세지를 보내보자. 이때 Subscriber 터미널에서 "hello!" 메세지가 보여야 정상적으로 작동하고 있다고 말할 수 있다.
mosquitto_pub -t topic1 -m "hello!"
mqtt 통신 테스트 외부(휴대폰) 접속 설정
실제 지금 이 실습의 목표는 외부에서 메세지를 보냈을 때 센서 제어를 하는 것이 목적이므로, 외부 접속 설정을 해줘야한다.
먼저 아래 설정 파일을 수정해야한다.
sudo nano /etc/mosquitto/mosquitto.conf(vi를 잘 안써서 nano가 편하긴 한데, 코드 작성할 땐 아무래도 vi가 편한 것 같긴 하다...)
위 파일에 들어가게 되면, 맨 아래줄에 아래 텍스트를 추가한다.(현재는 실습용 이기에 아래처럼 추가하지만, 실제 서비스에서는 매우 위험한 방법이다.)
listener 1883 0.0.0.0 allow_anonymous true
외부 접속 설정 conf 파일 수정이 완료되었다면, 이제 재시작 및 다시 통신 테스트를 진행해보자. 아래 명령어로 재시작을 해주고 publiser에서 메세지를 보냈을 때, subscriber가 메세지를 잘 받는지 다시 확인해주면 된다.
sudo systemctl restart mosquitto
통신 테스트 이렇게 되면 이제 기본 설정은 완료되었다.
휴대전화로 메세지 보내서 LED 제어하기
LED는 이미 빵판에 회로 연결이 되어있다고 가정하도록 하겠다. 이제 휴대전화로 메세지를 보내야하는데, 먼저 기본적으로 휴대전화와, 라즈베리파이가 동일한 와이파이와 연결되어있는 상태를 기본으로 한다.
메세지를 보낼 휴대전화에는 playstore에서 mqtt 앱을 하나 설치해줘야 한다. 아무거나 설치해도 될것 같다. 기본적으로 다들 잘 작동하는 것 같다.
앱 설치를 하면 초기 화면에 Host IP주소를 적는 칸이 있는데, Host IP에는 라즈베리 파이의 ip주소를 적으면된다.(터미널에서 ifconfig로 확인 가능하다.) 추가적으로 포트 번호를 적어야 하는데, 이전에 위에서 외부 접속 설정할 때 사용했던 1883 포트를 그대로 사용해야 접속이된다.(앱 설정은 따로 이미지는 없다.. 넘 쉬움)
이제 python 코드를 작성할 차례이다. 먼저 라이브러리 설치가 필요하다. 아래 라이브러리를 파이썬 가상환경에 설치해주면 된다.
pip install paho-mqtt설치가 완료되었다면 LED 제어 코드는 아래와 같다. 먼저 회로의 경우 6번 핀의 Ground와 GPIO18(물리 번호 12번)에 연결했으므로, 해당 설정을 기본으로 코드를 작성했다.
import paho.mqtt.client as mqtt import RPi.GPIO as GPIO LED_PIN = 17 GPIO.setmode(GPIO.BCM) GPIO.setup(LED_PIN, GPIO.OUT) def on_connect(client, userdata, flags, rc): print("Connected") client.subscribe("topic1") def on_message(client, userdata, msg): message = msg.payload.decode() print("Message:", message) if message == "on" or message == "1": GPIO.output(LED_PIN, GPIO.HIGH) print("LED ON") elif message == "off" or message == "0": GPIO.output(LED_PIN, GPIO.LOW) print("LED OFF") client = mqtt.Client() client.on_connect = on_connect client.on_message = on_message client.connect("localhost", 1883, 60) client.loop_forever()코드가 작성이 되었다면, python 코드를 실행해주고,
휴대전화 mqtt 앱에서 publish Topic을 "topic1"으로 설정해준다.(코드에 topic1으로 설정했기 때문이다) 휴대전화에서 Topic을 설정해주고, message로 on/off 또는 0/1을 보내면 LED가 켜졌다가 꺼지는 것을 확인할 수 있다.
아래는 결과 영상이다. 오늘도 간단하고 재미있는 실습을 진행했다~ 프로젝트 할때 mqtt를 활용하면 할만한 프로젝트 주제가 더 넓어질 듯 하다:)
https://www.youtube.com/watch?v=_JrT2Qbx5h4
'Raspberry Pi > Build with Pi' 카테고리의 다른 글
[Raspberry Pi] 온도 습도 센서 동작 + 7 segment (0) 2026.04.04 [Raspberry Pi] 초음파 센서 동작 + LED 센서 (0) 2026.04.04 [Raspberry Pi] 라즈베리 파이 LED 제어하기 (0) 2026.04.04 [Raspberry Pi] Raspberry Pi OS 설치 및 필수 초기 설정 (0) 2026.03.22