본문 바로가기
프로젝트

IoT 조명 프로젝트

by 커피하는조이 2023. 3. 23.
728x90
반응형
SMALL

안녕하세요 땜블리 입니다.

라즈베리파이 피코 베이직 트레이닝 보드를 이용한 IoT 조명 프로젝트를 진행 하겠습니다.

베이직 트레이닝 보드는 아래에서 확인이 가능합니다.

https://ttcw.tistory.com/4

 

라즈베리파이 피코 베이직 트레이닝보드 구성

라즈베리파이 피코 보드의 펌웨어실습을 위한 베이직 트레이닝보드를 소개 합니다. 현재 네이버 스마트스토어에서 판매가 진행되고 있습니다. 라즈베리파이 피코 베이직 트레이닝 보드 라즈베

ttcw.tistory.com

 

먼저adafruit IO 에서 Feed를 만듭니다. 가입방법 및 만드는 방법은 adafruit 클라우드를 이용한 식물재배기 프로젝트 1차를 참고 해주시면 됩니다.

https://ttcw.tistory.com/48

 

adafruit 클라우드를 이용한 식물재배기 프로젝트 1차

안녕하세요 땜블리의 공작소에 땜블리 입니다. 라즈베리파이 피코 베이직 트레이닝 보드를 이용한 IoT 식물 재배기 실습을 1차, 2차에 걸쳐 진행 하겠습니다. 1차에서는 adafruit 사의 IO 클라우드

ttcw.tistory.com

 

ws 2812조명 그룹에 피드는 brightness, fullcolor, pow 로 만듭니다.

그리고 데시보드에서 컬러 선택기, 토글 버튼, 슬라이드 를 만들어 줍니다.

 

슬라드더에 min값 과 max 값을 0 ~ 1 변경하고 step size를 0.1씩 변하도록 블럭을 설정 합니다. 

 

반응형

소스코드 

code.py

import time
import ssl
import wifi
import socketpool
import board
import digitalio
import analogio
import adafruit_requests
import adafruit_dht
from adafruit_io.adafruit_io import IO_HTTP, AdafruitIO_RequestError
from secrets import secrets
import neopixel
import pwmio
import adafruit_ssd1306
import busio
import microcontroller
# i2c설정
i2c = busio.I2C(board.GP15, board.GP14)
oled = adafruit_ssd1306.SSD1306_I2C(128, 64, i2c, addr=0x3c)
uart = busio.UART(board.GP16, board.GP17, baudrate=115200)
# 초기화
oled.fill(1)
oled.show()
time.sleep(1)
oled.fill(0)
oled.show()



# LED 개수 설정
num_pixels = 4

# LED 핀 설정
pixels = neopixel.NeoPixel(board.GP13, num_pixels)

wifi.radio.connect(secrets["ssid"],secrets["password"])

aio_username = secrets['aio_username']
aio_key = secrets['aio_key']

pool = socketpool.SocketPool(wifi.radio)
requests = adafruit_requests.Session(pool, ssl.create_default_context())
# Initialize an Adafruit IO HTTP API object
io = IO_HTTP(aio_username, aio_key, requests)
print("connected to io")

def get_feed_value(feed_key):
    try:
        feed = io.get_feed(feed_key)
    except RequestError:
        raise Exception('Feed not found')
    data = io.receive_data(feed_key)
    return data['value']

def set_brightness(brightness):
    """0에서 1 사이의 값을 받아서 밝기를 설정합니다."""
    pixels.brightness = brightness
def parse_color_data(color_string):
    # 예: '#a42323'
    r = int(color_string[1:3], 16)  # 0xA4
    g = int(color_string[3:5], 16)  # 0x23
    b = int(color_string[5:7], 16)  # 0x23
    return (r, g, b)

while True:
    try:
        
        pow_data_feed_key = "ws2812jomyeong.pow"
        pow_data = get_feed_value(pow_data_feed_key)
        print(pow_data)
        
        if pow_data == "ON":
            color_data_feed_key = "ws2812jomyeong.fullcolor"
            color_data = get_feed_value(color_data_feed_key)
            print(color_data)
        
            r, g, b = parse_color_data(color_data)
       
            brightness_data_feed_key = "ws2812jomyeong.brightness"
            brightness_data = get_feed_value(brightness_data_feed_key)        
            print(brightness_data)
            # LED 색상 설정
            pixels.fill((r, g, b))
            set_brightness(float(brightness_data))  
        else:
            pixels.fill((0, 0, 0))
          
        print('R value: {0}, G value: {1}, B value: {2}, brightness value : {3} '.format(r, g, b, brightness_data))
        oled.fill(0)  
        oled.text("R value : ", 0, 0, 1)
        oled.text(str(r), 80, 0,1)
        oled.text("G value: : ", 0, 12,1)
        oled.text(str(g), 80, 12,1)
        oled.text("B value: : ", 0, 22,1)
        oled.text(str(b), 80, 22,1)
        oled.text("bri value: : ", 0, 32,1)
        oled.text(str(brightness_data), 80, 32,1)
        oled.text("pow value: : ", 0, 42,1)
        oled.text(str(pow_data), 80, 42,1)
        oled.show()
                     
        
    # pylint: disable=broad-except
    #  any errors, reset Pico W
    except Exception as e:
        print("Error:\n", str(e))
        print("Resetting microcontroller in 10 seconds")
        #time.sleep(10)
       # microcontroller.reset()
    #  delay
    time.sleep(0.5)
SMALL

secrets.py

secrets.py 코드에서는 공유기 이름과 공유기 비밀번호, Adafruit 이름과 ,Adafruit key를 적어 놓는 곳입니다.

secrets = {
    'ssid' : 'AP_name',
    'password' : 'AP_password',
    'aio_username' : 'Adafruit_username',
    'aio_key' : 'Adafruit_key'
    }

 

동작 결과

 

 

 

728x90
반응형
LIST

댓글