STMicroelectronics(STマイクロ)の Nucleo Board STM32F4 はARM Cortex M4ベースのマイコンボードです。開発環境としてARM mbedに対応していることや、Arduino用シールドをサポートしていることが特長です。このページでは、このNucleoを使ってXBee親機を作成します。
当サイトではXBee ZBのAPIモードを使用し、H8マイコンやArduino マイコンボードでXBee親機の機能を実現してきました。しかし、プログラム容量や機能アップを図るためにはマイコンの性能に不足を感じ、ARMを調査してみたところ、スイッチサイエンスや秋月電子通商から2000円以下の安価な価格でNucleo Boardが発売されているの知り、買ってみることにしました。スイッチサイエンスの送料無料(3000円以上)に満たないほどの安さです。必要な他のパーツも合わせて購入すると良いでしょう。
ARM mbed 開発環境はブラウザ上で動作するプログラミング環境です(下図)。Arduino IDEほどではありませんが、統合開発環境の中では、かなりシンプルです。プログラム経験のある方ならボードを接続してから5分か10分もすればサンプルを動かせるでしょうし、30分もすれば使い方をほぼ把握できると思います。なぜ、そんなに簡単に動かせるのかと言うと、開発環境をPC上に構築する必要が無いからです。
ちなみに、Arduino用のXBeeライブラリをARM mbed用に移植する作業も容易でした。移植したライブラリ・サンプルソフトは「XBee ZigBee/Wi-Fi管理ライブラリ ZB Coord API ソフトウェア - ダウンロード」でも配布中です。最新版はmbedのサイトで配布しています。このページの最後の方の「ARM mbed ソフトウェア保存先」を参照ください。
Nucleoは「Arduinoよりも簡単に開発を行うことが出来ます」と言っても過言では無いでしょう。まず、組み込みマイコンの開発で面倒なセットアップ方法ですが、Nucleo+mbedの開発環境のセットアップには、ほとんど説明が要りません。開発環境のインストールは不要で、Nucleoをパソコンに接続してmbedのサイトにブラウザでアクセスし、アカウントを作成、mbedコンパイラにアクセスするだけです。
ひとつだけ注意することは、Nucleoボード上の「ST-LINK/Nucleo」の切り替えピンヘッダ「CN2」に2つのジャンパーピンを挿しておくことです。購入した時点でも挿さっているので、そのままにしておけば良いです。
開発環境のmbedの使い方やライブラリについても、mbedのサイトの「Handbook」のページを参照すれば、具体例を含めて詳しく解説されているので、ほとんど不自由なく、すぐに使いこなすことが出来ると思います。なお、STマイクロのサイトにある「User Manual」のうち「software development tools」とあるのはmbed以外を使用する場合のマニュアルですので不要です。STマイクロからダウンロードするマニュアルは「STM32 Nucleo boards」と書かれたハードウェアのユーザガイドくらいだと思います。
使いやすさの観点でArduinoよりも劣る点は、mbedは非常に多くのマイコンボードをサポートしており、またSTマイクロからも多くのボードが発売されているため、ARMの型番やボードの型番がたくさん出てくることです。多品種のサポートゆえにSTM32F401REの個別の情報や専用のサンプルが少ない点もArduinoと異なります。(2014年6月現在は発売されたばかりということもあり、今後、情報は増えて行くと思います。)
Nucleoにソフトを書き込むのも簡単です。ソフトを書くという作業だけであれば、何のソフトも要りません。Nucleoを接続すると、まるでUSBハードディスクのように(Mass Storageとして)Windowsが認識します。そこにバイナリファイルをコピーすればNucleoが動作します。
mbedでコンパイルしたソフトをNucleoに転送する場合も簡単です。コンパイル後、ブラウザからソフトのダウンロードする保存先をNucleoのドライブに指定すれば、ネット上のmbed環境から直接Nucleoボードにソフトが転送されるかの如く書き込みが完了し、自動でソフトが起動します。
欠点もあります。mbedがシンプルすぎて機能的に不足する部分が散見されることや、現時点では日本語の入力に対応できていないこと(表示は可能)、秀丸エディタなどの外部エディタが使えないことなどです。仕事で使う場合は有料の開発環境を導入した方が良いでしょう。あと、ブラウザ上で動作する(クラウドで動作する)点で処理速度にもたつき感がありますが、意外に普通のテキストエディタに近い感覚で使えます。
注意:キーボードの日本語入力モードになっているとソースコードの編集が行えません。「半角/全角」キーなどを操作して「半角(英数字)入力モード」で使用する必要があります。
子機のセンサーで測定した照度や温度を親機Nucleoの液晶に表示する実験を行うに当たり、最小限、必要なハードウェアを以下に記します。
機
品名
| 参考価格
| 備考
| 親 | 機 Nucleo Board STM32F401RE
| 1,600円
| mbedに対応した ARM Cortex M4ベースのマイコンボード
| Arduino Wireless SD SHIELD
| 2,500円
| microSDなしの「Arduino Wireless SHIELD」なら1870円
| DFROBOT LCD Keypad Shield
| 1,390円
| 液晶と5個のボタンのついたArduino用液晶シールドです。
| ピンソケット 1x6 長いピン 2個
| 2×60円
| 液晶がXBeeに接触するので下駄にします。
| ピンソケット 1x8 長いピン 2個
| 2×80円
| 液晶がXBeeに接触するので下駄にします。
| XBee-PRO ZB(S2B) Module
| 2,900円
| Nucleoに搭載する親機用。RPSMAコネクタ型がお奨めです。
| XBee 専用アンテナ
| 550円
| 上記の親機XBeeのRPSMAコネクタに取り付けるアンテナです。
| 子 | 機 XBee Wall Router
| 8,400円
| 実験用の照度センサと温度センサ、XBeeが内蔵されています。
| もしくはDigi純正XBee Sensorや「ブレッドボードで作るセンサー」なども使用可能です。
| |
Nucleoに搭載するXBeeモジュールはXBee PRO ZBモジュールを使用します。最近はS2Bと表示されています。PROとPROでないものの違いは無線の到達距離の性能です。親機にPROを使えば、PROでない子機との通信到達距離も長くなります。(送信と受信の両方の性能が高い)
近距離で実験するだけであれば、PROでないXBee ZB同士でも良いでしょう。アンテナは別売りの専用アンテナと組み合わせれるRPSMAタイプがお奨めです。親機にパターンアンテナやチップアンテナタイプを使うと、かなり使用範囲が狭くなります。
XBee Wall Routerはセンサー子機として使います。Strawberry Linuxで「ZigBee レンジエクステンダー」の名称で売られています。ちょっと値段が高い上、センサーとしての性能も悪いので、「ブレッドボードで作るセンサー」をお奨めします。XBee ZBを搭載したDigi純正品のXBee Smart PlugやXBee Sensorなどでも動作します。
予め、XBee PROモジュールにはDigiのソフトウェアX-CTUを使ってファームウェア「ZIGBEE COORDINATOR API」を書き込んでおきます。市販のXBee USBエクスプローラを使用するのが最も簡単ですが、購入した状態のNucleoボードとWireless Shieldとを用い、Wireless Shield上の「Serial SELECT」を「USB」に切り替えることで、XBee USBエクスプローラの代わりになります。
X-CTUの入手方法は、Digiのホームページ(http://www.digi.com/>)から「Support」メニュー内の「Diagnostics, Utilities & MIBs」を選択し、この中から「X-CTU」を選択、スクロールバーを最後の方まで下げると「XCTU 32-bit ver. X.X.X.X installer」が見つかります。
Wireless ShieldにXBee PRO ZBモジュールを取り付け、Wireless ShieldをNucleoボードに取り付け、X-CTUを起動します。
ファームウェアの種類「Function Set」をプルダウンして「ZIGBEE COORDINATOR API」を選択します。語尾に「API」のついたものと「AT」のついたものがありますが、ここでは必ず「API」を選択してください。
その後、「Write」で書き込みます。書き込み後は必ず、Wireless Shieldの「Serial Select」スイッチを「MICRO」側に戻しておきます。なおファームウェアの書き込みに失敗すると、場合によってはブートローダーを書き込まなければならない事態になります。この場合、ブートローダーの書き込みに対応したXBee USBエクスプローラが必要です。
NucleoボードをWireless Shield経由でXBeeと接続するには、ジャンパの変更が必要です。下図のようにSB14の抵抗を取り外し、SB62とSB63に半田を盛ってショートにします。この作業後は、X-CTUは使えなくなります。
DF ROBOT製の液晶シールドとWireless Shield上に実装したXBeeモジュールとは、位置関係が良くないので長いピンのピンソケットを下駄のように履かせます。下図はピンソケットと、ピンソケットを使ってピンを延長した様子です。
製作したNucleoによるXBee親機の完成例を下図に示します。サンプル4の照度と温度の測定結果を表示しています。
それでは動かしてみましょう。Nucleo STM32F401RE用のバイナリファイルを「sample04.zip」からダウンロードし、ZIPを展開した「sample04.bin」をWindowsの「コンピュータ」内の「NUCLEO」ドライブにコピーします。
すると、親機Nucleoの液晶にタイトルが表示され、続いて「Searching」の表示になります。ここで子機のコミッショニングボタンを1度だけ押してペアリングを行います。予めジョインしていた場合はすぐに「Found」が表示されます。初めてジョインする場合は、5秒ほど経ってから、再度、コミッショニングボタンを押します。何度、やってもペアリングできない場合、子機のコミッショニングボタンを4回、連続で押下して、子機のネットワーク設定をリセットしてからペアリングします。
うまくペアリングが完了すると、親機の液晶に照度と温度を表示します。照度はセンサデバイスによって値が変わりますので補正が必要です。表示された照度に対する実際の照度との比率を測定値に乗算する方法が簡単です。温度は内部発熱によって値が変わりますので、実際の温度のずれを減算して補正します。
今度は、XBeeセンサ用ソフトウェア(サンプル4)のソースリストをmbedへインポートします。予めmbedのアカウントを登録してからmbedコンパイラを起動(ブラウザからアクセス)し、コンパイラ画面右上の「Platform」に「ST Nucleo F401RE」を登録しておきます。
mbed用サンプル4のソースリストを「xbee_example04_sens.zip」からパソコンへダウンロードします。ダウンロードしたZIPは「名前をつけて保存」を選ぶことでZIP展開せずにパソコン内に保存します。
mbedコンパイラの画面右上の「Platform」で「ST Nucleo F401RE」が選択された状態であることを確認してから、以下の手順でインポートします。
ソフトウェアのmbedインポート方法 |
|
コンパイルはコンパイラ画面の左側の「Workspace」の中から「sample04_sens」を選択し、「Compile」ボタンを押下すると実行できます。コンパイルが成功するとバイナリファイルのダウンロードが始まろうとするので保存先をWindows上のドライブ「NUCLEO」にするとNucleoボードにバイナリが転送されます。
タイトル
内容
| プログラム
| ソース
| sample01_led
| リモート先のLEDをON/OFFする
| sample01_led
| main.cpp
| sample02_sw
| スイッチ状態を液晶に表示する
| sample02_sw
| main.cpp
| sample04_sens
| ワイヤレス センサー(本ページで紹介)
| sample04_sens
| main.cpp
| xbee_aging
| XBee ライブラリ自動試験ツール
| xbee_aging
| main.cpp
| xbee
| XBee ライブラリ ZB Coord API
| xbee
| xbee.cpp
| |
ファームウェアを最新のものにアップデートする場合はSTマイクロのサイトから「STM32 ST-LINK Utility」をダウンロードします。ST-LINK Utilityのメニュー「ST-LINK」内から「Firmware update」を選択し、「Device Connect」ボタンを押すとNucleoのファームウェアのバージョンが表示されます。バージョンが古いようであれば「Yes」を押下してバージョンアップします。なお、CN2ジャンパーピン2個は外さない(NUCLEOのMass Storageモード)でも動作するようです。