筆者はマイコン初心者です。普段は趣味でプログラミングをしています。
開発環境として、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\boards
に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\variants
にstamp_pico
というディレクトリを作成し、その中に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の解説が追加されてなかったりします。。。