nucleo-L496ZGなどの少しマイナーなboardでmbed compilerを使うときのメモ

結論

  • マイナーなboardだとサンプルプログラムが置いてないことがありますが、LPC1768など有名なボードのプログラムをコピーしてくると動きます。
  • Mbed Studioを使ってみたところ、こちらの方が楽にサンプルプログラムを動かせます。
    -> Mbed Studioで基板LEDを光らせる

mbedとは

ARM社のプロトタイピング用のワンボードマイコンとその開発環境のことです。オンライン上でコンパイルして、実行ファイルを作れることが特徴で、公式サイトにはmbed対応のボードが各社から販売されています。

Free open source IoT OS and development tools from Arm | Mbed

nucleo-L496ZGとは

STマイクロ社製のボードで、mbed対応マイコンの中では高性能な部類に入ります。Flashが1MB以上で入手でき、比較的安価なボードということでこのボードを購入しました。nucleoはPIN数/基板サイズにより、3種類ありますが、一番大きなnucleo-144シリーズです。

nucleo-L496ZG
nucleoの製品ラインナップ

mbed Compiler で nucleo-L496ZGを使ってみる

 早速mbed Compilerでnucleo-L496ZGをつかってみます。
 まずはmbedのページから登録し、アカウントをつくます。「signup for free」をクリックします。

create account

 アカウント作成後nucleo-L496ZGのページにアクセスしましょう。そして、右下の「Add to your Mbed Compiler」をクリックして、このボードをmbed Compilerに追加しましょう。

Add this board to your compiler

 Compilerを起動すると、このボードにあったサンプルプログラムが選べます。nucleo-L496ZGにはサンプルプログラムが一つしかないのですが、このMbed OS Device Management example for various ST boardのpelion-example-commonというサンプルプログラムが曲者です。実はこのボードと合っていませんし、使うことが推奨されていません。もちろんそのままCompileしても、「ネットワーク設定をユーザーがつかうものに書き換えてね」というエラーがでます。

L496ZGに登録されている唯一のサンプルプログラムpelion-example-common
pelion-example-commonを調べてみた。
もう開発されていないし、使わない方がいいよとのこと。しかも動作確認済のボードは限られている。

 さてどうしましょう?

 空のモデルから作るほかなさそうです。テンプレートで「空のプログラム」を選びます。プログラム名は「mbed_blinky_nucleo」など自由につけます。

空のプログラムの作成

 

作成後は何も出てきません。「空のモデル」ですからね。残念な気持ちになります。

見事な空のモデル

 さて、このままではどうしようもないので、LEDを点灯させるサンプルプログラムをコピーしてきます。一番有名なLPC1768のページに行きましょう。そしてこのボードの情報をCompilerに追加します。もちろんLPC1768は購入しなくても大丈夫です。

LPC1768も追加!

さて、LPC1768を選ぶとちゃんとLEDを光らせるサンプルプログラムがあります。(あたりまえですが)

みんなが使っているデバイスは良い。

OKを押すと、ライブラリとmain.cppファイルがきちんと入っているプログラムができます。

mbed_blinky

 この「mbed」という名前のライブラリビルドとmain.cppを選択して、コピーします。

mbed_blinkyからコピーして、、、
mbed_blinky_nucleoにペースト!

あとはmbed_blinky_nucleoを選択した状態でCompileを押せばソフトがコンパイルされて、実行ファイルがダウンロードできます。LPC1768のプログラムをコピーしただけで動くなんて素晴らしい!!普通はボードが変わったら全部作り直しなのによくできています。

コンパイル!

ちなみにmain.cppの中身は以下のようなシンプルなコードです。

#include "mbed.h"

DigitalOut myled(LED1);

int main() {
    while(1) {
        myled = 1;
        wait(0.2);
        myled = 0;
        wait(0.2);
    }
}

1行目:mbedライブラリを使いますよと宣言
3行目:DigitalOutとしてLED1端子をmyledという名前で設定。
   各マイコンのLED1端子PINが「LED1」という名前で設定されており、この共通名称を使うことでボードが変わってもプログラムが動くようになっているのですね。
5行目:メイン関数定義
6行目:無限ループの定義
7-10行目:先ほど3行目で定義したmyledを1=ONにして0.2秒待ち、0=OFFにして0.2s待ちの繰り返し

今回はここまでです。御覧頂きありがとうございました。