RP2040(Pico) + ESP8266(또는 Pico W)의 Wi-Fi를 이용해 센서 데이터를 MQTT로 송수신하는 예제를 소개합니다. 온습도 센서(DHT22)를 읽어서 브로커로 발행하고, LED 제어 메시지를 구독합니다.

구성:
- Pico W 단독 또는 일반 Pico + ESP-01(ESP8266)
- 센서: DHT22(데이터 핀: GP15)
- MQTT 브로커: test.mosquitto.org 또는 로컬 Mosquitto

CircuitPython 예제 (Pico W):

import time
import board
import digitalio
import wifi
import socketpool
import ssl
import adafruit_minimqtt.adafruit_minimqtt as MQTT
import adafruit_dht

WIFI_SSID = "YOUR_SSID"
WIFI_PASS = "YOUR_PASS"
BROKER = "test.mosquitto.org"
TOPIC_PUB = "pico/dht22"
TOPIC_SUB = "pico/led"

wifi.radio.connect(WIFI_SSID, WIFI_PASS)
pool = socketpool.SocketPool(wifi.radio)
client = MQTT.MQTT(broker=BROKER, socket_pool=pool, ssl_context=ssl.create_default_context())

led = digitalio.DigitalInOut(board.LED)
led.direction = digitalio.Direction.OUTPUT

sensor = adafruit_dht.DHT22(board.GP15)

def on_message(client, topic, message):
    if topic == TOPIC_SUB:
        led.value = (message == "on")

client.on_message = on_message
client.connect()
client.subscribe(TOPIC_SUB)

while True:
    client.loop()
    try:
        t = sensor.temperature
        h = sensor.humidity
        client.publish(TOPIC_PUB, f"{t:.1f},{h:.1f}")
    except Exception as e:
        pass
    time.sleep(2)

설명: Pico W는 네이티브 Wi-Fi를 제공해 MQTT 예제가 단순합니다. 일반 Pico는 ESP8266 AT 펌웨어와 UART를 통해 MQTT를 구현할 수 있습니다.

Posted by 살레시오
,