ODROID-GO:M5Stack とのソース共有

ODROID-GO用のArduino開発では、基本的にはODROID-GO用のライブラリを使いますが、そうするとM5Stack用のソース共有が難しくなってしまいます。

実際のところ、関数名や処理は同じような内容が多く、互換性は高いです。とはいえ、”M5.begin”→”GO.begin()”や、”M5.Lcd” → “GO.lcd”のような、ライブラリ名や関数名、引数の微妙な違いがあったりして、都度都度、細かな修正が必要となります。

ソースが #ifdef だらけになりそうだなー、どうやって対応するのがいいのかなー、と思ってたのですが…これらの違いの部分をうまくラッピングしたライブラリが公開されていました!
このライブラリを使えば、M5Stack 用に書いたプログラムを、そのままODROID-GOで動作させることが可能なのです!
作者は、M5StackUpdater のTOBOZOさん!

https://github.com/tobozo/ESP32-Chimera-Core
tobozo/ESP32-Chimera-Core

ボタンの数が違うので、その部分ではそれぞれでの処理を書く必要があります。作業必要なのは、ほぼ、そこだけですね。


僕は主に ArduinoIDE ではなくて、Visual Studio Code + PlatformIO を使っているので、その場合にこのライブラリをどうやって使うかを説明します。

platformio.ini に、

lib_deps = M5Stack

と記載していると思います。ここのところを、ライブラリ取得元の git URL にします。

lib_deps = https://github.com/tobozo/ESP32-Chimera-Core.git
git を指定した場合、ライブラリ名は自動的に設定されます。

platformio.ini 全体だとこういう感じ。

[platformio]
env_default = odroid_esp32

[env:odroid_esp32]
platform = espressif32
board = odroid_esp32
framework = arduino
monitor_speed = 115200
lib_deps =
# Using a library name
# M5Stack
https://github.com/tobozo/ESP32-Chimera-Core.git
build_flags =
-O3
-DBOARD_HAS_PSRAM
-mfix-esp32-psram-cache-issue
-D _MZ700
-D _RGB565
-D _M5Stack

[env:m5stack-fire]
platform = espressif32
board = m5stack-fire
framework = arduino
monitor_speed = 115200
lib_deps =
# Using a library name
M5Stack
build_flags =
-DBOARD_HAS_PSRAM
-mfix-esp32-psram-cache-issue
-D _MZ700
-D _RGB565
-D _M5Stack

[env:odroid_esp32] と[env:m5stack-fire] の違いは、先ほどのライブラリ指定と、envの名前、boardの指定だけです。

[platformio]
env_default = odroid_esp32

このように、デフォルトの環境を設定しておけば、指定したものだけが PlatformIO でビルドされます。

(2020.09.06 追記)
上の書き方は古くて、以下のように書くようになったみたいです。

[platformio]
default_envs = odroid_esp32

odroid_esp32 でのビルド時には、ARDUINO_ODROID_ESP32 が定義されているので

#ifdef ARDUINO_ODROID_ESP32
[ODROID-GO独自の処理]
#endif

このようにすれば、ボタン処理の分岐などで M5Stack と ODROID-GOで処理を分けることが可能です。

ODROID-GOで MZ-700エミュレータ起動しました!