지금까지 페이스북에 글을 게시하면 라즈베리파이에서 수신하여 출력하는 프로그램을 만들었다.
이번에는 라즈베리파이에서 수신할 때 LED를 제어한는 기능을 구현한다.
참고 https://learn.adafruit.com/neopixels-on-raspberry-pi/overview
1. Wiring
라즈베리파이의 GPIO는 3.3V이다.
네오픽셀 LED는 5V에서 동작하므로, 이를 바꾸어줄 레벨쉬프터가 필요하다.
사용 재료
[YwRobot] 3.3V - 5V 전압 변환, 레벨 변환, 로직레벨 컨버터 (메카솔루션)
Adafruit 네오픽셀 LED
라즈베리파이의 GPIO는 아래 사진과 같다.
사진 - https://developer.microsoft.com/ko-kr/windows/iot/Docs/PinMappingsRPi
라즈베리파이에서 사용할 핀은 3.3V핀, GPIO18핀, GND핀이다.
외부 5V전원을 사용하는데, 라즈베리파이의 출력 전력이 부족할 상황을 예방하기 위해서이다.
네오픽셀을 여러개 사용하지 않는다면 라즈베리파이의 5V 출력핀을 사용해도 될 듯하다.
라즈베리파이, 레벨컨버터, 네오픽셀은 아래와 같이 연결한다.
라즈베리파이 |
Level Converter |
5V power |
Level Converter |
NeoPixel |
||
3.3v |
LV |
POWER |
HV |
5V |
||
GND |
GND |
GND |
GND |
GND |
||
gpio18 |
LV1 |
HV1 |
Din |
2. 네오픽셀 라이브러리 설치
라즈베리파이에 Adafruit의 네오픽셀 라이브러리를 설치해야한다.
아래의 명령어로 라이브러리를 깃허브에서 받아온다.
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install build-essential python-dev git scons swig
$ git clone https://github.com/jgarff/rpi_ws281x.git
아래 명령어로 rpi_ws281x디렉토리로 이동하여 라이브러리를 컴파일한다
$ cd rpi_ws281x
$ scons
아래 명령어로 python 디렉토리로 이동하여 라이브러리를 설치한다.
$ cd python
$ sudo python setup.py install
여기까지 완료하면 라이브러리가 성공적으로 설치된다.
예제를 실행하기 위해 examples 폴더로 이동한다.
$ cd examples
예제 파일을 열고 코드를 수정한다.
$ sudo vi strandtest.py
LED_COUNT = 16으로 되어있는데 사용하는 LED 개수로 수정한다.
예제 파일을 실행한다.
$ sudo python strandtest.py
실행 후 문제가 없다면, 네오픽셀LED가 빛을 내는 것을 볼 수 있을 것이다.
3. 라즈베리파이 설정
하지만 내가 했을 때는 네오픽셀이 간헐적으로 깜빡일 뿐 제대로 제어되지 않았다.
오랜 구글링 끝에 찾아낸 해결 방법
다음 명령어로 config파일을 열고 변경한다.
$sudo vi /boot/config.txt
아래와 같이 수정한다.
# Enable audio (loads snd_bcm2835)
#dtparam=audio=on
그리고 아래 두개의 문장을 추가한다.
나는 첫번째 문장은 원래 있어서 두번째 문장만 추가했다.
hdmi_force_hotplug=1
hdmi_force_edid_audio=1
*****아마 위의 config 수정 안하고 이것만 해도 될듯!
아래 명령어로 블랙리스트 설정에 들어간다.
$ sudo vi /etc/modprobe.d/raspi-blacklist.conf
아래 문장을 추가한다.
blacklist snd_bcm2835
이후 재부팅을 하고 다시 strandtest.py를 실행하면 제대로 동작한다.
라즈베리파이 오디오에서 pcm을 사용하기 때문에 오디오를 막아야 pcm포트가 사용가능한듯하다.
따라서................!!!!!! 스마트 램프 프로젝트를 위해선 LED제어와 소리 입출력이 필요한데 이 둘을 동시에 할 수 없다는것!!!!!!!!!!!!!
어쩔수없이 라즈베리파이를 두개 사용해서 하나로 LED제어 하나로 소리제어를 하기로했다.........생각보다 안되는게 참 많다ㅠㅠ
4. 프로젝트에 적용
해당 예제 파일을 프로젝트에 적용할 차례
프로젝트를 수행중인 Smartlamp_pi2디렉토리로 먼저 이동한다.
파이썬을 자바스크립트에서 실행하기 위해 아래 모듈을 설치한다.
$ sudo npm install python-shell --save
index.js를 수정한다.
$ sudo vi index.js
네오픽셀 LED를 제어하는 걸 엄청 간하게 생각하고있었는데..
아두이노로 해본적이 있었는데 그땐 진짜 쉬웠다
근데 라즈베리파이로 하려니까 진짜... 안되는게 왤케많은지ㅠㅠㅠ
라즈베리파이 GPIO로 제어, 라즈베리파이 + 아두이노 UART통신으로 제어, 라즈베리파이에 아두이노 IDE올려서 제어, 라즈베리파이+ 아두이노 블루투스통신으로 제어 등등.....
이것저것 다해봤다ㅠㅠ 결국 해결하긴했지만...너무힘들었다.
'프로젝트 > Smart Lamp - 라즈베리파이' 카테고리의 다른 글
8. IFTTT Maker 를 트리거로 (0) | 2017.01.08 |
---|---|
7. TTS 출력 (0) | 2017.01.07 |
5. PC 서버와 라즈베리파이 통신 (0) | 2017.01.05 |
4. IFTTT와 서버 연동 (0) | 2017.01.05 |
3. nodejs 서버 구축 - 윈도우&라즈베리파이 (0) | 2017.01.05 |