현장에서 GPIO 신호를 받아야 하는데
뭘로 받을까 고민중이다.
raspberry pi pico2 w 가 wifi도 되고 micropython이 되서 사용하기 쉬울 것 같아서 구매했다.
역시 영혼의 동반자 갓바이스마트 devicemart에서 구매했다.
(사실 지난번 서보모터 사면서 같이 샀다)
https://www.devicemart.co.kr/goods/view?no=15604429
라즈베리파이 피코 2 W (Raspberry Pi Pico 2 W)
고성능 저전력 RP2350 칩셋(듀얼 ARM Cortex-M33 및 듀얼 Hazard3 RISC-V (150MHz) 프로세서) 기반 / 온 칩 520KB SRAM / ARM TrustZone, OTP 등 보안 강화에 초점 / 기존 라즈베리파이 피코 완벽 호환(HW 및 SW) / C, C++ SDK,
www.devicemart.co.kr

깜찍하게 생겼다.
pico 1과 폼펙터가 완전히 동일한데 성능이 좋아진 모델이라고한다.
사실 ESP32 계열 보드를 사용해보려고 했는데, 남이 떠멱여 줄때나 STM32시리즈를 써봤지...
아두이노 라즈베리파이로만 프로젝트를 해온 나약한 나로서는 아직 raspberry pi를 벗어나기 쉽지 않다.
그치만 잘 만들어서 쓰면 되는거 아닌가? ㅎㅎ
아무튼
https://www.raspberrypi.com/documentation/microcontrollers/micropython.html#what-is-micropython
MicroPython - Raspberry Pi Documentation
The official documentation for Raspberry Pi computers and microcontrollers
www.raspberrypi.com
위 링크에 있는 문서대로 따라가면서 세팅하면 된다.
지금은 테스트 하나다가 넘어가 버려서 없는데
원래 라즈베리파이 피코를 컴퓨터에 연결하면
저장소로 잡히면서 이동식 드라이브가 하나 생긴다.
거기에

아래 빨간 박스 쳐놓은거를 다운받아서 넣으면 된다.

만약에 이동식 디스크가 안생긴다면
보드에 있는 유일한 버튼인 BOOTSEL 버튼을 누른채로 컴퓨터와 연결해보자
그럼 이동식 디스크가 잡힌다.
파일을 잘 넣고나면 이동식디스크로서 라즈베리파이 피코 2는 사라진다.
이제 이 라즈베리파이는 USB-serial로 연결이 가능하다.
지금 까지 나온 내용은 공식 위 링크 Document에 있는 내용 그대로 수행한 결과다.

이제 쓰면된다. 그게 3번이다.
REPL은 Read-Eval-Print Loop 의 약자로 읽고 평가 후 실행하고 출력하고 이걸 반복하는걸 말한다.
이걸 USB Serial 을 통해서 하라는 거다.
그럼 USB Serial은 뭘로 해야되는가?
홈페이지는 Thonny IDE를 권장한다.
Thonny, Python IDE for beginners
Thonny 4 is dedicated to Ukraine fighting the Russian invasion and Trump's blackmail. 🇺🇦 Please support Ukraine! 🇺🇦 Download version 4.1.7 for • • Thonny Python IDE for beginners Features Easy to get started. Thonny comes with Pytho
thonny.org
위 링크로 들어가서 다운받고 실행하면 된다.

설치하고 실행하면

우측하단에 Local Python 3 로 되어 있는데 클릭해서 MicroPython으로 바꿔준다.
COM3으로 연결되어 있는걸 볼 수 있다.
import time
from machine import Pin
led = Pin("LED", Pin.OUT)
for i in range(1000):
led.value(1)
time.sleep(1)
led.value(0)
time.sleep(1)
아주아주 간단 코드 하나 넣어주고

Save 해주고

이렇게 하면
아주 쉽구요 ㅎㅎㅎ
이제 인터넷 연결을 해보자 .
import time
import network
from machine import Pin
led = Pin("LED", Pin.OUT)
ssid = <USER_SSID>
password = <USER_PASSWORD>
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid,password)
while not wlan.isconnected():
print("Waiting for WiFi connection...")
time.sleep(1)
print("WiFi connected:", wlan.ifconfig())
for i in range(1000):
led.value(1)
time.sleep(1)
led.value(0)
time.sleep(1)
<USER_~~~>는 알아서 잘 고치면 된다.
그러면 이렇게 나온다.

이제 MQTT를 보내는 세팅을 해보자

Thonny 에 아래 터미널 창에서
import mip를 해주고
mip.install(<PACKAGE_NAME>)
을 해주면되는데
사용가능한 packge는
https://github.com/micropython/micropython-lib
GitHub - micropython/micropython-lib: Core Python libraries ported to MicroPython
Core Python libraries ported to MicroPython. Contribute to micropython/micropython-lib development by creating an account on GitHub.
github.com
여기서 확인하면 된다.
mqtt를 테스트할거라서
umqtt를 설치하는데 simple과 robust둘다 설치한다.
사실 코드 짜고 보니까 simple만 있어도.. robust까지 쓸일이 있을까? 안되면 그냥 재시작 하면되는걸? ㅠ
import time
import json
import network
import random
from machine import Pin
from umqtt.simple import MQTTClient
led = Pin("LED", Pin.OUT)
ssid = <WIFI_SSID>
password = <WIFI_PASSWORD>
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid,password)
while not wlan.isconnected():
print("Waiting for WiFi connection...")
time.sleep(1)
print("WiFi connected:", wlan.ifconfig())
MQTT_BROKER = "<YOUR_CLUSTER_ADDRESS>.s1.eu.hivemq.cloud"
MQTT_PORT = <YOUR_PORT>
MQTT_USER = <YOUR_ID>
MQTT_PASS = <YOUR_PASSWORD>
MQTT_TOPIC = <YOUR_TOPIC> # 직접쓴다면 b"my/temp" 이런식으로 byte로
data = {"timestamp":time.time(), "temp":random.randint(5,40)} # 원하는 형태로 변경
MQTT_PAYLOAD = json.dumps(data)
client = MQTTClient(
client_id="pico-client",
server=MQTT_BROKER,
port=MQTT_PORT,
user=MQTT_USER,
password=MQTT_PASS,
ssl=True,
ssl_params={"server_hostname": MQTT_BROKER} # SNI를 위한 설정
)
try:
client.connect()
print("MQTT connected.")
client.publish(MQTT_TOPIC, MQTT_PAYLOAD, qos=1)
print("Published.")
except Exception as e:
print("MQTT Error:", e)
for i in range(1000):
try:
data['timestamp']=time.time()
data['temp'] = random.randint(5,40)
MQTT_PAYLOAD = json.dumps(data)
client.publish(MQTT_TOPIC, MQTT_PAYLOAD, qos=1)
print(f"Published. {MQTT_PAYLOAD}")
led.value(1)
time.sleep(1)
led.value(0)
time.sleep(1)
except Exception as e:
print("MQTT Error:", e)
client.disconnect()
break
MQTT Broker는 구성하기 귀찮은것도 있고 안정적인걸 쓰고 싶어서 HIVEMQ에서 무료로 제공하는 Broker를 사용헀다.
HiveMQ Cloud
console.hivemq.cloud

아주 잘되는 걸 볼 수 있다. (timestamp code 빼먹고 해서 timestamp 업데이트 안되고 있는데 위에 코드는 고쳐놨음...)
이제 GPIO 받는 HW 부분을 만능기판에 할지 PCB 뜰지 고민할 시간이다.
금액을 보니까 PCB 뜨는거랑 가격차이가 별로 없어서 고민이 된다.
(PCB 하고 싶은데 해본적이 없어서 망할까봐 고민....)
'hw' 카테고리의 다른 글
| 납땜 세트 구매하기 (1) | 2025.07.22 |
|---|---|
| 구조물 설계 (1) | 2025.07.21 |