スキップしてメイン コンテンツに移動

nRF52832をST-LINK v2 + PlatformIOで開発する

今回は『ST-LINK v2』と『PlatformIO』を使って『nRF52832』を開発手順をブログにしていきます. 今回ブログにしようとしたきっかけとして、『PlatformIO』で『nRF52832』を『ST-LINK v2』で開発しようとした際プログラムを書き込める様にはなったもののLチカができず、原因解明に半日を費やしたため共有しようと思ったためです。

学べること

  • ST-LINK v2 + PlatformIO + nRF52832の開発環境
  • platformio.ini(PlatformIOの設定ファイル)での設定

前提準備と注意

今回使用するもの

『nRF52832』は『MDBT42Q』というモジュールに搭載されているBLEチップです。 『MDBT42Q』モジュール単体はSwitch Scienceにて購入できます。

nRF52832搭載BLEモジュール MDBT42Q--販売終了www.switch-science.com

しかし『MDBT42Q』を開発する際非常に高度で繊細な半田付け技術を要するので、今回の開発にはI/Oが使いやすい大きさになって同モジュールを搭載した『Adafruit Feather nRF52 Bluefruit LE』を使用していきます。

追記: 2020/02/23
注意: 本記事の方法でプログラムを書き込むとAdafruitのブートローダが削除されて『Adafruit Feather nRF52 Bluefruit LE』としてUSB(UART)からプログラムが書き込みできなくなるので注意してください。

Adafruit Feather nRF52 Bluefruit LEwww.switch-science.com

Adafruit Feather nRF52 Bluefruit LEの加工

『Adafruit Feather nRF52 Bluefruit LE』は付属のUSB端子から書き込みができる様になっていますが、『ST-LINK v2』を使う場合はボード中央部の半田付けされていない部分を使います。 この部分から必要なピンから線を出して『ST-LINK v2』に接続できる様にします。 今回使うピン配列は以下の様になります。

書き込みピンの配列

このピンから『ST-LINK v2』から書き込むための線を半田付けしていきます。 実際に半田付けした写真も用意しました。

半田付け後



配線

必要な線が出せたので、実際に書き込むための配線をしていきます。

ST-LINK v2Adafruit Feather nRF52 Bluefruit LE
3.3V3.3V
GNDGND
SWDIOSWDIO
SWCLKSWCLK

これで配線は終了です.

PlatformIOでの準備

『PLatformIO』ではいつも通りpio initplatformio.iniを生成しますが、この時ボードは『nrf52_dk』を指定するので、コマンドでpio init -b nrf52_dkを実行します。 すると、生成されたplatformio.iniの内容は以下の様になると思います。

[env:nrf52_dk]
platform = nordicnrf52
board = nrf52_dk
framework = arduino

ここに今回は『ST-LINK v2』で書き込むので以下の様に追記します。

[env:nrf52_dk]
platform = nordicnrf52
board = nrf52_dk
framework = arduino

# 以下追記
upload_protocol = stlink

この状態でプログラムを書いて書き込むと、書き込み自体は成功して一見問題ない様に見えますが実際にプログラムは動きません。 原因は、定義されているボード情報の中のvariantnRF52DKとなっているためです。 これをGenericにするためにplatformio.iniに追記していきます。 ついでにその他のオプションも追記していきます。

[env:nrf52_dk]
platform = nordicnrf52
board = nrf52_dk
framework = arduino
upload_protocol = stlink

# 以下追記

# チップを定義
board_build.mcu = nrf52832 

# 動作周波数を定義
board_build.f_cpu = 64000000L

# BLEライブラリを使うために記述
build_flags = -DNRF52_S132 

# variantをGenericに変更
board_build.variant = Generic

platformio.iniをこの状態にすることで書き込み成功とプログラムが動きます。 ちなみに『nordicnrf52』プラットフォームに定義されているボードには『adafruit_feather_nrf52832』もありますが、これは『ST-LINK』の書き込みに現在は対応していません。 『ST-LINK』の書き込みに対応した全ボードは以下のリンクから確認できます。

docs.platformio.org

おまけ

今回使用した『ST-LINK v2』はAmazonから購入したものでしたが、私が個人で購入したものはAliexpressから購入したものでした。 上で紹介した手順で個人の『ST-LINK v2』で書き込みを行ったところなぜかデバイス(nRF52832)が見当たらないとエラーが出てしまいおかしいなと調査したところ、なぜか片側の3.3Vからの電圧が0Vでおかしいなと思いので中を開いてみると、なんとピンが片側だけ半田付けされていませんでした。 さらに、USB端子がなぜかぐらついていましたがこれはUSB端子の爪が半田付けされてないのが原因でした。

半田付けがされてなかった。。

写真は半田付けした後のものですが、これで書き込みもできUSBの耐久度も増しました。 同じ現象がある方は参考にしていただければと思います。

まとめ

  • board_build.variantGenericにすることで書き込める。
  • 『PlatformIO』で『ST-LINK』を使って開発できるボードとできないボードがある。
  • 『ST-LINK v2』の互換機にはたまに半田不良がある。

コメント

このブログの人気の投稿

Phaser3 + Typescriptを使ってRPGゲームの基礎を作ろう!その2

前回の記事 に引き続きPhaser3+Typescriptを使って RPG の基礎を作っていきます。 この記事は前回の記事を呼んだ前提で説明していきますので、ぜひそちらを先に読むことをお勧めします。 また、今回の記事は前回よりも難易度と内容量が上がっていますが、記事の最後に作業後の リポジトリ のリンクがありますので、そちらを先にダウンロードしてそちらと比較しながら学習することができます。 前回まで作成した状態のプログラムが以下の リポジトリ からダウンロードできますので前回まででうまくいっていない方は参考にしてみてください。 github.com 最終目標(再掲) ・Phaser3とTypescriptで RPG ゲームの基礎を作る。 ・Phaser3をTypescriptで使う方法を学ぶ ・Phaser3の使い方を学ぶ 今回の目標 ・ゲームの作り方の断片を知る ・キャラの表示できるようにする ・キャラを移動できるようにする ・当たり判定をつける ・ NPC の追加してみる ・話しかけられるようにする 開発前提(再掲) ・Nodejsの環境・知識がある ・ Javascript ・Typescriptがある程度かける ・当ページ紹介の環境を試す場合はgit・ github の知識がある 使用した主要Nodeモジュール(再掲) ・typescript(Typescriptの コンパイル 用) ・phaser(フロントの Javascript 用ゲームライブラリ) ・live-server(ソースを監視してブラウザのページをリロード) ・ts-loader(webpackがTypescriptをバンドルする用)webpack(言わずと知れたモジュール依存をいい感じに解決しバンドルする) ・webpack- cli (webpackを コマンドライン で使用するのに必要) 注:各Nodeモジュールバージョンは後述 当ブログ仕様の画像素材の注意点 当ブログで使用する画像素材は『 ピポヤ倉庫 』より許可なしで無償再配布・改変が認められたものを改変して作成されたものです。 中には許可なく再配布・改変してはいけない素材もインターネット上には多く存在するのでそれらを使用するときは十分に規約を呼んでから使用しましょう。 1. キャラの表示 想定画面 今回は、はじめにキャラつまり操作

M5Stackで、においセンサー(TGS2450)を使ってみる。(LCDに表示編)

今回は、においセンサー(TGS2450)から取得したデータをM5Stackの LCD にグラフ表示をしていきます。 今回主に使用したもの M5Stack 10Ω抵抗 5本 Pch  MOSFET  2SJ334(スイッチとして利用) M5StackSideBB(ブレッドボード) M5Stackのピンはそのままだと配線するとき手間がかかるかと思いますので、今回はM5StackSideBBを利用しました。 ブレッドボードも付いているので、手軽に電子工作できるので個人的にオススメです。 SideBB for M5Stack www.switch-science.com 諸注意 本ブログのプログラムはArduinoIDEまたはPlatformIOでM5Stackの開発ができる状態であること前提のものですので、各自導入をお願いします。 過去に Windows のArduinoIDEで M5Stackの開発環境を構築する記事 があるので、参考にしてください。 においセンサー(TGS2450)について 今回使用したセンサーは 秋月電子通商 で購入できます。 http://akizukidenshi.com/catalog/g/gP-00989/ akizukidenshi.com TGS2450には4つのピンがあり、使用するのはそのうちの3本でヒーターを温めるピン、センサー情報を得るピン、GNDがあります。 ここで注意したいのは、ヒーター電圧は1.6Vと記述されているのでM5Stackで利用するときは分圧して3.3Vを1.6V近くまでに降圧することをお勧めします。 TGS2450のセンサーは可変抵抗になっており、データシートには5.62kΩ〜56.2kΩの間を抵抗が変化し、においが強いとより低くなると記述されていました。 よって、センサーの値をM5Stackで取得するにはセンサー抵抗と外部に接続する任意の値の抵抗による分圧回路によって求めることができます。 TGS2450の動作方法は、250ms周期でセンサーに電圧を5ミリ秒on、245ミリ秒offの状態にしてヒーターは8ミリ秒on、242ミリ秒offにすることで値を取得します。 配線 においセンサーとM5Stackの配線 上の図が配線図です。 30Ωの抵抗は10Ωの抵抗を三つ直列に接続して作成しました。 また、上部の抵抗10Ω二

Phaser3 + Typescriptを使ってRPGゲームの基礎を作ろう!その1

今回はPhaser3とTypescriptを使って簡単な RPG ゲームを作る方法を紹介していきます。 内容はPhaser3およびゲーム作りについての記事なので、Nodejsの周辺モジュールなどの説明は一部省いての説明になりますのでご了承ください。 またこの記事では Phaser2 ではなく Phaser3 を使用するので注意してください。 この記事は二部構成になりますので、この記事を読んだ際はぜひ次の記事も読むことをお勧めします。 最終目標 ・Phaser3とTypescriptで RPG ゲームの基礎を作る。 ・Phaser3をTypescriptで使う方法を学ぶ ・Phaser3の使い方を学ぶ 今回の目標 ・開発環境を整える ・Phaser3の開発構成を知る ・スタート画面を作る ・マップ表示をさせる 開発前提 ・Nodejsの環境・知識がある ・ Javascript ・Typescriptがある程度かける ・当ページ紹介の環境を試す場合はgit・ github の知識がある 使用した主要Nodeモジュール ・typescript(Typescriptの コンパイル 用) ・phaser(フロントの Javascript 用ゲームライブラリ) ・live-server(ソースを監視してブラウザのページをリロード) ・ts-loader(webpackがTypescriptをバンドルする用)webpack(言わずと知れたモジュール依存をいい感じに解決しバンドルする) ・webpack- cli (webpackを コマンドライン で使用するのに必要) 注:各Nodeモジュールバージョンは後述 1. 最低限の開発環境の準備 今回最低限の環境を整えるために、『Typescript + Phaser3』の開発テンプレートを github リポジトリ で公開しました。 以下からZIPをダウンロードするか、 git clone コマンドで各自環境に展開してみてください。 ここから先は リポジトリ のプログラムを元に説明していきます。 github.com 展開するとファイル構造は以下のようになっているかと思われます。 注: 他にもファイルやフォルダがあるかと思われますが、表記されているのは今回使うものになっています。 - src/ (これから書くプログラムの保存領域)