๐ AWS S3 Bucket ์์ ๊ฐ์ ธ์จ Contents ๊ฐ์ผ๋ก์ LED ์ ์ด
1. AWS S3 Bucket ์ผ๋ก์ ์ ๊ทผ์ ์ํ ์ด๊ธฐ ์ค์
++ Boto3 SDK ์ค์
--> https://alim11.tistory.com/398
[Data Processing] Boto3 SDK๋ฅผ ํ์ฉํ ๋ฐ์ดํฐ ์ ๋ก๋ ์๋ํ (Forward AWS S3 Bucket)
๐ธ Boto3 SDK๋ฅผ ํ์ฉํ ๋ฐ์ดํฐ ์ ๋ก๋ ์๋ํ (Forward AWS S3 Bucket) 1. pip ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ์ฌ boto3 ์ค์น !pip install boto3 ++ boto3 ๋? boto3๋ Amazon Web Services (AWS)์ ์ํธ์์ฉํ๊ธฐ ์ํ ์คํ ์์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ
alim11.tistory.com
++ AWS ๊ณ์ ๋ฐ ๋ฆฌ์ ์ค์
--> https://alim11.tistory.com/423
[AWS] AWS S3 Bucket ์ ํ์ผ Contents ์ฝ์ด์ค๊ธฐ
๐ณ AWS S3 Bucket ์ ํ์ผ Contents๋ฅผ ์ฝ์ด์ค๊ธฐ ์ํ Python Script 1. pip ๋ช ๋ น์ด๋ฅผ ํตํด Boto3 ๋ค์ด๋ก๋ !pip install boto3 ++ Boto3 ๊ฐ ๋ฌด์์ธ์ง ๊ถ๊ธํ๋ค๋ฉด? --> https://alim11.tistory.com/398 [Data Processing] Boto3 SDK๋ฅผ ํ์ฉ
alim11.tistory.com

2. AWS ์ ๊ทผ ์ค๋น ์๋ฃ ํ GPIO ์ค์ ์ด๊ธฐํ๋ฅผ ์ํ ์ฝ๋ ์์ฑ

# GPIO ์ค์ ์ด๊ธฐํ
GPIO.setmode(GPIO.BCM)
GPIO.setup(20, GPIO.OUT) # ํ 20์ ์ฐ๊ฒฐ๋ LED
GPIO.setup(21, GPIO.OUT) # ํ 21์ ์ฐ๊ฒฐ๋ LED
p20 = GPIO.PWM(20, 50) # ํ 20์ฉ PWM ๊ฐ์ฒด ์์ฑ
p21 = GPIO.PWM(21, 50) # ํ 21์ฉ PWM ๊ฐ์ฒด ์์ฑ

3. ์ํฉ๋ณ LED ์ ๋ฐ ์ ์ด๋ฅผ ์ํ ์ฝ๋ ์์ฑ
# ์ ํํ LED๋ฅผ ์ผ๊ธฐ ์ ์ ๋ LED๋ฅผ ๋๋๋ค.
p20.stop()
p21.stop()
try:
ใ
คใ
ค# ํ์ผ ๋ด์ฉ์ ํ ๋ฒ ์ฝ๊ธฐ
ใ
คใ
คresponse = s3.get_object(Bucket=bucket_name, Key=file_key)
ใ
คใ
คcontent = response['Body'].read().decode('utf-8')
ใ
คใ
คvalue = int(content.strip())
ใ
คใ
ค# ์ฝ์ ๊ฐ์ ๋ฐ๋ผ ์ฒ๋ฆฌ
ใ
คใ
คif value == 0:
ใ
คใ
คใ
คใ
คprint("ํ์ผ ๋ด์ฉ:", content)
ใ
คใ
คใ
คใ
คprint("์ํธ")
ใ
คใ
คใ
คใ
คp20.start(0)
ใ
คใ
คใ
คใ
คfor _ in range(5): # ๋ฃจํ๋ฅผ 5๋ฒ ๋ฐ๋ณต
ใ
คใ
คใ
คใ
คใ
คใ
คfor dc in range(0, 101, 5):
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คp20.ChangeDutyCycle(dc)
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คtime.sleep(0.05)
ใ
คใ
คใ
คใ
คใ
คใ
คfor dc in range(100, -1, -5):
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คp20.ChangeDutyCycle(dc)
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คtime.sleep(0.05)
ใ
คใ
คใ
คใ
คp20.stop() # 5ํ ๋ฐ๋ณต ํ LED๋ฅผ ๋
ใ
คใ
คelif value == 1:
ใ
คใ
คใ
คใ
คprint("ํ์ผ ๋ด์ฉ:", content)
ใ
คใ
คใ
คใ
คprint("๊ฒฝ๊ณ ")
ใ
คใ
คใ
คใ
คp21.start(0)
ใ
คใ
คใ
คใ
คfor _ in range(5): # ๋ฃจํ๋ฅผ 5๋ฒ ๋ฐ๋ณต
ใ
คใ
คใ
คใ
คใ
คใ
คfor dc in range(0, 101, 5):
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คp21.ChangeDutyCycle(dc)
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คtime.sleep(0.05)
ใ
คใ
คใ
คใ
คใ
คใ
คfor dc in range(100, -1, -5):
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คp21.ChangeDutyCycle(dc)
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คtime.sleep(0.05)
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คp21.stop() # 5ํ ๋ฐ๋ณต ํ LED๋ฅผ ๋
ใ
คใ
คelse:
ใ
คใ
คใ
คใ
คprint("์๋ชป๋ ๊ฐ")
except Exception as e:
ใ
คprint("ํ์ผ ์ฝ๊ธฐ ์ค๋ฅ:", e)
except KeyboardInterrupt:
ใ
คpass
++ ์ฝ๋ ์ค๋ช ์์ธ
์ฝ๋ | ์ค๋ช |
p20.stop() p21.stop() |
์ฝ๋๊ฐ ์คํ๋๊ธฐ ์ stop() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ GPIO ํ p20์ p21์ ์ฐ๊ฒฐ๋ LED๋ฅผ ๋๋ ์ฝ๋ |
response = s3.get_object (Bucket=bucket_name, Key=file_key) |
AWS S3 ๋ฒํท์์ ์ง์ ๋ ํค(file_key)์ ์๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ค๋ ์ฝ๋ |
content = response['Body'] .read().decode('utf-8') |
S3์์ ์ฝ์ ํ์ผ์ ๋ด์ฉ์UTF-8 ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด๋ก ์ฝ์ด์ค๋ ์ฝ๋ |
value = int(content.strip()) | ํ์ผ ๋ด์ฉ์ด ๋ฌธ์์ด ํํ์ผ ๊ฒ์ผ๋ก ๊ฐ์ ํ๊ณ , .strip() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋์ ๊ณต๋ฐฑ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ ํ ์ ์๋ก ๋ณํํ๋ ์ฝ๋ |
โ ์ฝ์ด์จ ํ์ผ ๋ด์ฉ์ด 0์ผ ๊ฒฝ์ฐ
for _ in range(5): # ๋ฃจํ๋ฅผ 5๋ฒ ๋ฐ๋ณต
ใ
คใ
คใ
คใ
คใ
คใ
คfor dc in range(0, 101, 5):
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คp20.ChangeDutyCycle(dc)
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คtime.sleep(0.05)
ใ
คใ
คใ
คใ
คใ
คใ
คfor dc in range(100, -1, -5):
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คp20.ChangeDutyCycle(dc)
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คtime.sleep(0.05)
ใ
คใ
คใ
คใ
คp20.stop() # 5ํ ๋ฐ๋ณต ํ LED๋ฅผ ๋
์ฝ๋ | ์ค๋ช |
for _ in range(5): | ํ๋จ์ ๋ฃจํ๋ฅผ ์ด 5๋ฒ ๋ฐ๋ณต |
for dc in range(0, 101, 5): | LED ๋ฐ๊ธฐ(= dc)๋ฅผ 0๋ถํฐ 100๊น์ง 5์ฉ ์ฆ๊ฐ |
p20.ChangeDutyCycle(dc) | hangeDutyCycle() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ PWM (Pulse Width Modulation)์ ํตํด GPIO p20 ํ์ ์ฐ๊ฒฐ๋ ๋ น์ LED ๋ฐ๊ธฐ ๋ณ๊ฒฝ |
time.sleep(0.05) | LED์ ๋ฐ๊ธฐ๊ฐ ๋ณ๊ฒฝ๋ ํ 0.05์ด ๋์ ๋๊ธฐ |
for dc in range(100, -1, -5): | LED์ ๋ฐ๊ธฐ๋ฅผ 100๋ถํฐ 0๊น์ง 5์ฉ ๊ฐ์์ํค๋ฉฐ ๋ฐ๋ณต |
p20.stop() | stop() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ LED๋ฅผ ๋ |
โ ์ฝ์ด์จ ํ์ผ ๋ด์ฉ์ด 1์ผ ๊ฒฝ์ฐ
์ฝ๋ | ์ค๋ช |
for _ in range(5): | ํ๋จ์ ๋ฃจํ๋ฅผ ์ด 5๋ฒ ๋ฐ๋ณต |
for dc in range(0, 101, 5): | LED ๋ฐ๊ธฐ(= dc)๋ฅผ 0๋ถํฐ 100๊น์ง 5์ฉ ์ฆ๊ฐ |
p21.ChangeDutyCycle(dc) | hangeDutyCycle() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ PWM (Pulse Width Modulation)์ ํตํด GPIO p21 ํ์ ์ฐ๊ฒฐ๋ ์ ์ LED ๋ฐ๊ธฐ ๋ณ๊ฒฝ |
time.sleep(0.05) | LED์ ๋ฐ๊ธฐ๊ฐ ๋ณ๊ฒฝ๋ ํ 0.05์ด ๋์ ๋๊ธฐ |
for dc in range(100, -1, -5): | LED์ ๋ฐ๊ธฐ๋ฅผ 100๋ถํฐ 0๊น์ง 5์ฉ ๊ฐ์์ํค๋ฉฐ ๋ฐ๋ณต |
p21.stop() | stop() ๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ LED๋ฅผ ๋ |
โ ์์ธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ
์ฝ๋ | ์ค๋ช |
except Exception as e: | ์์ธ ๊ฐ์ฒด๋ฅผ e์ ํ ๋นํ์ฌ ํ์ผ ์ฝ๊ธฐ ์ค๋ฅ ๋ฐ์ ์ ์ด์ ๊ดํ ์ ๋ณด ์ถ๋ ฅ |
except KeyboardInterrupt: | KeyboardInterrupt ์์ธ๊ฐ ๋ฐ์ํ ๊ฒฝ์ฐ ์๋ฌด ์์ ์ ํ์ง ์๊ณ ๊ทธ๋ฅ ์ง๋๊ฐ๋๋ก ์ค์ |

4. LED๋ฅผ ๋ชจ๋ ์ฌ์ฉํ ํ GPIO ์ ๋ฆฌ๋ฅผ ์ํ ์ฝ๋ ์์ฑ
# GPIO ์ ๋ฆฌ
GPIO.cleanup()

5. ์ฝ๋ ์คํ์ ์ํด Raspberry Pi ํฐ๋ฏธ๋๋ก ์ ์ --> ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด Python ํ์ผ ์คํ
~$ Python [์คํํ ํ์ผ๋ช
].py

++ ์์ง Raspberry Pi ์ด๊ธฐ ์ธํ ์ด ์๋ฃ๋์ง ์์๋ค๋ฉด?
--> https://alim11.tistory.com/375
[Raspberry Pi] ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด(Raspberry Pi) ์ด๊ธฐ ์ธํ ๋ฐฉ๋ฒ
๐ด ๋ผ์ฆ๋ฒ ๋ฆฌ ํ์ด(Raspberry Pi) ์ด๊ธฐ ์ธํ ๋ฐฉ๋ฒ 1. ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด4 ๋ชจ๋ธB(4GB)์ ๋ฐฉ์ดํ ๋ถ์ฐฉํ๊ธฐ ์ฐ์ธก์ด ๋ฐฉ์ดํ, ์ข์ธก์ด ๋ผ์ฆ๋ฒ ๋ฆฌํ์ด4 ๋ชจ๋ธB โ ์ฐ์ธก์ด ๋ถ์ฐฉ ์๋ฃ๋ ์ฌ์ง! โป ๋ฐฉ์ดํ์ด๋? ๋ฐฉ์ดํ์
alim11.tistory.com

6. Contents ๊ฐ์ด 1์ธ ๊ฒฝ์ฐ ์ ์ LED๊ฐ ์ ์์ ์ผ๋ก ์ ๋ฉธํ๋ ๊ฒ์ ํ์ธ



์ข์ธก๋ถํฐ
์ฝ๋ ์คํ ์ --> ์ฝ๋ ์คํ ์งํ --> LED๊ฐ ์ ๋ฉธํ๋ ๋ชจ์ต
๐ ์ํฉ๋ณ ์ค์ LED ๋์ ์์
A) ๋ณด์ด์คํผ์ฑ์ผ ํ๋ฅ ์ด ๋์ ๊ฒฝ์ฐ(Contents == 1)
B) ๋ณด์ด์คํผ์ฑ์ผ ํ๋ฅ ์ด ๋ฎ์ ๊ฒฝ์ฐ(Contents == 0)
๐ ์์ฑํ ์ฝ๋ ์ ๋ฌธ
import boto3
import RPi.GPIO as GPIO
import time
# AWS S3 ์๊ฒฉ ์ฆ๋ช
๋ฐ ํ์ผ ์ ๋ณด
aws_access_key = 'AWS ์ก์ธ์ค ํค ID'
aws_secret_key = 'AWS ์ํฌ๋ฆฟ ์ก์ธ์ค ํค'
bucket_name = '๋ฒํท๋ช
'
file_key = 'ํ์ผ๋ช
๋ฐ ํ์ผ ๊ฒฝ๋ก'
# AWS S3 ํด๋ผ์ด์ธํธ ์ด๊ธฐํ
s3 = boto3.client(
ใ
คใ
ค's3',
ใ
คใ
คaws_access_key_id=aws_access_key,
ใ
คใ
คaws_secret_access_key=aws_secret_key
)
# GPIO ์ค์ ์ด๊ธฐํ
GPIO.setmode(GPIO.BCM)
GPIO.setup(20, GPIO.OUT) # ํ 20์ ์ฐ๊ฒฐ๋ LED
GPIO.setup(21, GPIO.OUT) # ํ 21์ ์ฐ๊ฒฐ๋ LED
p20 = GPIO.PWM(20, 50) # ํ 20์ฉ PWM ๊ฐ์ฒด ์์ฑ
p21 = GPIO.PWM(21, 50) # ํ 21์ฉ PWM ๊ฐ์ฒด ์์ฑ
# ์ ํํ LED๋ฅผ ์ผ๊ธฐ ์ ์ ๋ LED๋ฅผ ๋๋๋ค.
p20.stop()
p21.stop()
try:
ใ
คใ
ค# ํ์ผ ๋ด์ฉ์ ํ ๋ฒ ์ฝ๊ธฐ
ใ
คใ
คresponse = s3.get_object(Bucket=bucket_name, Key=file_key)
ใ
คใ
คcontent = response['Body'].read().decode('utf-8')
ใ
คใ
คvalue = int(content.strip())
ใ
คใ
ค# ์ฝ์ ๊ฐ์ ๋ฐ๋ผ ์ฒ๋ฆฌ
ใ
คใ
คif value == 0:
ใ
คใ
คใ
คใ
คprint("ํ์ผ ๋ด์ฉ:", content)
ใ
คใ
คใ
คใ
คprint("์ํธ")
ใ
คใ
คใ
คใ
คp20.start(0)
ใ
คใ
คใ
คใ
คfor _ in range(5): # ๋ฃจํ๋ฅผ 5๋ฒ ๋ฐ๋ณต
ใ
คใ
คใ
คใ
คใ
คใ
คfor dc in range(0, 101, 5):
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คp20.ChangeDutyCycle(dc)
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คtime.sleep(0.05)
ใ
คใ
คใ
คใ
คใ
คใ
คfor dc in range(100, -1, -5):
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คp20.ChangeDutyCycle(dc)
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คtime.sleep(0.05)
ใ
คใ
คใ
คใ
คp20.stop() # 5ํ ๋ฐ๋ณต ํ LED๋ฅผ ๋
ใ
คใ
คelif value == 1:
ใ
คใ
คใ
คใ
คprint("ํ์ผ ๋ด์ฉ:", content)
ใ
คใ
คใ
คใ
คprint("๊ฒฝ๊ณ ")
ใ
คใ
คใ
คใ
คp21.start(0)
ใ
คใ
คใ
คใ
คfor _ in range(5): # ๋ฃจํ๋ฅผ 5๋ฒ ๋ฐ๋ณต
ใ
คใ
คใ
คใ
คใ
คใ
คfor dc in range(0, 101, 5):
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คp21.ChangeDutyCycle(dc)
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คtime.sleep(0.05)
ใ
คใ
คใ
คใ
คใ
คใ
คfor dc in range(100, -1, -5):
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คp21.ChangeDutyCycle(dc)
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คtime.sleep(0.05)
ใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คใ
คp21.stop() # 5ํ ๋ฐ๋ณต ํ LED๋ฅผ ๋
ใ
คใ
คelse:
ใ
คใ
คใ
คใ
คprint("์๋ชป๋ ๊ฐ")
except Exception as e:
ใ
คprint("ํ์ผ ์ฝ๊ธฐ ์ค๋ฅ:", e)
except KeyboardInterrupt:
ใ
คpass
# GPIO ์ ๋ฆฌ
GPIO.cleanup()