반응형
라즈베리 파이 피코에서 MicroPython을 사용하여 mosquitto
MQTT 브로커에 연결하는 클라이언트 프로그램의 예제를 만들어 보겠습니다. 이를 위해 umqtt.simple
라이브러리를 사용하여 MQTT 통신을 구현할 수 있습니다.
기본 요구사항
- MicroPython 설치된 라즈베리 파이 피코: MicroPython이 설치되어 있어야 합니다.
- WLAN (Wi-Fi 지원이 필요): 라즈베리 파이 피코 W 모델(Wi-Fi 지원)을 사용해야 MQTT 서버에 연결할 수 있습니다.
- Mosquitto 서버: 로컬 또는 원격 Mosquitto 브로커가 설정되어 있어야 합니다.
MicroPython 환경 준비
MicroPython에서 MQTT를 사용하려면 umqtt.simple
또는 umqtt.robust
모듈이 필요합니다. 기본적으로 MicroPython 펌웨어에는 umqtt.simple
이 포함되어 있습니다.
라이브러리 설치
만약 라이브러리가 설치되어 있지 않다면, MicroPython의 upip
패키지 관리자를 이용하여 설치할 수 있습니다.
import upip
upip.install('micropython-umqtt.simple')
라이브러리 설치가 어려우면 다음의 링크에서 simple,py 파일을 동일 폴더에 다운로드 받아 저장한 뒤 예제 프로그램의 3번째 줄 from umqtt.simple import MQTTClient 대신 from simple import MQTTClient로 바꿉니다.
https://github.com/micropython/micropython-lib/blob/master/micropython/umqtt.simple/umqtt/simple.py
MQTT 클라이언트 프로그램
아래는 MicroPython에서 라즈베리 파이 피코 W를 사용해 Wi-Fi에 연결한 뒤, Mosquitto 서버에 연결하여 구독(subscribe) 및 메시지 발행(publish)하는 예제 코드입니다.
import network
import time
from umqtt.simple import MQTTClient
# Wi-Fi 연결 정보
SSID = 'your_wifi_ssid'
PASSWORD = 'your_wifi_password'
# MQTT 서버 정보
MQTT_SERVER = 'mqtt_broker_ip_or_hostname'
CLIENT_ID = 'pico_client'
MQTT_TOPIC = 'test/topic'
# Wi-Fi 연결 설정
def connect_wifi(ssid, password):
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
while wlan.isconnected() == False:
print("Connecting to Wi-Fi...")
time.sleep(1)
print("Connected to Wi-Fi:", wlan.ifconfig())
# MQTT 메시지 처리 함수
def message_callback(topic, msg):
print("Received message:", topic, msg)
# 메인 함수
def main():
# Wi-Fi 연결
connect_wifi(SSID, PASSWORD)
# MQTT 클라이언트 설정
client = MQTTClient(CLIENT_ID, MQTT_SERVER)
# 메시지 수신 시 호출될 콜백 함수 설정
client.set_callback(message_callback)
# MQTT 서버에 연결
client.connect()
print("Connected to MQTT broker")
# 토픽 구독
client.subscribe(MQTT_TOPIC)
print(f"Subscribed to {MQTT_TOPIC}")
# 메시지 발행 예시
client.publish(MQTT_TOPIC, "Hello from Pico")
print("Message published")
try:
while True:
# 구독된 메시지 대기 및 처리
client.check_msg()
time.sleep(1)
except KeyboardInterrupt:
# 연결 종료
print("Disconnecting...")
client.disconnect()
# 프로그램 실행
if __name__ == '__main__':
main()
설명
- Wi-Fi 연결:
connect_wifi
함수는 피코를 Wi-Fi에 연결합니다. SSID와 패스워드를 입력하여 설정합니다.
- MQTT 클라이언트 설정:
MQTTClient
클래스를 사용하여 Mosquitto 서버와 연결합니다.CLIENT_ID
는 MQTT 클라이언트의 고유 식별자입니다.
- 구독 및 발행:
- 클라이언트는 특정 토픽(
MQTT_TOPIC
)에 구독(subscribe)합니다. 이 구독된 토픽에서 메시지를 받을 때마다message_callback
함수가 호출됩니다. client.publish
를 통해 해당 토픽에 메시지를 발행(publish)할 수 있습니다.
- 클라이언트는 특정 토픽(
- 메시지 처리:
client.check_msg()
는 구독된 메시지가 도착했는지 체크하고, 도착한 경우 콜백 함수로 메시지를 전달합니다.
필요 사항
- Wi-Fi 정보:
SSID
와PASSWORD
는 사용자가 접속할 Wi-Fi 네트워크 정보로 대체해야 합니다. - MQTT 서버 정보:
MQTT_SERVER
는 Mosquitto 브로커의 IP 주소 또는 호스트 이름으로 바꿔야 합니다.
추가 사항
- 보안: TLS와 같은 보안 연결을 위해서는 더 많은 설정이 필요하며, 이는
umqtt.robust
모듈에서 지원됩니다. - QOS 설정: 기본적으로 이 코드는 QOS 0으로 설정되어 있으며, 필요에 따라 QOS 수준을 변경할 수 있습니다.
이 코드를 통해 라즈베리 파이 피코를 사용하여 Mosquitto MQTT 브로커에 연결하고, 메시지를 송수신할 수 있습니다.
반응형
'컴퓨터|인터넷 > 라즈베리파이' 카테고리의 다른 글
라즈베리파이 피코에서 I2C 통신 (0) | 2024.10.12 |
---|---|
센서 데이터 획득 I2C 통신 (0) | 2024.10.12 |
Ubuntu 시스템에서 apt update 및 apt upgrade 후 재부팅 실패시 (1) | 2024.10.04 |
Node-red: Chart in dashboard (2) | 2024.10.03 |
Node-red: Gauge in Dashboard (노드래드 대시보드 게이지의 활용) (0) | 2024.10.03 |
댓글