Pico Explorer Base
2021.04.04
YouTube でも紹介しています。画像をクリックすると再生できます。
今回は、Pimoroni の新製品 Pico Explorer Base を使ってみました。
Raspberry Pi Pico の基本的な使い方は
Raspberry Pi Pico 開発環境構築
を参照してください。
■Features
この Pico Explorer Base 左上には、ヘッダーピンをはんだ付けしたRaspberry Pi Pico を挿し込むためのスロットがあります。
その右に、ピエゾ・ブザーを挟んで、Pimoroni Breakout Garden製品用の2つのI2Cソケット、
右下に、240x240のLCD、中央に2つのモータードライブと GPIO、ADC 用のピンヘッダー。
左下に、小さなブレッドボードが付いています。
・Pico Explorer Base
・Piezo speaker
・1.54" IPS LCD screen (240 x 240)
・Four user-controllable switches
・Two Half-Bridge motor drivers (with over current indicator LED)
・Easy access GPIO and ADC pin Headers
・Two Breakout Garden I2C sockets
・Mini breadboard
・Rubber feet
・Compatible with Raspberry Pi Pico.
・No soldering required (as long as your Pico has header pins attached).
・Dimensions: approx 117mm x 63mm x 20mm (L x W x H, assembled)
・C/C++ and MicroPython libraries
■ソースコードのダウンロード
ここでは、Pimoroni の GitHub にあるサンプルコードを動かしてみます。
C/C++ and MicroPython libraries
https://github.com/pimoroni/pimoroni-pico
Pimoroni Pico のGitHub は、頻繁に更新されていますので、参考程度にみてください。
examples をクリックします。
pico_explorer をクリックします。
https://github.com/pimoroni/pimoroni-pico/tree/main/examples/pico_explorer
$ mkdir ~/pico/explorer
$ cd ~/pico/explorer
ここに下記のファイルをダウンロードして配置します。
・CMakeLists.txt
・demo.cpp
・fox.tga
・image_data.cpp
$ cat CMakeLists.txt
add_executable(
explorer
demo.cpp
)
add_resource(explorer fox.tga)
# Pull in pico libraries that we need
target_link_libraries(explorer pico_stdlib pico_explorer msa301)
# create map/bin/hex file etc.
pico_add_extra_outputs(explorer)
pico-sdkの標準ライブラリーの他に、pico_explorer と msa301 というライブラリーを参照していることがわかります。
https://github.com/pimoroni/pimoroni-pico/tree/main/libraries/pico_explorer
$ mkdir ~/pico/explorer/pico_explorer
ここに下記のファイルをダウンロードして配置します。
・CMakeLists.txt
・pico_explorer.cpp
・pico_explorer.hpp
$ cat ~/pico/explorer/pico_explorer/CMakeLists.txt
target_link_libraries(pico_explorer INTERFACE pico_stdlib hardware_pwm hardware_adc st7789 pico_graphics)
st7789 と pico_graphics というライブラリーを参照しています。
https://github.com/pimoroni/pimoroni-pico/tree/main/drivers/msa301
$ mkdir ~/pico/explorer/msa301
ここに下記のファイルをダウンロードして配置します。
・CMakeLists.txt
・msa301.cpp
・msa301.hpp
https://github.com/pimoroni/pimoroni-pico/tree/main/libraries/pico_graphics
$ mkdir ~/pico/explorer/pico_graphics
ここに下記のファイルをダウンロードして配置します。
・CMakeLists.txt
・font_data.cpp
・pico_graphics.cpp
・pico_graphics.hpp
・types.cpp
https://github.com/pimoroni/pimoroni-pico/tree/main/drivers/st7789
$ mkdir ~/pico/explorer/st7789
ここに下記のファイルをダウンロードして配置します。
・CMakeLists.txt
・st7789.cpp
・st7789.hpp
このようにCMakeLists.txtに記載されているリンクを辿り、必要なソースを収集して使いやすいように配置しました。
<~/pico/explorer>
・CMakeLists.txt
・demo.cpp
・fox.tga
・image_data.cpp
<pico_explorer>
・CMakeLists.txt
・pico_explorer.cpp
・pico_explorer.hpp
<msa301>
・CMakeLists.txt
・msa301.cpp
・msa301.hpp
<pico_graphics>
・CMakeLists.txt
・font_data.cpp
・pico_graphics.cpp
・pico_graphics.hpp
・types.cpp
<st7789>
・CMakeLists.txt
・st7789.cpp
・st7789.hpp
■相対パスの変更
使いやすいように勝手にファイルの配置を変えたので、相対パスの変更を行います。
$ vi ~/pico/explorer/pico_explorer/pico_explorer.hpp
#include "../../drivers/st7789/st7789.hpp"
#include "../../libraries/pico_graphics/pico_graphics.hpp"
↓変更
#include "../st7789/st7789.hpp"
#include "../pico_graphics/pico_graphics.hpp"
■MakeLists.txt への追記
$ cmake --version
cmake version 3.13.4
$ cd ~/pico/explorer
CMakeLists.txt の先頭にお決まりのコードとサブディレクトリーを追記します
$ vi CMakeLists.txt
cmake_minimum_required(VERSION 3.13)
# Pull in SDK (must be before project)
include(pico_sdk_import.cmake)
project(pico_examples C CXX ASM)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
# Initialize the SDK
pico_sdk_init()
add_subdirectory(st7789)
add_subdirectory(pico_graphics)
add_subdirectory(pico_explorer)
add_subdirectory(msa301)
add_executable(
explorer
demo.cpp
)
add_resource(explorer fox.tga)
# Pull in pico libraries that we need
target_link_libraries(explorer pico_stdlib pico_explorer msa301)
# create map/bin/hex file etc.
pico_add_extra_outputs(explorer)
$ cp -p ~/pico/pico-sdk/external/pico_sdk_import.cmake .
$ mkdir build
$ cd build
$ cmake ..
CMake Error at CMakeLists.txt:23 (add_resource):
Unknown CMake command "add_resource".
マクロを追加します。
このマクロでは、UF2(USB Flashing Format)ファイルにtgaイメージをバンドルしています。
$ vi ~/pico/explorer/CMakeLists.txt
function(add_resource target file)
get_filename_component(NAME ${ARGV1} NAME_WE)
set(FILENAME ${ARGV1})
add_custom_command(
OUTPUT ${NAME}.o
COMMAND ${CMAKE_COMMAND} -E copy
${CMAKE_CURRENT_SOURCE_DIR}/${FILENAME}
${CMAKE_CURRENT_BINARY_DIR}
COMMAND arm-none-eabi-ld -r -b binary -o ${NAME}.o ${FILENAME}
DEPENDS ${FILENAME}
)
target_sources(${ARGV0} PRIVATE ${NAME}.o)
endfunction(add_resource)
add_resource(explorer fox.tga)
# Pull in pico libraries that we need
target_link_libraries(explorer pico_stdlib pico_explorer msa301)
# create map/bin/hex file etc.
pico_add_extra_outputs(explorer)
これにより、画像ファイル fox.tga が、実行ファイル explorer.uf2 にバンドルされます。
※補足:
cmake_minimum_required(VERSION 3.13)^M
のように表示されて気になるときはは、改行コードを変更します。
$ sed -i 's/\r//' CMakeLists.txt
◇CMakeで設定されているすべての変数を出力する
上記マクロの変数値を確認するために、CMakeLists.txt の末尾に下記を追加します。
$ vi ~/pico/explorer/CMakeLists.txt
message(STATUS "*** dump start cmake variables ***")
get_cmake_property(_variableNames VARIABLES)
list (SORT _variableNames)
foreach (_variableName ${_variableNames})
message(STATUS "${_variableName}=${${_variableName}}")
endforeach()
message(STATUS "*** dump end ***")
$ rm -rf *
$ cmake ..
..........
-- CMAKE_CURRENT_BINARY_DIR=/home/pi/pico/explorer/build
-- CMAKE_CURRENT_LIST_DIR=/home/pi/pico/explorer
-- CMAKE_CURRENT_LIST_FILE=/home/pi/pico/explorer/CMakeLists.txt
-- CMAKE_CURRENT_SOURCE_DIR=/home/pi/pico/explorer
..........
add_resource の中を展開してみると、下記のようになります。
function(add_resource target file)
get_filename_component(NAME "fox.tga" NAME_WE)
set(FILENAME "fox.tga")
add_custom_command(
OUTPUT fox.o
COMMAND /usr/bin/cmake -E copy
/home/pi/pico/explorer/fox.tga
/home/pi/pico/explorer/build
COMMAND arm-none-eabi-ld -r -b binary -o fox.o fox.tga
DEPENDS fox.tga
)
target_sources(explorer PRIVATE fox.o)
endfunction(add_resource)
$ make
BOOTSELボタンを押しながら、Raspberry Pi Picoを接続します。
$ sudo mkdir -p /mnt/pico
$ sudo mount /dev/sda1 /mnt/pico
$ sudo cp explorer.uf2 /mnt/pico
$ sudo umount /mnt/pico
■補足:TGA (Truevision Graphics Adapter)
TGA (Truevision Graphics Adapter) ファイルフォーマットはTruevision社が開発したラスター画像のファイルフォーマット。
TGAファイルは元々Truevision社のBrad Pillowによって1984年に定められた。現在のバージョン (2.0) は(サムネイルとしてよく知られている)ポステージスタンプ(訳注:郵便切手)、アルファチャンネル、ガンマ値、テクスチャのメタデータなどの拡張を含み、Truevision社のDavid Spoelstraによって1989年に定められた。
色深度の制限にもかかわらず、TGAはアニメーションとビデオ産業の全域に渡って未だ使われている。
Ref.フリー百科事典『ウィキペディア(Wikipedia)』
プログラムに組み込まれたTGAの取り扱いはとても簡単です。
先頭18バイトのヘッダー情報に続くBGRの画像データを取り出して、描画用の関数にセットします。
画像編集アプリの多くが、TGAフォーマットへの画像変換もサポートしています。
サンプルプログラムから画像表示部分のみを抜き出してみました。
縦横240の画面一杯のTGAをバンドルしようとすると、RAMがオーバーフローしてしまいました。
$ make
/usr/lib/gcc/arm-none-eabi/7.3.1/../../../arm-none-eabi/bin/ld: explorer.elf section `.bss' will not fit in region `RAM'
/usr/lib/gcc/arm-none-eabi/7.3.1/../../../arm-none-eabi/bin/ld: region RAM overflowed
/usr/lib/gcc/arm-none-eabi/7.3.1/../../../arm-none-eabi/bin/ld: region `RAM' overflowed by 34304 bytes
collect2: error: ld returned 1 exit status
210x210のTGAファイルの場合はビルドが可能で、Picoで正常に動作しました。
$ ls -l YoRHa2B.tga
-rw-r--r-- 1 pi pi 132318 4月 2 02:16 YoRHa2B.tga
$ ls -l explorer.*
-rwxr-xr-x 1 pi pi 159692 4月 2 02:18 explorer.bin
-rw-r--r-- 1 pi pi 1708303 4月 2 02:18 explorer.dis
-rwxr-xr-x 1 pi pi 347324 4月 2 02:18 explorer.elf
-rw-r--r-- 1 pi pi 189026 4月 2 02:18 explorer.elf.map
-rw-r--r-- 1 pi pi 449261 4月 2 02:18 explorer.hex
-rw-r--r-- 1 pi pi 319488 4月 2 02:18 explorer.uf2
Adafruit Feather RP2040
Adafruit からも RP2040 を搭載した Feather ボードが発売されました。
チップ上のロゴに惹かれて、たまらず買ってしまいました。
■参考文献
・C/C++ and MicroPython libraries
・Rendering Images on the Pimoroni Pico Display
・Raspberry Pi Pico - API Documentation
・CMakeで設定されているすべての変数を出力する
・cmakeプロジェクトの設定項目一覧を表示させる
・CMake: 便利なコマンド・変数
・第4回 ビルド時に実行されるコマンドの依存関係
・raspberrypi / pico-bootrom
・Raspberry Pi メモ (52) - Raspberry Pi Pico
・Truevision TGA
|