이 소스는 Neofect Smart Pegboard 와 유사한 보드(가칭 Smart PEG)를 위한 펌웨어이다.
Smart PEG는 치매 노인들의 인지력 및 기억력 향상을 돕기 위해 고안되었다고 한다(발주한 곳과 직접 연결되어 있지 않기 때문에 자세한 사정은 나도 잘 모른다).
시스템 구성은 대략 아래 그림과 같으며, 이 소스는 그림에서 보드에 해당한다.
아래 그림은 실제 PCB 사진이다. 10x10 LED를 가지고 있으며 각 LED가 박힌 반대편에는 자석센서가 붙어 있다.
MCU가 ESP32 이기 때문에 esp-idf를 사용하여 작성하였다.
ESP32를 사용한다.
SK6812를 100개 사용한다. 각 유닛은 직렬로 연결되어 있다.
Smart PEG 보드의 인터페이스는 Classic BT 중 SPP profile을 이용하고, 간단한 문법의 명령을 이용하여 동작시킬 수 있다.
- 각 명령은 ’
(
’ 로 시작하고, ’)
’ 로 끝난다. - 괄호 안에 문법은
<command>, <arguments>
이다. <arguments>
는 십진수 혹은 16진수(0x
으로 시작)이며, 0개 이상 이어질 수 있고, 구분자는 콤마(,
) 이다.- 대소문자는 구분되며, 공백문자는 무시된다.
지정한 LED의 색상을 변경한다.
(led_set_pixel, <x>, <y>, <color>)
- x
- X 좌표. 0 ~ 9 사이의 값을 가짐.
- y
- Y 좌표. 0 ~ 9 사이의 값을 가짐.
- color
- 각 8비트의 RGB 값. 예를 들어 0xFF0000 이면 가장 밝은 붉은 색을 뜻함.
지정한 사각형 영역의 LED 색상을 지정한 색으로 변경한다.
(led_fill_rect, <x1>, <y2>, <x2>, <x2>, <color>)
- x1
- X1 좌표. 0 ~ 9 사이의 값을 가짐.
- y1
- Y1 좌표. 0 ~ 9 사이의 값을 가짐.
- x2
- X2 좌표. 0 ~ 9 사이의 값을 가짐.
- y2
- Y2 좌표. 0 ~ 9 사이의 값을 가짐.
- color
- 각 8비트의 RGB 값. 예를 들어 0xFF0000 이면 가장 밝은 붉은 색을 뜻함.
전체 LED의 색상을 지운다.
(led_clear)
LED 메모리 버퍼에 있는 값을 실제 LED에 적용하는
명령이다. (led_set_direct_draw, 0)
명령으로 LED 색상을 변경하는 모든
명령이 명령 수행후 바로 draw 하지 않게 설정했을 때, 이 명령이 유용할 것이다.
(led_draw)
LED 색상을 변경하는 명령이 수행될 때, 명령 하나가 수행될 때마다 LED에 바로 그릴지 말지를 결정하는 시스템 플래그를 변경한다.
(led_set_direct_draw, <flag>)
- flag
- 플래그는 0 또는 1을 가지며 0이면 drawing flag가
false
상태로 변경되고, 1이면 =true=로 변경된다.
자석 센서들의 on/off 상태를 요청한다.
(mag_status)
(mag_status, <0th row's status>, ..., <9th row's status>, <etc status>)