2021/4/20++
arduinoボードにリセットをかけて書き込み用ストレージを出現させるスクリプトを追加した。
2021/4/12
uf2やmbedの書き込みのドライブを自動検出に改良した。
2021/3/10
さらにextra_script.pyを改良して
mbed,uf2のファイルによる書き込みも自動化した。
2021/3/8+
さらにextra_script.pyを改良して
XIAO,wio-terminalの書き込みをサポートした。
2021/3/4
さらにextra_script.pyを改良して
書き込み用ストレージがないボード(UNO,M5ATOMなど)でも
プログラムが書き込めるようにした。
2021/3/1
extra_script.pyを改良して
uf2まで自動生成するようにした。
2021/2/27
初版
WSL2 platformio Pico-SDK
概要
WSL2(Windows Subsystem for Linux version2)でのplatformioやPico-SDKの利用方法
WSL2でplatformioやPico-SDKを利用した場合、WSL2はUSBデバイスをサポートしていないので、そのままでは、ビルドまではできるが、書き込みができない。本記事では、その解決方法について述べる。
(ホストはubuntu20.04を想定している)
基本的な考え方は、書き込み用ストレージが現れるボードに限定されるが、
書き込み用ストレージのためのファイル(.uf2または.hex)を作成して、
それをWSL2側からPowerShellを使って該当ストレージにコピーすることで
書き込みを行う。
したがって、書き込みストレージがないボード(Arduno-UNOやESP32ボードなど)は書き込めないが、
それ以外のボード(XIAO,Wio-Terminal,Nucleo,micro:bitなど)は書き込みが可能となる。
追記1:
書き込みストレージがないボード(Arduno-UNO、M5ATOM(ESP32ボード))でも、windows側の書き込みツールを利用することでプログラムが書き込めるよう
extra_script.pyを改良した。(2021/3/4)
追記2:
XIAO、wio-terminalにおいて、
windows側の書き込みツール(bossac)を利用することでプログラムが書き込めるよう
extra_script.pyを改良した。(2021/3/8)
追記3:
mbedボードとuf2ファイルによる書き込みをサポートしているボードにおいて
自動的に書き込むように
extra_script.pyを改良した。(2021/3/10)
準備(インストール)
platformioやPico-SDKのインストールについては
以下の記事がほとんどそのまま参考になる。
(ただし、udev登録などUSB関連は除く)
arduinoフレームワーク用platformio.ini集
PicoボードにPico_SDKでC言語をビルドする
ビルド時にhexファイルが必要となるので
platformio.iniに以下の行を追加する:
# 任意の位置で良いが、例えば「board=」の次の行に追加する
extra_scripts = post:extra_script.py
実行するスクリプトをカレントディレクトリに
以下の内容で作成する:
extra_script.py
Import("env")
# Custom HEX from ELF
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
env.VerboseAction(" ".join([
"$OBJCOPY", "-O", "ihex", "-R", ".eeprom",
"$BUILD_DIR/${PROGNAME}.elf", "$BUILD_DIR/${PROGNAME}.hex"
]), "Building $BUILD_DIR/${PROGNAME}.hex")
)
参照:Add a new option which could generate .hex file in platformio.ini #240
ここで「pio run」の実行すると、.hexが生成される。
mbed系ボード(nucleo,micro:bitなど)は、書き込むファイルのフォーマットが.hexなので、
以下の手順で書き込みができる:
PowerShell.exe copy .pio/build/*/firmware.hex e:
ただし、「e:」は書き込みストレージのドライブ・レターなので環境に依存するので自分の環境でのドライブ・レターに置き換える。
(windows側のエクスプローラーなどで該当のドライブ・レターを確認できる)
Microchip(Almel)SAMD21/SAMD51ボード(XIAO,Wio-Terminalなど)の場合、書き込むフォーマットは、.uf2なので変換する必要がある。
このため以下の手順でツールをインストールする:
wget https://raw.githubusercontent.com/microsoft/uf2/master/utils/uf2conv.py
chmod +x uf2conv.py
参照:
uf2conv -- Packing and unpacking UF2 files
XIOA(SAMD21)ボードの場合、以下のコマンドで.uf2に変換する:
./uf2conv.py .pio/build/*/firmware.hex -f 0x68ed2b88 -c -o hex2.uf2
Wio-Termial(SAMD51)ボードの場合、以下のコマンドで.uf2に変換する:
./uf2conv.py .pio/build/*/firmware.hex -f 0x55114460 -c -o hex2.uf2
他のチップに対応する場合、「-f xxxxx」のxxxxxがfamilyID(=ChipID)なので、その部分を該当IDに置き換える。
familyIDは以下を参照のこと:
Family list vs familyID
.uf2に変換後、以下の手順で書き込む:
PowerShell.exe copy hex2.uf2 e:
ただし、「e:」は書き込みストレージのドライブ・レターなので環境に依存するので自分の環境でのドライブ・レターに置き換える。
(windows側のエクスプローラーなどで該当のドライブ・レターを確認できる)
なお、以下のスクリプトで書き込みを自動化できる:
cp_wiot.sh
# SAMD51用
#!/bin/bash
./uf2conv.py .pio/build/*/firmware.hex -f 0x55114460 -c -o hex2.uf2
PowerShell.exe copy hex2.uf2 e:
注意:familyIDがチップごとに異なることに注意のこと。
Pico-SDKの場合
ビルドすると、自動的に.uf2まで作成するので、以下の手順で書き込むことができる:
PowerShell.exe copy xxxx.uf2 e:
ただし、「e:」は書き込みストレージのドライブ・レターなので環境に依存するので自分の環境でのドライブ・レターに置き換える。
(windows側のエクスプローラーなどで該当のドライブ・レターを確認できる)
以下のように改良して、uf2生成までを自動化した:
extra_script.py
Import("env")
board = env.GetProjectOption("board")
familyID = 'undefined!'
if "seeed_wio_terminal" == board:
familyID = "0x55114460"
if "adafruit_feather_m4" == board:
familyID = "0x55114460"
if "adafruit_grandcentral_m4" == board:
familyID = "0x55114460"
if "seeed_xiao" == board:
familyID = "0x68ed2b88"
if "adafruit_circuitplayground_m0" == board:
familyID = "0x68ed2b88"
if "nucleo_f103rb" == board:
familyID = "mbed"
if "nucleo_f303k8" == board:
familyID = "mbed"
if 'mbed' == familyID:
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
env.VerboseAction(" ".join([
"$OBJCOPY", "-O", "ihex", "-R", ".eeprom",
" $BUILD_DIR/${PROGNAME}.elf", "$BUILD_DIR/${PROGNAME}.hex"
]), "(1)Building $BUILD_DIR/${PROGNAME}.hex")
)
elif 'undefined!' != familyID:
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
env.VerboseAction(" ".join([
"$OBJCOPY", "-O", "ihex", "-R", ".eeprom",
" $BUILD_DIR/${PROGNAME}.elf", "$BUILD_DIR/${PROGNAME}.hex"
]), "(1)Building $BUILD_DIR/${PROGNAME}.hex")
)
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
env.VerboseAction(" ".join([
"python3 uf2conv.py $BUILD_DIR/${PROGNAME}.hex -f ", familyID,
" -c -o $BUILD_DIR/${PROGNAME}.uf2"
]), "(2)Converting $BUILD_DIR/${PROGNAME}.uf2")
)
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
env.VerboseAction(" ".join([
"cp $BUILD_DIR/${PROGNAME}.uf2 ."
]), "(3)Copying ${PROGNAME}.uf2 in current dir")
)
以下が改良点になる:
(1)boardチェック
boardをチェックして自動的にfamilyIDを設定する。
# 定義がないboardの場合、追加する必要あり。
(2)mbed対応
boardをチェックしてmbed系ボードの場合、自動的にhexを生成する。
(2)uf2をカレントディレクトリにコピーする
書き込みドライブにコピーする際の利便性の向上
プログラミング・ヒント:
以下の部分において「 "$BUILD_DIR/${PROGNAME}.elf",」は、
「 "$BUILD_DIR/${PROGNAME}.hex",」にしたくなるが、
通常のビルド・プロセスで生成したファイルである必要がある。
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
以下のように、さら改良して、UNO,M5ATOM,XIAO,wio-terminal,mbedボートやuf2ファイルでの書き込みするボードを書き込めるようにした:
extra_script.py
Import("env", "projenv")
board = env.GetProjectOption("board")
ext = env.GetProjectOption("ext")
print("ext:"+ext)
familyID = 'undefined!'
if "seeed_wio_terminal" == board:
familyID = "0x55114460"
if "adafruit_feather_m4" == board:
familyID = "0x55114460"
if "adafruit_grandcentral_m4" == board:
familyID = "0x55114460"
if "seeed_xiao" == board:
familyID = "0x68ed2b88"
if "adafruit_circuitplayground_m0" == board:
familyID = "0x68ed2b88"
if "nucleo_f103rb" == board:
familyID = "mbed"
if "nucleo_f303k8" == board:
familyID = "mbed"
if "bbcmicrobit" == board:
familyID = "mbed"
if 'esp32dev' == board:
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
env.VerboseAction(" ".join([
"esptool.py --chip esp32 elf2image $BUILD_DIR/${PROGNAME}.elf"
]), "(1)Building $BUILD_DIR/${PROGNAME}.bin")
)
if '' != ext:
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
env.VerboseAction(" ".join([
"./"+ext
]), "(2)Doing something for ESP32 board")
)
elif 'm5stick-c' == board:
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
env.VerboseAction(" ".join([
"esptool.py --chip esp32 elf2image $BUILD_DIR/${PROGNAME}.elf"
]), "(1)Building $BUILD_DIR/${PROGNAME}.bin")
)
if '' != ext:
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
env.VerboseAction(" ".join([
"./"+ext
]), "(2)Doing something for m5Stick-c/M5Atom board")
)
if 'uno' == board:
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
env.VerboseAction(" ".join([
"$OBJCOPY", "-O", "ihex", "-R", ".eeprom",
" $BUILD_DIR/${PROGNAME}.elf", "$BUILD_DIR/${PROGNAME}.hex"
]), "(1)Building $BUILD_DIR/${PROGNAME}.hex")
)
if '' != ext:
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
env.VerboseAction(" ".join([
"./"+ext
]), "(2)Doing something for UNO board")
)
if 'mbed' == familyID:
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
env.VerboseAction(" ".join([
"$OBJCOPY", "-O", "ihex", "-R", ".eeprom",
" $BUILD_DIR/${PROGNAME}.elf", "$BUILD_DIR/${PROGNAME}.hex"
]), "(1)Building $BUILD_DIR/${PROGNAME}.hex")
)
if '' != ext:
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
env.VerboseAction(" ".join([
"./"+ext
]), "(2)Doing something for mbed board")
)
elif 'undefined!' != familyID:
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
env.VerboseAction(" ".join([
"$OBJCOPY", "-O", "binary",
" $BUILD_DIR/${PROGNAME}.elf", "$BUILD_DIR/${PROGNAME}.bin"
]), "(0)Building $BUILD_DIR/${PROGNAME}.bin")
)
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
env.VerboseAction(" ".join([
"$OBJCOPY", "-O", "ihex", "-R", ".eeprom",
" $BUILD_DIR/${PROGNAME}.elf", "$BUILD_DIR/${PROGNAME}.hex"
]), "(1)Building $BUILD_DIR/${PROGNAME}.hex")
)
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
env.VerboseAction(" ".join([
"python3 uf2conv.py $BUILD_DIR/${PROGNAME}.hex -f ", familyID,
" -c -o $BUILD_DIR/${PROGNAME}.uf2"
]), "(2)Converting $BUILD_DIR/${PROGNAME}.uf2")
)
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
env.VerboseAction(" ".join([
"cp $BUILD_DIR/${PROGNAME}.uf2 ."
]), "(3)Copying ${PROGNAME}.uf2 in current dir")
)
if '' != ext:
env.AddPostAction(
"$BUILD_DIR/${PROGNAME}.elf",
env.VerboseAction(" ".join([
"./"+ext
]), "(4)Doing something for uf2 board")
)
動作原理:
WSL2側で書き込みに必要なファイルを作成したあと、
windows10側のc:/tempのデイレクトリに、そのファイルをコピーして
PowerShell経由でwindows側の書き込みツールを起動して
ボードにプログラムを書き込む。
準備として以下を実行しておく:
#WSL2側
#ファイルをwindows10側に引き渡すディレクトリを作成する
mkdir /mnt/c/temp
#windows10側(PowerShell側)
#windows10側の書き込みツールをインストールする
scoop install avrdude
pio install esptool
# bossacをインストールする
cd $HOME
mkdir msi
cd msi
wget https://github.com/shumatech/BOSSA/releases/download/1.9.1/bossa-x64-1.9.1.msi
Start-Process -filepath "$HOME\msi\bossa-x64-1.9.1.msi"
# 実行パスを設定する
$Env:Path += ";C:\Program Files (x86)\BOSSA\"
# 別の機能が割り当てられているaliasを削除する
del alias:curl
del alias:wget
# curl, wgetをインストールする
scoop install curl
scoop install wget
# その他の必要となるツールをインストールする
scoop install git
・参照:WindowsコマンドラインツールScoopのすすめ(基礎編)
・注意:設定した実行パスやalias削除は、セッションが閉じると無効になるので
PowerScriptの以下の起動スクリプト
$HOME\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
の末尾に次の行を追加する。(スクリプトファイルがない場合、新規作成する)
del alias:curl
del alias:wget
$Env:Path += ";C:\Program Files (x86)\BOSSA\"
UNOの場合、以下のファイルをWSL2側に用意する:
platformio.ini
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:uno]
platform = atmelavr
board = uno
extra_scripts = post:extra_script.py
ext = f_UNO.sh
framework = arduino
#build_flags = -Dxxxx
upload_protocol = arduino
monitor_speed = 115200
lib_ldf_mode = deep+
#lib_deps =
f_UNO.sh
#!/bin/bash
rm /mnt/c/temp/*
cp $HOME/.platformio/packages/tool-avrdude/avrdude.conf /mnt/c/temp/
cp .pio/build/uno/firmware.hex /mnt/c/temp/
PowerShell.exe avrdude -v -p atmega328p -C c:/temp/avrdude.conf -c arduino -b 115200 -D -P COM14 -U flash:w:c:/temp/firmware.hex:i
exit 0
・COM14は(window10側の)通信ポートになるが環境依存なので、自分の環境での通信ポートに変更すること。
・実行属性を与えること。
M5ATOMの場合:
platformio.ini
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:esp32dev]
platform = espressif32
board = m5stick-c
extra_scripts = post:extra_script.py
ext = f_M5ATOM.sh
framework = arduino
build_flags = -DM5ATOM
monitor_speed = 115200
lib_ldf_mode = deep+
lib_deps =
# use M5Atom lib
3113
# use "FastLED"
126
f_M5ATOM.sh
#!/bin/bash
rm /mnt/c/temp/*
cp $HOME/.platformio/packages/framework-arduinoespressif32/tools/sdk/bin/bootloader_dio_40m.bin /mnt/c/temp/
cp .pio/build/esp32dev/partitions.bin /mnt/c/temp/
cp $HOME/.platformio/packages/framework-arduinoespressif32/tools/partitions/boot_app0.bin /mnt/c/temp/
cp .pio/build/esp32dev/firmware.bin /mnt/c/temp/
PowerShell.exe esptool.py --chip esp32 --baud 1500000 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x1000 c:/temp/bootloader_dio_40m.bin 0x8000 c:/temp/partitions.bin 0xe000 c:/temp/boot_app0.bin 0x10000 c:/temp/firmware.bin
exit 0
・自動検出になっているので通信ポートの設定はない。
・実行属性を与えること。
XIAOの場合:
platformio.ini
<ヘッダー省略>
[env:seeed_xiao]
platform = atmelsam
board = seeed_xiao
extra_scripts = post:extra_script.py
ext = f_XIAO.sh
framework = arduino
build_flags = -DXIAO
upload_protocol = sam-ba
monitor_speed = 115200
lib_ldf_mode = deep+
lib_deps =
# Accept new functionality in a backwards compatible manner and patches
olikraus/U8g2 @ ^2.28.7
f_XIAO.sh
#!/bin/bash
rm /mnt/c/temp/*
cp .pio/build/seeed_xiao/firmware.bin /mnt/c/temp/
PowerShell.exe bossac -p COM18 -i -e -w -v -R -o 0x2000 c:/temp/firmware.bin
exit 0
・COM18は(window10側の)通信ポートになるが環境依存なので、自分の環境での通信ポートに変更すること。
・実行属性を与えること。
wio-terminalの場合:
platformio.ini
<ヘッダー省略>
[env:seeed_wio_terminal]
platform = atmelsam
board = seeed_wio_terminal
extra_scripts = post:extra_script.py
ext = f.WIOT.sh
framework = arduino
build_flags = -DWIO_TERMINAL
upload_protocol = sam-ba
monitor_speed = 115200
lib_ldf_mode = deep+
lib_deps =
<以下、省略>
f_WIOT.sh
#!/bin/bash
rm /mnt/c/temp/*
cp .pio/build/seeed_wio_terminal/firmware.bin /mnt/c/temp/
PowerShell.exe bossac -p COM15 -i -e -w -v -R -o 0x4000 c:/temp/firmware.bin
exit 0
・COM15は(window10側の)通信ポートになるが環境依存なので、自分の環境での通信ポートに変更すること。
・実行属性を与えること。
wio-terminalの場合(ファイルコピーによる書き込み):
platformio.ini
<ヘッダー省略>
[env:seeed_wio_terminal]
platform = atmelsam
board = seeed_wio_terminal
extra_scripts = post:extra_script.py
ext = f_UF2.sh
framework = arduino
build_flags = -DWIO_TERMINAL
upload_protocol = sam-ba
monitor_speed = 115200
lib_ldf_mode = deep+
lib_deps =
<以下、省略>
/***** 書き込みドライブを自動検出にしたので、以下、廃止 *****
f_UF2.sh
#!/bin/bash
rm /mnt/c/temp/*
cp firmware.uf2 /mnt/c/temp/
PowerShell.exe copy c:/temp/firmware.uf2 e:
exit 0
・「e:」はドライブ・レターになるが環境依存なので、自分の環境のものに変更すること。
・実行属性を与えること。
***********************************************************/
// 改良版(2021/4/12)
f_UF2.sh
#!/bin/bash
rm /mnt/c/temp/*
cp firmware.uf2 /mnt/c/temp/
DRIVE=`PowerShell.exe get-volume|grep FAT|awk '{print $1}'`
if [ "${DRIVE}" = "" ]; then
echo "bootloader-mode is not activated!"
exit 1
fi
PowerShell.exe copy c:/temp/firmware.uf2 ${DRIVE}:
exit 0
・書き込みのドライブを自動検出に改良した。
(ただし、接続しているドライブとしてFATタイプが1台である前提)
・実行属性を与えること。
F103RBの場合(ファイルコピーによる書き込み):
platformio.ini
<ヘッダー省略>
[env:nucleo_f103rb]
platform = ststm32
board = nucleo_f103rb
extra_scripts = post:extra_script.py
ext = f_MBED.sh
framework = arduino
build_flags = -DNUCLEO_F103RB
monitor_speed = 115200
lib_ldf_mode = deep+
upload_protocol = stlink
#lib_deps =
/***** 書き込みドライブを自動検出にしたので、以下、廃止 *****
f_MBED.sh
#!/bin/bash
rm /mnt/c/temp/*
cp .pio/build/*/firmware.hex /mnt/c/temp/
PowerShell.exe copy c:/temp/firmware.hex e:
exit 0
・「e:」はドライブ・レターになるが環境依存なので、自分の環境のものに変更すること。
・実行属性を与えること。
***********************************************************/
// 改良版(2021/4/12)
f_MBED.sh
#!/bin/bash
rm /mnt/c/temp/*
cp .pio/build/*/firmware.hex /mnt/c/temp/
DRIVE=`PowerShell.exe get-volume|grep FAT|awk '{print $1}'`
if [ "${DRIVE}" = "" ]; then
echo "MBED board is not connected!"
exit 1
fi
PowerShell.exe copy c:/temp/firmware.hex ${DRIVE}:
exit 0
・書き込みのドライブを自動検出に改良した。
(ただし、接続しているドライブとしてFATタイプが1台である前提)
・実行属性を与えること。
ビルド/書き込み
以下を実行する:
pio run -t clean
pio run
# extra_script.py(とf_xxxx.sh)のほうで書き込みを行うので「-t upload」は不要となる
対応ボードの追加:
現状は、UNO,M5ATOM,XIAO,wio-terminal,mbedボードになるが
対応ボードを追加する場合、
「extra_script.py」の変更と、実際の書き込みを実行する「f_xxxx.sh」を追加することになる。
「f_xxxx.sh」には実際の書き込みツールのコマンドラインの記述が必要となるが、
それを知るには、[pio run -v -t upload]を実行すると実際のコマンドラインが表示されるので
それを参考に「f_xxxx.sh」に記述することになる。(当然のことながら、windows10側にインストールされていないツールであれば、windows10側に、そのツールをインストールする必要がある)
(参考)PowerShell.exe get-volume の出力例
raspberry-pi-picoを接続した場合:
$ PowerShell.exe get-volume
DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus
----------- ------------ -------------- --------- ------------ ----------------
E RPI-RP2 FAT Removable Healthy OK
D Volume NTFS Fixed Healthy OK
NTFS Fixed Healthy OK
System NTFS Fixed Healthy OK
C Windows NTFS Fixed Healthy OK
micro:bitを接続した場合:
$ PowerShell.exe get-volume
DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus
----------- ------------ -------------- --------- ------------ ----------------
D Volume NTFS Fixed Healthy OK
NTFS Fixed Healthy OK
System NTFS Fixed Healthy OK
C Windows NTFS Fixed Healthy OK
E MICROBIT FAT Removable Healthy OK
wio-terminalを接続した場合:
$ PowerShell.exe get-volume
DriveLetter FriendlyName FileSystemType DriveType HealthStatus OperationalStatus
----------- ------------ -------------- --------- ------------ ----------------
D Volume NTFS Fixed Healthy OK
NTFS Fixed Healthy OK
System NTFS Fixed Healthy OK
C Windows NTFS Fixed Healthy OK
E Arduino FAT Removable Healthy OK
arduinoボードをリセットするスクリプト(2021/4/20)
USBシリアルが有効のボードでシリアル経由でリセットをかけて、書き込み用ストレージを出現させるスクリプトを紹介する。(raspberry-pi-picoボードでも有効)
windows側の準備:
.wslconfigを以下のように設定する:
C:\Users\USER\.wslconfig
[wsl2]
localhostForwarding=true
以下を実行する:
#以下をインストールする(scoopがインストールされている前提)
scoop install python
scoop install grep
scoop install gawk
pip install pyserial
# スクリプトを置くディレクトリを作成する
mkdir ¥py
以下のスクリプトを用意する:
C:¥py¥reset_arduino.py
import sys
args = sys.argv
import serial
try:
arduino = serial.Serial(args[1], baudrate=1200)
arduino.close()
except serial.SerialException as e:
pass
C:¥py¥reset_arduino.ps1
$env:COMPORT=(Get-WMIObject Win32_SerialPort | Select-Object DeviceID | grep COM | gawk 'END{print}')
python.exe c:\py\reset_arduino.py $env:COMPORT
・複数のシリアルが接続されている場合、一番最近接続されたものが選ばれる。
状況を単純化するためにも書き込みするボードのみを接続することを進める。
WSL側:
wsl.confは以下のように設定する:
/etc/wsl.conf
[automount]
enabled=true
mountFsTab=true
root="/mnt/"
options=""
crossDistro=true
[network]
generateHosts=true
generateResolvConf=true
[interop]
enabled=true
appendWindowsPath=true
reset_arduino.sh
#!/bin/bash
PowerShell.exe C:/py/reset_arduino.ps1
・実行属性を与えること
実行例
以下を実行するとボードにリセットがかかり書き込み用ストレージが出現する。
# ボードをホストとUSBで接続する
./reset_arduino.sh
# この時点で接続されているボードがリセットされ書き込み用ストレージが出現する
参考情報
WSL関連:
・wsl.conf と .wslconfig
・WSLのアーキテクチャ
scoop関連:
・scoopインストール方法(windows10にplatformioをインストールする(scoop版))
・WindowsコマンドラインツールScoopのすすめ(基礎編)
・Windowsでパッケージ管理したいなら、先ずScoopより始めよ
・PowerShell コンソール内で curl や wget が実行できないとお嘆きのあなたへ
書き込みツール関連:
・BOSSA
・AVRDUDE - AVR Downloader/UploaDEr
・esptool.py
・Open source version of the STMicroelectronics STlink Tools
・stlink Tools Tutorial
micro:bit関連:
・micro:bit Arduino/MBED開発ツール(v2)(micro:bit-v2対応,linux版)
・micro:bit v2 で遊ぶ
platformio関連:
https://docs.platformio.org/en/latest/platforms/creating_board.html
Installation
1.Create boards directory in core_dir if it doesn’t exist.
2.Create myboard.json file in this boards directory.
3.Search available boards via pio boards command. You should see myboard board.
・PlatformIO Core (CLI)
・Arduino-IDEとPlatformioのコンパイラーの挙動の違いについて
・ubuntu20.04をインストールする
・【小ネタ】WSL利用時のRaspberry Pi Picoへの書き込みをコマンドラインから行う
・Advanced Scripting - Before/Pre and After/Post actions
以上