2016년 9월 22일 목요일

WS2812와 APA102의 차이 비교 (Comparison between WS2812 and APA102)

개별 칼라를 제어할 수 있는 LED strip으로 가장 많이 쓰이는 것이 WS2812B(Adafruit에서는 NeoPixel 이라는 제품명으로 판매)이다. 전원라인(+5V, GND)을 제외하면 단 한개의 신호선으로 수백개의 LED를 제어할 수 있어 매우 편리하다.




하지만 별도의 클럭신호 선 없이 한개의 신호선으로 데이터를 전송하다 보니 타이밍에 매우 민감하다. 아두이노용 WS2812 라이브러리(Adafruit_NeoPixel 등) 소스를 열어 본 사람들은 알겠지만 데이터를 전송하는 부분 코드는 타이밍을 정밀하게 맞춰주기 위해 전송중에는 인터럽트도 disable시켜 놓고 어셈블리 코드로 하드코딩 되어 있다.



최대 800KHz의 속도로 데이터를 전송하는데 만일 128개의 LED를 구동한다고 하면 한번 색을 변경하는데 약 4ms 정도의 시간이 걸리게 된다. 즉 이 시간동안은 프로세서가 다른 작업은 커녕 심지어 인터럽트도 안 걸리고 LED에 데이터를 보내야만 한다.
이는 특히 라즈베리 파이같이 OS를 사용하는 경우 매우 치명적이다. 물론 라즈베리 파이에서도 WS2812를 사용할 수 있게 DMA를 사용해 데이터를 전송하는 라이브러리가 나와 있긴 하지만 이런 라이브러리는 portability가 거의 없다. 즉 라이브러리를 가져다 다른데 포팅하는것이 매우 힘들다.

그래서 이런 문제를 해결한 비슷한 종류의 LED가 몇 종류 나와 있다. 그 중 하나가 APA102이다.




우선 WS2812와 가장 큰 차이점은 전원선(+5V, GND)외에 두개의 신호선(Data, Clk)이 있다는 것이다. (WS2812는 1개의 신호선(Data)만 있음)








그래서 SPI 버스의 MOSI, SCK 에 Data, Clk를 연결해서 SPI 방식으로 데이터를 보내주면 된다. 실제 데이터 전송은 SPI가 담당하기 때문에 프로세서가 데이터를 전송하는 동안 기다릴 필요도 없고 타이밍을 신경 쓸 필요도 없기 때문에 라이브러리 코드도 훨씬 간단해진다.

데이터 전송도 SPI 클럭 기준으로 이루어지기 때문에 16MHz의 속도로도 충분히 전송이 가능하다. (WS2812에 비해 20배 이상의 속도) 그래서 POV같이 LED 색이 빠른 속도로 바뀌어야 하는 경우 WS2812는 전환속도가 느려 적합하지 않지만 APA102는 충분히 빠르게 색을 바꿔줄 수 있다.

라즈베리 파이에서도 DMA를 사용하지 않아도 충분하기 때문에 순전히 파이선으로 만든 라이브러리도 있다.

https://github.com/tinue/APA102_Pi







2016년 9월 7일 수요일

micro:bit 설정하기 (Set up micro:bit)

먼저 스마트폰의 micro:bit 엡을 실행시킨다.


'Connections' 버튼을 선택한다.


기존에 페어링 된 micro:bit이 있으면 가장 최근에 사용된 micro:bit의 이름이 'Most recently used micro:bit' 에 나타날텐데 여기서는 처음 실행했기 때문에 빈 칸이다. 여기서 아래쪽의 노란색 'Pair a new micro:bit'을 선택해 준다.


그러면 어떻게 해야 하는지 알려주는 위와 같은 화면이 나온다.  위의 그림처럼 micro:bit의 'A', 'B' 버튼을 동시에 누르고 있는 상태에서 'RESET' 버튼을 눌렀다가 떼 준다. 그리고 화면에서 녹색 'Next' 버튼을 누른다.


위와 같은 화면이 나오게 된다. 저 위의 가로, 세로 5칸씩의 흰색 상자에 micro:bit 보드에 불빛과 동일하게 코드를 넣어주면 된다.


A, B 버튼을 누르고 있는 상태에서 리셋 버튼을 눌렀다가 놓으면 micro:bit 보드에 위와 같이 불빛이 들어오게 된다. 저 불빛 모양은 랜덤이라 매번 바뀐다.


 micro:bit에  불빛이 켜진 모양대로 흰색 박스를 빨간색으로 만들어 주고 'Next' 버튼을 눌러준다.

 

이제 페어링 할 준비가 된 것이다. 'Next' 버튼을 누르면 스마트폰과 micro:bit간에 페어링이 진행된다.


먼저 micro:bit을 검색한다.
 

원하는 micro:bit을 찾으면 페어링을 위한 코드를 물어본다. 여기서 micro:bit의 'A' 버튼을 누르면 6자리 숫자 코드가 LED에 표시되게 되는데 그 숫자를 넣어주고'Pair' 버튼을 눌러준다.


 위의 동영상을 참조하면 된다.




페어링이 성공화면 micro:bit와 스마트폰 화면은 각각 위의 사긴과 같이 바뀌게 된다.


WiFi & Bluetooth를 모두 지원하는 ESP-3212 발표

ESP-8266을 만든 Espressif사에서 ESP-3212 모듈을 새로 발표했다.

위의 사진처럼 크기나 외형은 ESP-8266과 별 차이가 없지만 가장 큰 차이점은 WiFi뿐 아니고 Bluetooth까지 포함되었다는 점이다.

내부 구조는 위의 그림과 같다.

프로세서는 Xtensa의 32-bit LX6 듀얼코어를 사용하고 있고 롬은 448KB, SRAM은 520KB이고 그와 별도로 RTC에 16KB의 SRAM이 더 들어 있다.

블루투스는 Bluetooth v4.2 BR/EDR, BLE를 모두 지원하고 별도의 외부 앰프 없이 class 1/2/3가 모두 가능하다.

Peripheral도 매우 다양하게 가지고 있다. 특히 ESP-8266에서 가장 아쉬웠던 1채널의 ADC가 18채널로 확장되었고 8-bit DAC도 2채널이 추가되었다. 그리고 심지어 CAN2.0까지 지원해 매우 저가의 OBD-II 장비도 쉽게 구현이 가능하다.
  •       • 12-bit SAR ADC up to 18 channels
  •       • 2 × 8-bit D/A converters
  •       • 10 × touch sensors
  •       • Temperature sensor
  •       • 4 × SPI, 2 × I2S, 2 × I2C, 3 × UART
  •       • 1 host (SD/eMMC/SDIO), 1 slave (SDIO/SPI)
  •       • Ethernet MAC interface with dedicated DMA and IEEE 1588 suppor
  •       • CAN 2.0
  •       • IR (TX/RX)
  •       • Motor PWM, LED PWM up to 16 channels
  •       • Hall sensor
  •       • Ultra low power analog pre-amplifier
IoT 장비에 가장 중요한 요소중에 하나인 보안 문제를 위해서도 다양한 하드웨어 가속기를 추가했다.
 
  • AES-HASH(SHA-2) library - RSA-ECC-RNG



이 정도면 IoT 디바이스를 위한 프로세서 모듈로는 거의 완전체에 가까워 진거 같다.

Pinout은 다음과 같다.

현재 SeeedStudio에서 개당 $6.95에 판매되고 있고 알리에서는 아직 올라오지 않았는데 조만간 알리에서 판매가 시작되면 더 저렴한 가격에 구할 수 있을거 같다.

https://www.seeedstudio.com/ESP3212-Wifi-Bluetooth-Combo-Module-p-2706.html