콘테스트 프로젝트 진행 상황
각 Quest를 단계적으로 완성하는 프로젝트입니다.
Quest 1: Quest 1 스코어보드
2022.08.04
스코어보드
=======
□ 아이디어 소개 및 개요 (개발 계획 및 과정 포함)
주요 스포츠 경기장에는 커다란 전광판에 득점이 표시됩니다.
경기장에 직접 가지 않더라도 생중계나 문자중계로 실시간 득점 상황을 알 수 있습니다.
하지만 아마추어 경기나 생활체육 또는 비인기 종목의 경우에는 상황이 좋지 않습니다.
경기장에서 전광판을 사용할 수 없거나 경기장 밖에서 실시간 득점 상황을 알기 어렵습니다.
라즈베리 파이 피코에는 이미 VGA 출력 기능이 있고, 피코 W 에는 무선랜 기능까지 있습니다.
VGA 출력 기능을 이용하여 적당히 큰 모니터에 스코어를 출력하여 현장에서 볼 수 있도록 하고
무선랜 기능을 이용하여 네트웍으로 득점을 전송하여 휴대폰으로 볼 수 있도록 하는 것이
스코어보드 프로젝트의 목표입니다.
종목마다 점수 규칙이 상이하고 되도록 많은 종목을 지원하고 싶지만
제한된 시간에 가능성을 보여주는 것이 중요하므로 가장 간단한 축구를 구현 예로 하겠습니다.
다루는 정보는 경기 시간, 선수/팀 이름, 득점입니다.
예) 전반 30분 한바다 2 : 1 태산
사용자 입력
- 선수/팀 이름
- 타이머 시작/정지
- 득점
피코 자동 갱신
- 타이머
입력방법은 휴대폰/버튼/키보드가 있습니다.
최초 선수/팀 이름은 휴대폰으로만 가능 (입력기 구현이 복잡하므로)
타이머 시작/정지 및 득점은 버튼 또는 키보드 지원
※ 일의 양과 시간 제한의 균형이 필요합니다.
- 출력은 먼저 ASCII 코드만 지원하고 시간 여유가 되면 한글 출력을 지원합니다.
- USB 키보드 지원을 위해 별도 전원 공급과 SWD 프로그래밍이 요구되어
전체 개발 시간이 더 걸리게 될 수 있기에 후반에 작업합니다. (시간 부족시 미지원)
□ 전체 구조를 표현하는 블록 다이어그램
.png)
□ 하드웨어 구성 다이어그램
회로도
Hardware design with RP2040
3.6. Schematics 참조
https://datasheets.raspberrypi.com/rp2040/hardware-design-with-rp2040.pdf
완제품
https://www.devicemart.co.kr/goods/view?no=13902313
□ 소프트웨어 구성 다이어그램
1. VGA 출력
pico-playground/scanvideo
2. USB 키보드 입력
pico-examples/tree/master/usb/host
3. 네트웍 처리
스코어보드 메시지 디자인
클라우드 연동
Quest 2: Quest 2 개발 환경 구성
2022.08.26
피코 개발환경은 PicoSDK, ArduinoPico, MicroPython 등이 있습니다.
뒤로 갈 수록 사용하기 쉽고, 퍼포먼스는 반대입니다.
1. MicroPython 설치
BOOTSEL 버튼을 누른채로 PC에 USB로 연결하면 (전원을 공급) 대용량 저장소 RPI-RP2로 연결됩니다.

https://www.raspberrypi.com/documentation/microcontrollers/micropython.html
위 링크에서 MicroPython UF2 파일을 받을 수 있습니다.
(참고로 uf2 는 대용량 저장소를 통한 마이크로컨트롤러 플래싱에 적합하게 마이크로소프트가 만든 포맷입니다.)

받은 파일을 RPI-RP2 에 끌어다 놓으면 피코는 자동으로 리부팅 되고 장치관리자에 새로운 포트가 생깁니다.

터미널로 접속해 봅니다.

작동확인

2. ArduinoPico 설치
https://www.arduino.cc/en/software 에서 다운로드

설치는 그냥 다음 다음 하다보면 끝납니다.
설치 후 Arduino 를 실행하고 보드매니저를 열어봅니다.

보드매니저에서 pico 를 검색하여 "Raspberry Pi Pico/RP2040" 를 설치합니다.

PIco W 보드를 선택합니다.

마우스 Circle 예제를 열어봅니다.
File > Examples > Examples for Raspberry Pi Pico W > Mouse > circle

Pico를 대용량 저장소로 만들어주고 (USB에서 분리후 BOOTSEL 누르고 연결) Upload 버튼을 클릭합니다.

BOOTSEL 버튼을 누르면 마우스 포인터가 동그라미를 그리며 한바퀴 회전합니다.
3. Pico SDK
Pico SDK는 C/C++ 헤더와 라이브러리와 빌드시스템입니다.
Linux 환경에서는 설치 스크립트를 받아서 간단히 이뤄집니다.
Windows 환경에서는 여러가지 패키지를 받고 설치해야 합니다.
(이미 설치했지만 다시 삭제하고 재설치하면서 캡처하면 너무 길어서 읽는 사람도 피곤할 듯 하여 생략합니다.)
Pico SDK 환경에서는 개발에 필요한 별도 라이브러리가 부족하기 때문에 ArduinoPico 환경을 사용하는 것이 편리합니다.
ArduinoPico 에는 이미 Pico SDK 가 이미 포함되어 있어서 그냥 사용할 수 있습니다.

4. Adafruit IO
IoT 클라우드로는 Adafruit IO 를 선택했습니다. 그 이유는
- 나름 유명 회사 서비스
- 사용하기 쉬움
- API 제공
- 무료
단점으로는 한참 개발중이라서 문서가 바뀐 서비스 내용을 잘 반영하지 못합니다.
자사 제품 위주로 하드웨어를 지원해서 다른 하드웨어 사용자는 좀 불편합니다.
https://io.adafruit.com/ 에 접속합니다.

Adafruit IO 는 Adafruit 와 계정을 공유합니다. 이미 Adafruit 계정을 가지고 있으면 Sign In 하면 되고
없으면 Sign Up 으로 새로 만들고 Sign In 하면 됩니다. 우측 상단에 메뉴가 있습니다.
Sign In 하면 아래와 같이 자기 계정에 대한 메뉴가 나옵니다.

Devices Feeds Dashboards Action Power-Ups 등의 메뉴가 보입니다.
Devices 는 WipperSnapper (애송이) 라는 기능으로 미리 제공되는 펌웨어를 간단히 사용하는 방식인데 Adafruit 일부 제품만 지원하므로 해당사항이 없습니다.
Feeds 는 데이터와 메타데이터를 관리하는 항목으로 센서가 3개라면 3개의 피드를 등록해주면 됩니다.
Dashboards 는 피드를 차트같은 것으로 보여주는 기능입니다.
Action 은 어떤 이벤트, 즉 센서값이 아주 높다거나 할 때 이메일로 알려주거나 하는 기능입니다.
Power-Up 은 확장 기능 같은 것으로 IFTTT (If This Then That) 같은 외부 서비스와 연동하는 기능입니다.
Arduino 에서 Tools > Manage Libraries... 로 라이브러리 관리자를 띄웁니다.

Adafruit 를 검색하여 Adafruit IO Arduino 를 설치합니다.

5. 기타 VGA에 관해...
RP2040 의 특별한 점은 저가격 고성능이면서 듀얼코어이고 PIO라는 기능이 있다는 것입니다.
특히 PIO 기능은 다른 MCU에서 보지못했던 신박한 기능입니다.
이것은 듀얼코어 외에 별도의 듀얼 IO 코어가 있는 것과 같습니다.
PIO는 FIFO가 달린 스테이트 머신으로 간단한 전용 어셈블리 코드를 실행하고 모든 GPIO로 원하는 타이밍으로 출력할 수 있습니다.
이 기능을 사용하여 VGA 출력이 가능합니다.
현재까지 3가지 VGA 출력 레퍼런스를 찾았습니다.
scanvideo, PicoVGA, PICO-VGA-Micropython 으로 각각은 15비트, 8비트, 3비트 출력입니다.
scanvideo 는 라즈베리파이 재단에서 제공하는 것으로 pico-playground 에 예제가 있고 pico-extra 의 기능을 이용합니다.
pico-examples 는 공식 지원되는 예제이고 pico-playground 에는 그렇지 않은 예제들이 있습니다.
높은 bpp (픽셀당 비트수)로 인해 많은 메모리가 요구되는데 PIO에 RLE (Run Length Encoding) 기능을 추가하여 메모리 사용량을 줄입니다.
불행히도 문서화가 잘 되어있지 않아서 사용하기 까다롭습니다.
PicoVGA 는 8비트로 줄이고 프레임버퍼가 지원되는 매우 완성도가 높은 프로젝트입니다.
게임용으로 만들었다고 하며 시간이 충분하다면 최고의 선택지가 되지 않을까 싶습니다.
PICO-VGA-Micropython 은 100% 파이썬으로 만들어졌습니다.
3 bpp (8 color) 로 메모리 사용량이 매우 적습니다. 스코어보드는 컬러수가 중요하지 않으므로 문제가 되지 않을 것 같습니다.
또한 파이썬이라서 작업시간도 많이 아낄 수 있을 것 같습니다.
그밖에도 NES 에뮬레이터, NTSC 출력 등의 흥미로운 프로젝트가 있습니다.
하드웨어 구성도 필요하고 문서도 읽어봐야 하고 ST 컨테스트도 해야하고 시간이 부족하기 때문에
컨테스트 기간에 맞춰 트레이드 오프가 필요할 것 같습니다.
다른 참가자 분들도 모두 힘내시기 바랍니다.
Quest 3: Quest 3 Pico W - 클라우드 연결 및 데이터 업로드
2022.09.11
1. Adafruit IO 사용하기
- io.adafruit.com 에 접속합니다.

- 우상단에 Get Started for Free 는 계정만들기(Sign Up) 이고 Sign In 은 로그인 링크입니다.
- Adafruit 아이디가 없으면 새로만들고 이미 만들었으면 Sign In 합니다.

- 우상단에 로그인 상태가 보입니다.
- 파란색 메뉴 끝에 IO 를 눌러 io.adafruit.com 으로 이동합니다.

- 장치를 추가할 수 있는 메뉴가 보입니다. Pico 는 아직 WipperSnapper 가 지원되지 않으므로 Devices 메뉴는 사용할 수 없습니다.
- Actions 와 Power-Ups 는 아직 사용하지 않고 지금은 Feeds 와 Dashboards 만 사용할 것입니다.
- 우상단에 노란색 열쇠 아이콘을 클릭하면 API KEY 를 볼 수 있습니다.

- USERNAME 과 KEY를 사용하여 접근할 수 있습니다.
- 캡처와 같이 KEY 를 노출했다면 REGENERATE KEY 를 눌러 KEY 를 바꿀 수 있습니다.
- Feeds 메뉴로 이동합니다.

- New Feed 를 눌러 새로운 Feed 를 만듭니다.

- 새로운 feed 가 만들어졌습니다.

- temperature 를 클릭하여 확인합니다
.png)
- Add Data 를 이용하여 몇 개의 데이터를 입력해 봅니다.

- 이제 Dashboards 로 이동합니다.

- New Dashboard 를 클릭하여 새로운 대시보드를 만듭니다.
.png)
- temperature 를 클릭합니다.

- 우상단의 톱니바퀴 아이콘을 클릭합니다.

- Create New Block 을 클릭합니다.

- Line Chart 를 클릭합니다.
.png)
- temperature 를 체크하고 Next step 으로

- Create Block 버튼을 클릭합니다.

- F5 를 눌러 새로고침하면 데이터가 보입니다.

- 여기까지는 수동으로 데이터를 먹였습니다. 다음은 Pico 가 데이터를 먹이도록 하는 과정이 필요합니다.
2. Pico W 프로그래밍
- Adafruit IO 는 계속해서 업데이트 되고 있으므로 공식 문서와 불일치하는 부분이 있습니다.
- https://github.com/adafruit 에 여러가지 Adafruit IO 관련 API 가 제공됩니다.
- Adafruit IO API 가 아직 Pico W 를 공식 지원하지 않으므로 Michael Horne 의 Use Adafruit IO with a Raspberry Pi Pico W to create IoT dashboards using MQTT 를 사용하겠습니다.
Use Adafruit IO with a Raspberry Pi Pico W to create IoT dashboards using MQTT
https://www.recantha.co.uk/blog/?p=21412
- https://github.com/recantha/PicoTemp 로 이동하여 Code > Download ZIP 으로 압축파일을 받아서 적당한 폴더에 풀어놓습니다.

- 파일설명
README.md 문서 파일
ahtx0.py I2C 온도센서 관련
config.py feed 접두어
main.py 메인 파일
mqtt.py MQTT 외부 라이브러리
sample_secrets.py 암호가 저장된 샘플
- 원저자는 i2c 온습도 센서를 사용하고 있지만 여기서는 Pico 의 내부 온도센서를 사용합니다. config.py 와 secrets.py 의 내용은 main.py 에 합쳐버릴 것입니다. 따라서 우리가 필요한 파일은 mqtt.py 와 main.py 이고 mqtt.py 는 그대로 사용하고 main.py 에 수정이 필요합니다.
- https://www.raspberrypi.com/documentation/microcontrollers/micropython.html 에서 Raspberry Pi Pico W 용 MicroPython UF2 파일을 다운로드 합니다.


- VGA DAC 을 만들기 위한 보드입니다.
- RUN 버튼은 리셋버튼입니다. BOOTSEL 버튼을 누른채로 RUN 버튼을 누르면 USB 대용량 저장장치로 갈 수 있기 때문에 매번 USB 케이블을 뺐다 꼈다 할 필요가 없으므로 편리합니다.
- USB 대용량 저장장치로 만들고 위에서 받아놓은 UF2 파일을 복사합니다.
- Thonny 로 연결합니다.

- mqtt.py 의 내용을 복사하고 mqtt.py 로 저장합니다.
- 첨부된 main.py.txt 의 내용을 복사하고 main.py 로 저장합니다.

- 아래 부분을 상황에 맞게 수정합니다.
feed_config = "temperature"
secrets = {
"ssid" : "****",
"password": "****",
"adafruit_io_username": "****",
"adafruit_io_key": "****"
}
- 이제 실행해 봅니다.

- Feeds 의 내용이 업데이트 됩니다.

- 대시보드의 내용을 봅니다.

3. 결론
- Adafruit IO 는 사용하기 매우 쉬웠습니다.
- https://learn.adafruit.com/category/adafruit-io 에서 Adafruit IO 관련 프로젝트를 볼 수 있습니다.
- 감사합니다.
프로젝트 갤러리
프로젝트 제작 과정과 최종 결과물을 담은 이미지 갤러리입니다.

.png)








프로젝트 자료실
프로젝트를 재현하거나 학습하는데 필요한 모든 자료를 제공합니다.
등록된 자료가 없습니다.
프로젝트 소개
아직 등록된 프로젝트 소개가 없습니다.
코드 & 회로도
등록된 코드/회로 자료가 없습니다.
댓글 2개
아두이노 UNO로는 NTSC TV OUT 정도 가능했는데 PICO는 VGA 또는 HDMI 출력까지 가능하더군요. 가격도 비슷한데 말이죠.

vga 확장도 가능하군요.