https://codepen.io/rjiufrjq-the-bashful/pen/RNbwmbe
위 사이트 전체 코드 확인 : https://codepen.io/rjiufrjq-the-bashful/pen/RNbwmbe
파이어베이스 데이터 베이스
https://test231124-1f37e-default-rtdb.firebaseio.com/
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)
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.")