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
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エミュレータ起動しました!