はじめに
M5Stack Advent Calendar 2025 の3日目
早いもので 昨年の Advent Calendar 2024 - M5StackでMeshtasticを試す では、Grove Wio-E5 を使ってMeshtasticを試してました。
最近は技適を取得したLoRaデバイスが増えてますので、今回は Wio-SX1262 for XIAO を使用してみました。
Meshtasticのファームウェア
Meshtasticを使うには、M5StackにMeshtasticのファームウェアを書き込む(アップロードする)必要があります。
GitHubから Meshtastic firmwareのソースコード をクローンして、PlatformIOでビルドします。
ビルド方法のドキュメントは こちら です。
前回は、シリアル接続の Grove Wio-E5 を無理やり使ったので、ソースコードに手を入れましたが、今回は素直に SPI 接続のデバイスを利用するので、修正は variant.h のみです。
// #define BUTTON_NEED_PULLUP // if set we need to turn on the internal CPU pullup during sleep
#define I2C_SDA 21
#define I2C_SCL 22
// #define BUTTON_PIN 39 // 38, 37
// #define BUTTON_PIN 0
#define BUTTON_NEED_PULLUP
// #define EXT_NOTIFY_OUT 13 // Default pin to use for Ext Notify Plugin.
#define BUTTON_PIN 38
#define PIN_BUZZER 25
#undef LORA_SCK
#undef LORA_MISO
#undef LORA_MOSI
#undef LORA_CS
#define LORA_SCK 18
#define LORA_MISO 19
#define LORA_MOSI 23
#define LORA_CS 5
//#define USE_RF95
//#define LORA_DIO0 36 // a No connect on the SX1262 module
//#define LORA_RESET 26
//#define LORA_DIO1 RADIOLIB_NC // Not really used
//#define LORA_DIO2 RADIOLIB_NC // Not really used
#define USE_SX1262
#define LORA_RESET 26
#define LORA_DIO1 36
#define LORA_DIO2 35
#ifdef USE_SX1262
#define SX126X_CS LORA_CS
#define SX126X_DIO1 LORA_DIO1
#define SX126X_BUSY 2
#define SX126X_RESET LORA_RESET
// DIO2 controlls an antenna switch and the TCXO voltage is controlled by DIO3
#define SX126X_DIO2_AS_RF_SWITCH
#define SX126X_RXEN 35
#define SX126X_TXEN RADIOLIB_NC
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
#endif
// This board has different GPS pins than all other boards
#undef GPS_RX_PIN
#undef GPS_TX_PIN
#define GPS_RX_PIN 16
#define GPS_TX_PIN 17
#define TFT_HEIGHT 240
#define TFT_WIDTH 320
#define TFT_OFFSET_X 0
#define TFT_OFFSET_Y 0
#define TFT_BUSY -1
// LCD screens are slow, so slowdown the wipe so it looks better
#define SCREEN_TRANSITION_FRAMERATE 1 // fps
#define ILI9341_SPI_HOST VSPI_HOST // VSPI_HOST or HSPI_HOST
ビルド方法
ソースコードをクローンします。
git clone https://github.com/meshtastic/meshtastic.git
リポジトリのサブモジュールを更新します。
cd firmware && git submodule update --init
PlatformIOでフォルダーを開きます。
Windowsの場合、Ctrl + Shift + P を押すと表示される PlatformIO: Pick Project Environment で env:m5stack-core を選択します。この環境変数を選択することで、M5Stack-Core用のファームウェアをビルドします。
あとは通常のPlatformIO+M5Stack開発と同様に、ビルド(PlatformIO: Build)して、アップロード(PlatformIO: Upload)すればOKです。環境変数の選択、ビルド、アップロードはウインドウ下部のステータスバーのボタンを押しても大丈夫です。
CLIが好きな人はこちらになります。
pip install platformio
pio run -e m5stack-core
結線図
ファームウェアをアップロードしたら、M5StackとWio-SX1262を以下のとおり結線します。
こんな感じにります。
さいごに
SX1262は多くのLoRa/Meshtasticデバイスで使われていて安定して使えます。
ここまで試してから、結線を2本減らせることに気づきましたのでメモ。
SX1262のDIO2にRF Switchの制御を行わせること、リセットは不要。
// #define BUTTON_NEED_PULLUP // if set we need to turn on the internal CPU pullup during sleep
#define I2C_SDA 21
#define I2C_SCL 22
// #define BUTTON_PIN 39 // 38, 37
// #define BUTTON_PIN 0
#define BUTTON_NEED_PULLUP
// #define EXT_NOTIFY_OUT 13 // Default pin to use for Ext Notify Plugin.
#define BUTTON_PIN 38
#define PIN_BUZZER 25
#undef LORA_SCK
#undef LORA_MISO
#undef LORA_MOSI
#undef LORA_CS
#define LORA_SCK 18
#define LORA_MISO 19
#define LORA_MOSI 23
#define LORA_CS 5
//#define USE_RF95
//#define LORA_DIO0 36 // a No connect on the SX1262 module
//#define LORA_RESET 26
//#define LORA_DIO1 RADIOLIB_NC // Not really used
//#define LORA_DIO2 RADIOLIB_NC // Not really used
#define USE_SX1262
#define LORA_RESET 26
#define LORA_DIO1 36
//#define LORA_DIO2 35
#ifdef USE_SX1262
#define SX126X_CS LORA_CS
#define SX126X_DIO1 LORA_DIO1
//#define SX126X_BUSY 2
#define SX126X_BUSY -1
#define SX126X_RESET LORA_RESET
// DIO2 controlls an antenna switch and the TCXO voltage is controlled by DIO3
#define SX126X_DIO2_AS_RF_SWITCH
//#define SX126X_RXEN 35
//#define SX126X_TXEN RADIOLIB_NC
#define SX126X_DIO3_TCXO_VOLTAGE 1.8
#endif
// This board has different GPS pins than all other boards
#undef GPS_RX_PIN
#undef GPS_TX_PIN
#define GPS_RX_PIN 16
#define GPS_TX_PIN 17
#define TFT_HEIGHT 240
#define TFT_WIDTH 320
#define TFT_OFFSET_X 0
#define TFT_OFFSET_Y 0
#define TFT_BUSY -1
// LCD screens are slow, so slowdown the wipe so it looks better
#define SCREEN_TRANSITION_FRAMERATE 1 // fps
#define ILI9341_SPI_HOST VSPI_HOST // VSPI_HOST or HSPI_HOST


