LoginSignup
6
7

More than 1 year has passed since last update.

PlatformIOにM5Stamp Picoのボード定義を追加してみた

Posted at

筆者はマイコン初心者です。普段は趣味でプログラミングをしています。
開発環境として、Arduino IDEのBeta版はVSCodeベースになって従来のものより使いやすくなっています。ですが、普段使っているVisual StudioやJetBrains製品と比べると使いにくく感じたため、VSCodeをそのまま使えるPlatformIOに移行しようと決心しました。
この記事では、PlatformIOへStamp Picoのボード定義を追加する手順を説明します。

Stamp Picoの対応状況(2021/09/07)

環境 バージョン 状況
UIFlow Web Beta
UIFlow Desktop 1.0.17 ×
Arduino IDE
PlatformIO ×

残念ながらPlatformIOの対応ボードにStamp Picoは追加されていませんでした。
Stamp PicoはM5Stack Atomの機能縮小版で、プログラムの読み書きに使用するピンは同じなので、M5Stack Atomのボードを選択しても良いのですが、若干ピン配列の定義が異なっていたのが気になりボード定義を追加することにしました。

ところで、Arduino IDEの設定で指定する追加ボード定義に関して、M5Stack公式のものがStamp Picoに対応しているのですが、どうやらファイルサイズがおかしいようです。m5stack-1.0.9.zipのファイルサイズが35882376となっていますが、正しくは35882437です。私はgistに修正したものを置いて読み込ませました。
https://m5stack.oss-cn-shenzhen.aliyuncs.com/resource/arduino/package_m5stack_index.json

定義の追加手順

PlatformIOはインストールしてある前提で進めます。また、プラットフォームとしてEspressif32をインストールしておいてください。
また、インストールされているディレクトリを{PIODIR}で表します。
インストール時に特に設定していなければ%UserProfile%\.platformioです。

1. Espressif32にボード定義を追加

{PIODIR}\platforms\espressif32\boardsstamp-pico.jsonを追加します。

stamp-pico.json
{
  "build": {
    "arduino":{
      "ldscript": "esp32_out.ld"
    },
    "core": "esp32",
    "extra_flags": "-DARDUINO_STAMP_PICO",
    "f_cpu": "240000000L",
    "f_flash": "40000000L",
    "flash_mode": "dio",
    "mcu": "esp32",
    "variant": "stamp_pico"
  },
  "connectivity": [
    "wifi",
    "bluetooth",
    "ethernet",
    "can"
  ],
  "frameworks": [
    "arduino",
    "espidf"
  ],
  "name": "STAMP-PICO",
  "upload": {
    "flash_size": "4MB",
    "maximum_ram_size": 327680,
    "maximum_size": 4194304,
    "require_upload_port": true,
    "speed": 1500000
  },
  "url": "http://www.m5stack.com",
  "vendor": "M5Stack"
}

2. ピン配列定義の追加

{PIODIR}\packages\framework-arduinoespressif32\variantsstamp_picoというディレクトリを作成し、その中にpins_arduino.hを追加します。

pins_arduino.h
#ifndef Pins_Arduino_h
#define Pins_Arduino_h

#include <stdint.h>

#define EXTERNAL_NUM_INTERRUPTS 16
#define NUM_DIGITAL_PINS        40
#define NUM_ANALOG_INPUTS       16

#define analogInputToDigitalPin(p)  (((p)<20)?(esp32_adc2gpio[(p)]):-1)
#define digitalPinToInterrupt(p)    (((p)<40)?(p):-1)
#define digitalPinHasPWM(p)         (p < 34)

static const uint8_t TX = 1;
static const uint8_t RX = 3;

static const uint8_t SDA = 21;
static const uint8_t SCL = 22;

static const uint8_t SS    = 19;
static const uint8_t MOSI  = 26;
static const uint8_t MISO  = 36;
static const uint8_t SCK   = 18;

static const uint8_t G21 = 21;
static const uint8_t G22 = 22;
static const uint8_t G19 = 19;
static const uint8_t G26 = 26;
static const uint8_t G36 = 36;
static const uint8_t G18 = 18;
static const uint8_t G25 = 25;
static const uint8_t G32 = 32;
static const uint8_t G33 = 33;
static const uint8_t G1 = 1;
static const uint8_t G3 = 3;
static const uint8_t G0 = 0;

static const uint8_t DAC1 = 25;
static const uint8_t DAC2 = 26;

static const uint8_t ADC1 = 32;
static const uint8_t ADC2 = 33;
static const uint8_t ADC3 = 36;

#endif /* Pins_Arduino_h */

まとめ

以上でPlatformIOのボード定義の追加は完了です。M5Stackから発売されているESP32 Downloaderで接続しておけばDownloadモードなども気にせず書き込めます。

筆者はマイコン初心者なので、修正する箇所などあれば教えてください!!

今回、正式にPlatformIOでサポートされるまで待ちきれず自分でボード定義を追加しましたが、実はプルリクは送っていません。PlatformIOの更新以前にarduino-esp32が更新されていないため、まずはそちらを待ってからになるからです。M5StackのGitHubも確認しましたが、Stamp Picoに関する更新はほぼ皆無です。もっと言えばM5StackのArduinoIDE向けドキュメントのQuick StartにまだStamp Picoの解説が追加されてなかったりします。。。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7