背景
n-able-ArduinoとはNimBLE-Arduinoを作ったh2zeroさんが作ったnrf52向けのプログラムの環境です。n-able-Arduinoでnrf52を動かせば、NimBLE-Arduinoをnrf52で使えます。
使い方を把握したので備忘録として手順を記事に残します。
使ったもの
- ファームウェアを書き換え可能なように信号線を引き出したfeather-nrf52832 と stlink2
前回把握したopenocdとstlink2を使う方法を実現する構成を用意します。 - USB microBケーブル
nrf52へUSB経由でプログラムを書き込むためのケーブルです。 - プログラムを書き込むPC
PlatformIOでプロジェクトを作り動作確認しました。
n-ableのブートローダーを書き込む
stlink2でnrf52832にブートローダーを書き込みます。方法1 ブートローダーを単独で書き込む
今回書き込むのは利用する開発ボードに載っているマイコンnrf52832に対応した下記のブートローダーです。https://github.com/h2zero/n-able-Arduino/tools/nrf52832_serial_adabl.hex
上記のブートローダーを書き込むと、adafruilt-nrfutilを利用してUSBケーブル経由でプログラムの書き換えが可能になります。
ブートローダーをダウンロードし、前回把握したopenocdとstlink2を使う方法で書き込みます。
PATH_HEX=./nrf52832_serial_adabl.hex
openocd \
-f interface/stlink.cfg \
-f target/nrf52.cfg \
-c init \
-c "reset init" \
-c halt \
-c "nrf5 mass_erase" \
-c "program $PATH_HEX verify" \
-c "reset run" \
-c exit
書き込みが成功すると赤いLEDがじんわり点滅を繰り返します。
方法2 PlatformIOでプロジェクトのコードと共にブートローダーを書き込む
PlatformIOでn-able環境で該当するブートローダーを使うプロジェクトをビルドし、uploat_protocolをstlinkと指定すれば、PlatforIOがOpenOCDのコマンドを組み立ててstlink2経由で書き込んでくれます。platformio.ini
[env:nable]
platform = https://github.com/h2zero/platform-n-able.git@^1.0.0
framework = arduino
lib_deps =
https://github.com/h2zero/NimBLE-Arduino
board = adafruit_feather_nrf52832
; board_bootloader = none
board_bootloader = adafruit
; upload_protocol = adafruit-nrfutil
upload_protocol = stlink
src/main.cpp
#include <Arduino.h>
#include <NimBLEDevice.h>
#define PIN_LED LED_BLUE
// #define PIN_LED LED_RED
void setup() { pinMode(PIN_LED, OUTPUT); }
void loop() {
digitalWrite(PIN_LED, HIGH);
delay(1000);
digitalWrite(PIN_LED, LOW);
delay(1000);
}
uploadコマンドを実行するとmain.cppとadafruitのUSBアップロード対応のブートローダーを含んだプログラムがstlink経由で書き込まれます。
書き込み後はupload_protocolをadafruit-nrfutilにすると、featherのUSB経由でプログラムを書き込めます。
pio run -t upload
USB経由でのアップロードを使わない場合は、board_bootloaderをnoneにしても良いです。
書き込みが成功するとmain.cppの処理通り青色LEDが1秒毎に点滅します。
PlatformIOでUSBとadafruit-nrfutil経由でプログラムを書き込む
n-ableのadafruit対応ブートローダーを書き込んだ場合にadafruit-nrfutil経由でプログラムの書き込みが可能です。adafruit本家のブートローダーはn-able環境ではないため、繰り返しになりますがstlinkなどを利用してn-ableのブートローダーを書き込む必要があります。
外すのが手間だったのでstlinkは繋いだまま、featherのUSBケーブル経由でプログラムを書き込みます。
platformio.iniのupload_protocolをadafrult-nrfutilにすれば、USB経由でプログラムを書き込めます。
platformio.ini
[env:nable]
platform = https://github.com/h2zero/platform-n-able.git@^1.0.0
framework = arduino
lib_deps =
https://github.com/h2zero/NimBLE-Arduino
board = adafruit_feather_nrf52832
; board_bootloader = none
board_bootloader = adafruit
upload_protocol = adafruit-nrfutil
; upload_protocol = stlink
stlinkで書き込んだプログラムと処理を変化させるべく、今度はLED_REDを光らせます。
src/main.cpp
#include <Arduino.h>
#include <NimBLEDevice.h>
// #define PIN_LED LED_BLUE
#define PIN_LED LED_RED
void setup() { pinMode(PIN_LED, OUTPUT); }
void loop() {
digitalWrite(PIN_LED, HIGH);
delay(1000);
digitalWrite(PIN_LED, LOW);
delay(1000);
}
USBケーブルをfeatherに繋いでプログラムを書き込みます。
pio run -t upload
main.cppの通り赤いLEDが1秒毎に点滅したら書き込み成功です。
おわり
n-ableの環境でNimBLE-arduinoをincludeしたcppプログラムをnrf52832に書き込んで動かせました。ESP32でNimBLE-arduinoに馴染みがある自分としては、同じ関数でnrf52のBLEも使えるのが嬉しいです。
参考
n-able-ArduinoNimBLE-Arduino
feather-nrf52832のブートローダーをstlink2とopenocdで書き込む



0 件のコメント :
コメントを投稿