CS/라즈베리파이
라즈베리 파이 - 12. 블루투스 LE(Low Energy) 스마트 조명제어
erase-jeong
2023. 12. 10. 13:52
목표 : 블루투스를 이용하여 LED를 제어해 스마트 조명을 만들어본다.
1. 필요 부품
2. 회로도
3. 블루투스 설정하기
4. 전체 코드
import serial
import RPi.GPIO as GPIO
bleSerial=serial.Serial("/dev/ttyS0", baudrate=9600, timeout=1.0)
greenLed=16 #녹색 LED 연결 핀 번호
blueLed=20 #파란색 LED 연결 핀 번호
redLed=21 #빨간색 LED 연결 핀 번호
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(greenLed, GPIO.OUT) #녹색 LED 핀을 출력 핀으로 설정
GPIO.setup(blueLed,GPIO.OUT) #파란색 LED 핀을 출력 핀으로 설정
GPIO.setup(redLed,GPIO.OUT) #빨간색 LED 핀을 출력 핀으로 설정
try:
while True: #코드를 계속 반복 실행
data=bleSerial.readline() #BLE 모듈에서 데이터 수신
data=data.decode() #수신된 데이터 디코딩
#if문으로 수신된 데이터에 따라 LED 제어
#녹색 LED 켜기
if data.fine("green_on")>=0:
print(" ok green on ")
GPIO.output(greenLed, 1)
#녹색 LED 끄기
elif data.find(" green_off")>=0:
print(" ok green off ")
GPIO.output(greenLed,0)
#파란색 LED 켜기
elif data.find("blue_on")>=0:
print(" ok blue on ")
GPIO.output(blueLed,1)
#파란색 LED 끄기
elif data.find("blue_off")>=0:
print(" ok blue off")
GPIO.output(blueLed,0)
#빨간색 LED 켜기
elif data.find("red_on")>=0:
print(" ok red on ")
GPIO.output(redLed,1)
#빨간색 LED 끄기
elif data.find("red_off")>=0:
print(" ok red off ")
GPIO.output(redLed, 0)
except KeyboardInterrupt: #키보드 인터럽트
#키보드 인터럽트 발생 시 코드 중단
pass
bleSerial.close()
import serial
import RPi.GPIO as GPIO
bleSerial=serial.Serial("/dev/ttyS0", baudrate=9600, timeout=1.0)
greenLed=16
blueLed=20
redLed=21
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(greenLed, GPIO.OUT)
GPIO.setup(blueLed,GPIO.OUT)
GPIO.setup(redLed,GPIO.OUT)
try:
while True:
data=bleSerial.readline()
data=data.decode()
if data.fine("green_on")>=0:
print(" ok green on ")
GPIO.output(greenLed, 1)
elif data.find(" green_off")>=0:
print(" ok green off ")
GPIO.output(greenLed,0)
elif data.find("blue_on")>=0:
print(" ok blue on ")
GPIO.output(blueLed,1)
elif data.find("blue_off")>=0:
print(" ok blue off")
GPIO.output(blueLed,0)
elif data.find("red_on")>=0:
print(" ok red on ")
GPIO.output(redLed,1)
elif data.find("red_off")>=0:
print(" ok red off ")
GPIO.output(redLed, 0)
except KeyboardInterrupt:
pass
bleSerial.close()
5. 코드해석
1) 라이브러리 import:
import serial
import RPi.GPIO as GPIO
import serial //시리얼 통신을 위한 라이브러리
import RPi.GPIO as GPIO //라즈베리파이 GPIO 핀을 제어하기 위한 라이브러리
2) BLE 시리얼 연결
bleSerial=serial.Serial("/dev/ttyS0", baudrate=9600, timeout=1.0)
- BLE 모듈과 시리얼 통신 연결 설정
- /dev/ttyS0: 시리얼 포트 이름
- baudrate=9600: 통신 속도
- timeout=1.0: 읽기 타임아웃 시간
3) LED 핀 설정
greenLed=16 #녹색 LED 연결 핀 번호
blueLed=20 #파란색 LED 연결 핀 번호
redLed=21 #빨간색 LED 연결 핀 번호
GPIO.setwarnings(False)
- 경고 메시지 숨기기
GPIO.setmode(GPIO.BCM)
- BCM 모드 사용
GPIO.setup(greenLed, GPIO.OUT) #녹색 LED 핀을 출력 핀으로 설정
GPIO.setup(blueLed,GPIO.OUT) #파란색 LED 핀을 출력 핀으로 설정
GPIO.setup(redLed,GPIO.OUT) #빨간색 LED 핀을 출력 핀으로 설정
4) try - catch 문
try:
while True: #코드를 계속 반복 실행
data=bleSerial.readline() #BLE 모듈에서 데이터 수신
data=data.decode() #수신된 데이터 디코딩
#if문으로 수신된 데이터에 따라 LED 제어
#녹색 LED 켜기
if data.fine("green_on")>=0:
print(" ok green on ")
GPIO.output(greenLed, 1)
#녹색 LED 끄기
elif data.find(" green_off")>=0:
print(" ok green off ")
GPIO.output(greenLed,0)
#파란색 LED 켜기
elif data.find("blue_on")>=0:
print(" ok blue on ")
GPIO.output(blueLed,1)
#파란색 LED 끄기
elif data.find("blue_off")>=0:
print(" ok blue off")
GPIO.output(blueLed,0)
#빨간색 LED 켜기
elif data.find("red_on")>=0:
print(" ok red on ")
GPIO.output(redLed,1)
#빨간색 LED 끄기
elif data.find("red_off")>=0:
print(" ok red off ")
GPIO.output(redLed, 0)
except KeyboardInterrupt: #키보드 인터럽트
#키보드 인터럽트 발생 시 코드 중단
pass
5) 정리
bleSerial.close()
bleSerial.close(): 시리얼 통신 종료
- 시리얼 통신 종료
6. 코드 기능
- BLE 모듈로부터 데이터를 수신하여 LED를 켜거나 끕니다.
- BLE 모듈은 앱이나 다른 장치를 통해 제어할 수 있습니다.
7. 참고
- 이 코드는 BCM 모드를 사용하여 Raspberry Pi 핀을 지정합니다.
- BLE 모듈의 연결 정보 (예: 포트 이름, 통신 속도)는 사용하는 모듈에 따라 다를 수 있습니다.
- BLE 모듈로 전송할 데이터는 BLE 모듈의 특성에 따라 달라질 수 있습니다.