메인
home
소프트웨어
home
🌕

2-5. 피코 IoT

led On/off Website

위 사이트 전체 코드 확인 : https://codepen.io/rjiufrjq-the-bashful/pen/RNbwmbe
파이어베이스 데이터 베이스

피코측 코드

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)
Python
복사

동작 프로세스

모터로 확장

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.")
Python
복사

pico & Web 통신 개념

연결 개념도
데이터베이스 와 HTML 웹페이지와 통신 화면
라즈베리파이 피코와 데이터베이스(파이어베이스)

web 통신을 활용한 다양한 프로젝트 사례