본문 바로가기
컴퓨터|인터넷/라즈베리파이

라즈베리파이 피코W 마이크로파이썬 mqtt 클라이언트

by 즐거운 지니 2024. 10. 4.
반응형

라즈베리 파이 피코에서 MicroPython을 사용하여 mosquitto MQTT 브로커에 연결하는 클라이언트 프로그램의 예제를 만들어 보겠습니다. 이를 위해 umqtt.simple 라이브러리를 사용하여 MQTT 통신을 구현할 수 있습니다.

기본 요구사항

  1. MicroPython 설치된 라즈베리 파이 피코: MicroPython이 설치되어 있어야 합니다.
  2. WLAN (Wi-Fi 지원이 필요): 라즈베리 파이 피코 W 모델(Wi-Fi 지원)을 사용해야 MQTT 서버에 연결할 수 있습니다.
  3. 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

 

micropython-lib/micropython/umqtt.simple/umqtt/simple.py at master · micropython/micropython-lib

Core Python libraries ported to MicroPython. Contribute to micropython/micropython-lib development by creating an account on GitHub.

github.com

 

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()

설명

  1. Wi-Fi 연결:
    • connect_wifi 함수는 피코를 Wi-Fi에 연결합니다. SSID와 패스워드를 입력하여 설정합니다.
  2. MQTT 클라이언트 설정:
    • MQTTClient 클래스를 사용하여 Mosquitto 서버와 연결합니다. CLIENT_ID는 MQTT 클라이언트의 고유 식별자입니다.
  3. 구독 및 발행:
    • 클라이언트는 특정 토픽(MQTT_TOPIC)에 구독(subscribe)합니다. 이 구독된 토픽에서 메시지를 받을 때마다 message_callback 함수가 호출됩니다.
    • client.publish를 통해 해당 토픽에 메시지를 발행(publish)할 수 있습니다.
  4. 메시지 처리:
    • client.check_msg()는 구독된 메시지가 도착했는지 체크하고, 도착한 경우 콜백 함수로 메시지를 전달합니다.

필요 사항

  1. Wi-Fi 정보: SSIDPASSWORD는 사용자가 접속할 Wi-Fi 네트워크 정보로 대체해야 합니다.
  2. MQTT 서버 정보: MQTT_SERVER는 Mosquitto 브로커의 IP 주소 또는 호스트 이름으로 바꿔야 합니다.

추가 사항

  • 보안: TLS와 같은 보안 연결을 위해서는 더 많은 설정이 필요하며, 이는 umqtt.robust 모듈에서 지원됩니다.
  • QOS 설정: 기본적으로 이 코드는 QOS 0으로 설정되어 있으며, 필요에 따라 QOS 수준을 변경할 수 있습니다.

이 코드를 통해 라즈베리 파이 피코를 사용하여 Mosquitto MQTT 브로커에 연결하고, 메시지를 송수신할 수 있습니다.

반응형

댓글