led On/off Website

https://codepen.io/rjiufrjq-the-bashful/pen/RNbwmbe

image.png

https://test231124-1f37e-default-rtdb.firebaseio.com/

피코측 코드

main.py

from machine import Pin, I2C
import network
import time
import urequests
import random

# 마이크로컨트롤러의 핀을 제어하기 위해 Pin 클래스를 불러옵니다
from machine import Pin
led = Pin("LED", Pin.OUT)

# WLAN 객체를 생성하고, 무선 LAN을 활성화합니다
wlan = network.WLAN(network.STA_IF)
wlan.active(True)

# 와이파이에 연결합니다
if not wlan.isconnected():
    #wlan.connect("wonking", "77777777")
    wlan.connect("CNR_L500W_022234", "#234567!")
    print("Waiting for Wi-Fi connection", end="...")
    while not wlan.isconnected():
        print(".", end="")
        time.sleep(1)
else:
    print(wlan.ifconfig())
    print("WiFi is Connected")

# Firebase의 Realtime Database와 연결하기 위한 URL을 설정합니다
url = "<https://test231124-1f37e-default-rtdb.firebaseio.com/>"

# 초기 상태를 설정하여 Firebase에 업데이트합니다
초기값 = {'led': 1,}
urequests.patch(url+"/led.json", json = 초기값).json()

# Firebase에서 데이터를 가져오고, 이를 JSON 형태로 변환합니다
response = urequests.get(url+"/led.json").json()
print(response)
print(response['led'])

# 무한 루프를 실행하면서 Firebase에서 데이터를 계속 가져와서 LED와 팬의 상태를 제어합니다
while True:
    response = urequests.get(url+"/led.json").json()
    time.sleep(0.1)
    print("led:", response['led'])

    # 가져온 데이터에 따라서 LED 핀의 출력 값을 변경합니다
    if (response['led'] == 1) :
        led.value(1)
    else :
        led.value(0)

동작 프로세스

image.png

모터로 확장

main.py

from machine import Pin, PWM
import network
import time
import urequests

# 서보모터 핀과 초기화
servo = PWM(Pin(3))
servo.freq(50)  # 서보모터 주파수 50Hz 설정

# 서보모터 최소 및 최대 듀티 사이클
min_duty = 1638   # 0도 (1ms 펄스 폭)
max_duty = 8192   # 180도 (2ms 펄스 폭)

def angle_to_duty(angle):
    # 각도(0~180)를 듀티 사이클로 변환
    return int(min_duty + (max_duty - min_duty) * angle / 180)

# 초기 각도 설정 (90도)
current_angle = 90
servo.duty_u16(angle_to_duty(current_angle))
time.sleep(1)  # 초기화 지연

# LED 핀 초기화
led = Pin("LED", Pin.OUT)

# WLAN 설정 및 연결
wlan = network.WLAN(network.STA_IF)
wlan.active(True)

if not wlan.isconnected():
    wlan.connect("CNR_L500W_022234", "#234567!")
    #wlan.connect("wonking", "77777777")
    print("Waiting for Wi-Fi connection", end="...")
    while not wlan.isconnected():
        print(".", end="")
        time.sleep(1)
else:
    print(wlan.ifconfig())
    print("WiFi is Connected")

# Firebase URL
url = "<https://test231124-1f37e-default-rtdb.firebaseio.com/>"

# 초기 데이터 Firebase에 설정
initial_data = {'led': 1}
urequests.patch(url + "/led.json", json=initial_data).json()

# 무한 루프
try:
    while True:
        # Firebase에서 데이터 가져오기
        response = urequests.get(url + "/led.json").json()
        led_status = response['led']
        print("led:", led_status)

        if led_status == 1:
            # LED 신호가 1인 경우 +20도
            print(f"Servo angle increased to:", 0)
            servo.duty_u16(angle_to_duty(0))
        elif led_status == 0:
            print(f"Servo angle decreased to:", 179)
            servo.duty_u16(angle_to_duty(179))

        # LED 상태 제어
        led.value(led_status)

        # 짧은 지연
        time.sleep(1)

except KeyboardInterrupt:
    # 종료 시 서보모터 비활성화
    servo.deinit()
    print("Program stopped.")

pico & Web 통신 개념