수행기록퀘스트2
피코 개발환경은 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 컨테스트도 해야하고 시간이 부족하기 때문에
컨테스트 기간에 맞춰 트레이드 오프가 필요할 것 같습니다.
다른 참가자 분들도 모두 힘내시기 바랍니다.
로그인 후
참가 상태를 확인할 수 있습니다.