ARM mbed版 XBee ZB モジュール搭載 Nucleo 親機
Nucleo Board STM32F401RE
+ XBee ライブラリ ZB Coord APIを使って

by ボクにもわかる地上デジタル

Click here to see this page in English.

XBeeメインメニューへ戻る
地デジトップへ戻る

Nucleo Board STM32F4 + Wireless SD Shield (XBee Shield)
親機 Nucleo Board STM32F4 + Wireless SD Shield + XBee ZB

はじめに

 STMicroelectronics(STマイクロ)の Nucleo Board STM32F4 はARM Cortex M4ベースのマイコンボードです。開発環境としてARM mbedに対応していることや、Arduino用シールドをサポートしていることが特長です。このページでは、このNucleoを使ってXBee親機を作成します。

Nucleo Board STM32F4 + Wireless SD Shield (XBee Shield)
親機 Nucleo Board STM32F4 + Wireless SD Shield + XBee ZBと子機 XBee Sensor

 当サイトでは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 ソフトウェア保存先」を参照ください。

ARM mbed
ブラウザで動作する ARM mbed 開発環境

Nucleoは簡単

 Nucleoは「Arduinoよりも簡単に開発を行うことが出来ます」と言っても過言では無いでしょう。まず、組み込みマイコンの開発で面倒なセットアップ方法ですが、Nucleo+mbedの開発環境のセットアップには、ほとんど説明が要りません。開発環境のインストールは不要で、Nucleoをパソコンに接続してmbedのサイトにブラウザでアクセスし、アカウントを作成、mbedコンパイラにアクセスするだけです。

Nucleo Board STM32F4
Nucleo Board STM32F4 STM32F401RE

 ひとつだけ注意することは、Nucleoボード上の「ST-LINK/Nucleo」の切り替えピンヘッダ「CN2」に2つのジャンパーピンを挿しておくことです。購入した時点でも挿さっているので、そのままにしておけば良いです。

Nucleo Board STM32F4
Nucleo Board STM32F4 STM32F401RE

 開発環境の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 + XBee の実験に最小限、必要なもの
品名 参考価格 備考

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-PRO(RPSMA)と専用アンテナ

 XBee Wall Routerはセンサー子機として使います。Strawberry Linuxで「ZigBee レンジエクステンダー」の名称で売られています。ちょっと値段が高い上、センサーとしての性能も悪いので、「ブレッドボードで作るセンサー」をお奨めします。XBee ZBを搭載したDigi純正品のXBee Smart PlugやXBee Sensorなどでも動作します。


照度センサと温度センサ内蔵の Digi純正 XBee Wall Router


ブレッドボードで作るセンサー

ハードウェアの製作

 予め、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を起動します。


Wirelss ShieldにXBee PRO ZBを装着する

 ファームウェアの種類「Function Set」をプルダウンして「ZIGBEE COORDINATOR API」を選択します。語尾に「API」のついたものと「AT」のついたものがありますが、ここでは必ず「API」を選択してください。


 その後、「Write」で書き込みます。書き込み後は必ず、Wireless Shieldの「Serial Select」スイッチを「MICRO」側に戻しておきます。なおファームウェアの書き込みに失敗すると、場合によってはブートローダーを書き込まなければならない事態になります。この場合、ブートローダーの書き込みに対応したXBee USBエクスプローラが必要です。

Nucleo Board STM32F4 + Wireless SD Shield (XBee Shield)
Nucleo Board STM32F4 + Wireless SD Shield (XBee Shield)

 NucleoボードをWireless Shield経由でXBeeと接続するには、ジャンパの変更が必要です。下図のようにSB14の抵抗を取り外し、SB62とSB63に半田を盛ってショートにします。この作業後は、X-CTUは使えなくなります。


Nucleoボードのジャンパを変更する。

 DF ROBOT製の液晶シールドとWireless Shield上に実装したXBeeモジュールとは、位置関係が良くないので長いピンのピンソケットを下駄のように履かせます。下図はピンソケットと、ピンソケットを使ってピンを延長した様子です。


DF ROBOTの液晶を取り付けるための下駄(ピンソケット)


下から順に、Nucleo、Wireless ShieldとXBee、下駄、液晶

 製作したNucleoによるXBee親機の完成例を下図に示します。サンプル4の照度と温度の測定結果を表示しています。


製作したNucleo XBee親機の様子

ソフトウェアの動作確認

 それでは動かしてみましょう。Nucleo STM32F401RE用のバイナリファイルを「sample04.zip」からダウンロードし、ZIPを展開した「sample04.bin」をWindowsの「コンピュータ」内の「NUCLEO」ドライブにコピーします。
 すると、親機Nucleoの液晶にタイトルが表示され、続いて「Searching」の表示になります。ここで子機のコミッショニングボタンを1度だけ押してペアリングを行います。予めジョインしていた場合はすぐに「Found」が表示されます。初めてジョインする場合は、5秒ほど経ってから、再度、コミッショニングボタンを押します。何度、やってもペアリングできない場合、子機のコミッショニングボタンを4回、連続で押下して、子機のネットワーク設定をリセットしてからペアリングします。
 うまくペアリングが完了すると、親機の液晶に照度と温度を表示します。照度はセンサデバイスによって値が変わりますので補正が必要です。表示された照度に対する実際の照度との比率を測定値に乗算する方法が簡単です。温度は内部発熱によって値が変わりますので、実際の温度のずれを減算して補正します。

XBeeセンサ用ソフトウェアをmbedへインポートする

 今度は、XBeeセンサ用ソフトウェア(サンプル4)のソースリストをmbedへインポートします。予めmbedのアカウントを登録してからmbedコンパイラを起動(ブラウザからアクセス)し、コンパイラ画面右上の「Platform」に「ST Nucleo F401RE」を登録しておきます。
 mbed用サンプル4のソースリストを「xbee_example04_sens.zip」からパソコンへダウンロードします。ダウンロードしたZIPは「名前をつけて保存」を選ぶことでZIP展開せずにパソコン内に保存します。
 mbedコンパイラの画面右上の「Platform」で「ST Nucleo F401RE」が選択された状態であることを確認してから、以下の手順でインポートします。

ソフトウェアのmbedインポート方法
  1. mbedコンパイラの画面左上の「Import」をクリック
  2. 中央「Import Wizerd」画面で「Upload」タブをクリック
  3. 画面下部の「Add File」の「参照」でアップロードするファイル(xbee_example04_sens.zip)を選択
  4. 「Import Wizerd」画面の右上の「Import」ボタンをクリック
  5. 「Import Programs」ウィンドウが表示されるので「Import」ボタンを押下

 コンパイルはコンパイラ画面の左側の「Workspace」の中から「sample04_sens」を選択し、「Compile」ボタンを押下すると実行できます。コンパイルが成功するとバイナリファイルのダウンロードが始まろうとするので保存先をWindows上のドライブ「NUCLEO」にするとNucleoボードにバイナリが転送されます。

ARM mbed ソフトウェア保存先

ARM mbed ソフトウェア保存先
タイトル 内容 プログラム ソース
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

(参考) Nucleoファームウェアのアップデート

 ファームウェアを最新のものにアップデートする場合はSTマイクロのサイトから「STM32 ST-LINK Utility」をダウンロードします。ST-LINK Utilityのメニュー「ST-LINK」内から「Firmware update」を選択し、「Device Connect」ボタンを押すとNucleoのファームウェアのバージョンが表示されます。バージョンが古いようであれば「Yes」を押下してバージョンアップします。なお、CN2ジャンパーピン2個は外さない(NUCLEOのMass Storageモード)でも動作するようです。


XBeeメインメニューへ戻る

地デジトップへ戻る