拡張モジュールの互換性について教えてください
-
M5Stackの拡張モジュールはGrayでもCoreS3でも共通で利用可能でしょうか?
具体的には、最も性能の高そうな「CoreS3」
https://www.switch-science.com/products/8960?_pos=17&_sid=aea411e7e&_ss=r
に「PWRCANモジュール」
https://www.switch-science.com/products/9816?_pos=3&_sid=714545fdc&_ss=rおよび「GNSSモジュール」
https://www.switch-science.com/products/9276?_pos=24&_sid=aea411e7e&_ss=rをスタックしてCAN通信や位置・姿勢取得を行いWiFi(UDP通信)でPCと情報の授受をしようと考えております。
お手数をおかけいたしますがご教示のほどよろしくお願い申し上げます。
-
@k0u1_H
はい、ほとんどは互換性があります。最悪の場合は、一部のモジュールについては、CoreS3 上に対応するライブラリがない可能性があります。
したがって、以前にリリースされた一部のモジュール (2020 年以前) については、Core Basic、Fire、Gray などの古い Core を使用することを個人的にお勧めします。 -
@kuriko
ご教示有難うございます!以下のような「PWRCANモジュール」でライブラリの「スケッチ例」をコンパイルするとエラーになってしまうのも、ボードの古さによるところでしょうか。
1. PwrCAN Module 13.2 CAN Transceiver TEST
https://github.com/m5stack/M5Stack/tree/master/examples/Unit/CAN
2. PwrCAN Module 13.2 485 Communication Example
https://github.com/m5stack/M5Stack/tree/master/examples/Unit/ISO485
3. PwrCAN Module 13.2 Control Xiaomi Motor Example
https://github.com/project-sternbergia/cybergear_m5
Arduino:1.8.15 (Windows 10), ボード:"M5CoreS3, Disabled, QSPI PSRAM, QIO 80MHz, 16MB (128Mb),
Core 1, Core 1, Hardware CDC and JTAG, Enabled, Disabled, Disabled, UART0 / Hardware CDC,
16M Flash (3MB APP/9.9MB FATFS), 240MHz (WiFi), 921600, None, Disabled"
:
In file included from C:\Users\HE42137\Documents\Arduino\libraries\M5Stack\src/M5Display.h:8,
from C:\Users\HE42137\Documents\Arduino\libraries\M5Stack\src/M5Stack.h:106,
from C:\Users\HE42137\Documents\Arduino\libraries\M5Stack\examples\Unit\ISO485\ISO485.ino:16:
C:\Users\HE42137\Documents\Arduino\libraries\M5Stack\src/utility/In_eSPI.h:633:20: error: 'VSPI' was not declared in this scope
uint8_t port = VSPI;
^~~~
C:\Users\HE42137\Documents\Arduino\libraries\M5Stack\src/utility/In_eSPI.h:633:20: note: suggested alternative: 'SPI'
uint8_t port = VSPI;
^~~~
SPI
「SD.h」に対して複数のライブラリが見つかりました
使用済:C:\Users\HE42137\AppData\Local\Arduino15\packages\m5stack\hardware\esp32\2.1.2\libraries\SD
未使用:C:\Program Files (x86)\Arduino\libraries\SD
「WiFiClient.h」に対して複数のライブラリが見つかりました
使用済:C:\Users\HE42137\AppData\Local\Arduino15\packages\m5stack\hardware\esp32\2.1.2\libraries\WiFi
未使用:C:\Program Files (x86)\Arduino\libraries\WiFi
次のフォルダのライブラリM5Stackバージョン0.4.6を使用中:C:\Users\HE42137\Documents\Arduino\libraries\M5Stack
次のフォルダのライブラリSPIバージョン2.0.0を使用中:C:\Users\HE42137\AppData\Local\Arduino15\packages\m5stack\hardware\esp32\2.1.2\libraries\SPI
次のフォルダのライブラリWireバージョン2.0.0を使用中:C:\Users\HE42137\AppData\Local\Arduino15\packages\m5stack\hardware\esp32\2.1.2\libraries\Wire
次のフォルダのライブラリFSバージョン2.0.0を使用中:C:\Users\HE42137\AppData\Local\Arduino15\packages\m5stack\hardware\esp32\2.1.2\libraries\FS
次のフォルダのライブラリSPIFFSバージョン2.0.0を使用中:C:\Users\HE42137\AppData\Local\Arduino15\packages\m5stack\hardware\esp32\2.1.2\libraries\SPIFFS
次のフォルダのライブラリSDバージョン2.0.0を使用中:C:\Users\HE42137\AppData\Local\Arduino15\packages\m5stack\hardware\esp32\2.1.2\libraries\SD
次のフォルダのライブラリHTTPClientバージョン2.0.0を使用中:C:\Users\HE42137\AppData\Local\Arduino15\packages\m5stack\hardware\esp32\2.1.2\libraries\HTTPClient
次のフォルダのライブラリWiFiバージョン2.0.0を使用中:C:\Users\HE42137\AppData\Local\Arduino15\packages\m5stack\hardware\esp32\2.1.2\libraries\WiFi
次のフォルダのライブラリWiFiClientSecureバージョン2.0.0を使用中:C:\Users\HE42137\AppData\Local\Arduino15\packages\m5stack\hardware\esp32\2.1.2\libraries\WiFiClientSecureexit status 1
ボードM5CoreS3に対するコンパイル時にエラーが発生しました。スケッチ例を弄ればコンパイルできるのでしょうね。
下記にCoreS3のGPIOの設定まで書かれているので。
https://docs.m5stack.com/en/module/Module13.2-PwrCAN少しでも処理の高速なものを使いたいですが、困りました。
-
@k0u1_H
コンパイルの失敗はターゲットボードとは関係ないと思います。先ほど挙げた最初の 2 つの例を試してみましたが、私のコンピュータではエラーなく正常にコンパイルされました。VSPIとSD.hはArduino IDE自体のバグだと思いますが、プロジェクトを再作成するかソフトウェアを再インストールすることで解決する可能性があります。
自分の環境:
2021 MacBook Pro (M1 Pro)
macOS Sequoia 15.1
Arduino IDE 2.3.4 -
@kuriko said in 拡張モジュールの互換性について教えてください:
プロジェクトを再作成するかソフトウェアを再インストールすることで解決する可能性
実際にコンパイルまで試してくださるだなんて、誠にかたじけなく存じます。
「プロジェクトを再作成」はどういう意味か分からなかったのですが、
「ソフトウェアを再インストール」については、ご助言に従って、1.8.15のIDEを2.3.4に入れ替えてみました。
ごく一部のコンパイルエラーが消えた気がしましたが、CANもISO485もコンパイル成功しないため、ライブラリも「ソフトウェアを再インストール」の一つなのかもしれないと思い、100近くはあったであろうlibrariesフォルダ内の全てのライブラリを削除してIDEから入れ直しました。※ 1.8.15では依存関係のライブラリの量が多すぎると、ボタンが画面の中に表示されませんでしたが、 2.3.4ではスクロールバー付きでボタンが見えるようになりました。 もしかすると依存ライブラリの一部が入っていなかった可能性があります。
全て入れ替えましたが、下記についてはやはりVSPIがダメで、残念ながらM5CoreS3を選択するとコンパイルエラーでした。
M5Stack/Unit/CAN M5Stack/Unit/ISO485 c:\Users\HE42137\Documents\Arduino\libraries\M5Stack\src/utility/In_eSPI.h:633:20: error: 'VSPI' was not declared in this scope uint8_t port = VSPI; ^~~~
ですが、M5CoreまたはM5Core2をボード選択した場合にはコンパイル成功しますので、M5CoreS3を選んだ場合特有のエラーに見えました。
In_eSPI.hの633行目を確認してみると、「ESP32がdefineされていてUSE_HSPI_PORTは未定義」という条件でportに代入しようとするVSPIが未定義で起こるエラーに見えました。
#if defined(ESP32) #if defined(USE_HSPI_PORT) uint8_t port = HSPI; #else uint8_t port = VSPI; #endif #endif
このファイルの上の方にも以下のような記述がありますが、そもそもlibrariesフォルダの下にsocフォルダも無ければspi_reg.hもありません。
#include <SPI.h> #ifdef ESP32 #include "soc/spi_reg.h" #ifdef USE_HSPI_PORT #define SPI_PORT HSPI #else #define SPI_PORT VSPI #endif #endif
librariesフォルダ配下の子ディレクトリまで含めて VSPI をグローバル検索すると、定義しているファイルは無いものの、以下が引っ掛かりました。
M5GFX\src\lgfx\v1\platforms\esp32\Bus_SPI.cpp(95): auto spi_port = (uint32_t)(cfg.spi_host) + 1; // FSPI=1 HSPI=2 VSPI=3;
上記コメントから、"VSPI"というのを使っている場所を"3"に置き換えれば想定されたビルドにはなるのかなとは思いました。
※ M5CoreやM5Core2を選択した場合には、ここで引っ掛からないのが謎ではあるのですが…。
ただ、そのような場当たり的な対応をしても意味がなく、"soc/spi_reg.h" を読み込めるように何かのファイルを用意するべきなのかと思います。
"spi_reg.h"をどうすれば入手できるかと思いgoogle検索すると下記がhitしました。
https://git.liberatedsystems.co.uk/jacob.eva/arduino-esp32/src/commit/1b2f34b0d6a668ba0e5c353f6c83dcab500c5028
zipのダウンロードもできず、「git clone https://git.liberatedsystems.co.uk/jacob.eva/arduino-esp32.git」もできませんでした。
同じ検索の中にあった下記を参考に
https://interface.cqpub.co.jp/esp32-arduino-ide-2/
IDEの環境設定「追加のボードマネージャのURL」に下記URLを追加
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
→ ボードマネージャで「esp32」を検索してインストールしました。
もう一度下記を確認すると、ESP32-S2および/またはESP32-C3をボードマネージャにインストールするために、
https://git.liberatedsystems.co.uk/jacob.eva/arduino-esp32
上記と同様に下記を「追加のボードマネージャのURL」に記載することが書かれていました。
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json
これを終えると、既にインストールしたばかりの「esp32」でしたがボードマネージャ上でUPDATE可能になっていたのでアップデートしました。
ここまではやってみましたが、spi_reg.hがlibrariesフォルダに入ることもなく、コンパイル結果はエラーのまま変わらずでした。
無意味なことをやった報告しかできずお恥ずかしい限りです。
-
同じようなエラーで困っている人への回答を見つけました。
https://github.com/m5stack/M5Stack/issues/317
あなたのデバイスに間違ったライブラリを使用しているためです。ESP32-S3デバイスはVSPIをサポートしていないため、M5StackライブラリではなくM5CoreS3ライブラリを使用することをお勧めします。
https://www.reddit.com/r/esp32/comments/197zhss/issues_compiling_for_my_m5stack_cores3_vspi_error/
M5Stack CoreS3は、HSPIまたはVSPIを持たないESP32-S3を使用します。SPI0 - SPI4を使用する必要があります。どれが使われているのかわからない。たぶんSPI0とSPI1は使用可能です。
コンパイル中に流れる文字に"esp32s3"だけでなく"esp32"が散見されることを気にしていました。
要するに、esp32のライブラリが使われるとCoreS3はアウト!ということでしょうか。
GPIOのアサインを書き換えるような裏技があるようにも思えますが。
-
@kuriko
連投となり恐れ入ります。種々のWeb情報を総合してゆくと、ESP32-S3を搭載するM5Stack CoreS3でESP32搭載のM5StackやM5Stack Core2用に書かれたスケッチ例をそのままではビルドできない様に思いました。
#include <M5Stack.h>
を
#include <M5CoreS3.h>
#include <M5Unified.h>に置き換えることは試みましたが、未定義エラーが増えました。
上記だけでは上手くいきませんでしたが、基本的にはこのようにESP32向けのヘッダファイルとESP32-S3向け、または両対応のヘッダファイルと置き換えるのがCoreS3の利用方法なのではないかと思います。
このIncludeするヘッダファイルの置き換えで(全てに対応できるとは限らないまでも)、コンパイルエラーを回避する機械的にやればよい定形処理のようなものはございませんでしょうか?
Coreのアップグレードに係る基本的な部分なので公式情報がありそうな気もしますが…。
現状では一番最初にkuriko様にご助言頂きましたように、「CoreS3を選定するのは拡張モジュールを追加するなどの汎用的利用法を考えれば避けるべき選択」という結論になってしまいますため、ノウハウがあれば伝授頂けましたら大変助かります。
-
@k0u1_H
僕の知る限り、そういった汎用的な方法は存在しないはずです。
M5Stack.hは、M5チームがCore Basicのために作成したヘッダーファイルで、当時はM5UnifiedやM5GFXがなかったため、このヘッダーファイルに基づく多くの例は古い関数が含まれています。そのため、後に廃止されたり名前が変更された関数が多く、新しい開発ボードに移植するのは大変な作業です。
僕が以前に言ったように、比較的古いモジュールやベース(特に大きなM5のロゴが印刷されたもの)を使用する場合は、Core Basicをコントローラーとして使用することをお勧めします。比較的新しいユニットやモジュールを使用する場合は、古いコントローラーと新しいコントローラーの両方から必要に応じて選択できます。 -
@kuriko
色々な調べ事やコンパイルのトライ等で詰まってしまい、お返事が大変遅くなり申し訳ございません。調べるほどに1個だけを色々な用途で使っていくことを考慮すると、仰られるように「S3のコアは絶対に選択から外すべき」だという風に思いました。
そこで以下のサイトを見て選ぶべきものを考えました。
https://lang-ship.com/blog/work/m5unified-2-basic-gray-m5go-fire-core2-core2-for-aws/Fire v2.7がほぼ最善っぽく思いましたが間違っていないでしょうか。
CORE2 for AWSという択も悪くない気がしましたが、コンパイル問題に関しては両者同格で、物理ボタンは使い易そうと考えてFireかなと思いました。
この度は、大変勉強させていただきました。
kuriko様、お手数をお掛けいたしました。ありがとうございました!! -
@k0u1_H
お役に立てて嬉しいです。