注: この記事はベータ版のソフトウェアを利用したものになるので、今後変わる可能性があります。
mbed OSのβ版がいつのまにやら公開されていたので、試してみることにしました。
https://docs.mbed.com/docs/getting-started-mbed-os/en/latest/FirstProjectmbedOS/ の手順通りにすすめてLチカをやってみます。
1. yottaのインストール
mbed OSを利用するためには事前にyottaというパッケージ管理システムの導入をする必要があります。
インストールは http://yottadocs.mbed.com/#installing に記載されている手順で行います。
yotta自身はPythonで書かれているそうで、pipを使って入れることができます。
Mac OSではbrewコマンドとpipコマンドでインストールすることができます。
$ brew tap ARMmbed/homebrew-formulae $ brew install python cmake ninja arm-none-eabi-gcc $ pip install yotta
yottaを使うことで、パッケージの導入やビルドがコマンド一発でできるようになるのと、
デバイスの構成を module.json
書いておけるので、他の人が利用する際に再現しやすくなりますね。
2. mbed OSアプリケーションを作る
https://docs.mbed.com/docs/getting-started-mbed-os/en/latest/GettingStartedmbedOS/に書かれている手順通りに進めます。
適当な作業ディレクトリを作ります。
$ mkdir blinky $ cd blinky
yottaプロジェクトの雛形を作ります。
$ yotta init Enter the module name: <blinky> Enter the initial version: <0.0.0> Is this an executable (instead of a re-usable library module)? <no> Short description: LED chikachika Keywords: <> Author: mia-0032 Repository url (where people can submit bugfixes): https://github.com/mia-0032/mbed-os-blinky "https://github.com/mia-0032/mbed-os-blinky" isn't a valid "repoObject" value. Repository url (where people can submit bugfixes): git@github.com:mia-0032/mbed-os-blinky.git Homepage: https://github.com/mia-0032/mbed-os-blinky What is the license for this project (Apache-2.0, ISC, MIT etc.)? <Apache-2.0>
作成するとこんな感じになります。
$ tree . ├── blinky ├── module.json ├── source └── test
source
ディレクトリがソースコード、test
ディレクトリがテストコードの置き場になります。
module.json
の中身は以下のような感じになります。
{ "name": "blinky", "version": "0.0.0", "description": "LED chikachika", "keywords": [], "author": "mia-0032", "repository": { "url": "git@github.com:mia-0032/mbed-os-blinky.git", "type": "git" }, "homepage": "https://github.com/mia-0032/mbed-os-blinky", "license": "Apache-2.0", "dependencies": {} }
dependencies
に必要なパッケージを記載しておけば、ビルド時に依存関係を解決してくれるようです。
なお、このままでは正常にビルドできなかったため、最後の行を以下のように変更しました。
- "dependencies": {} + "dependencies": {}, + "bin": "./source"
module.jsonのドキュメントを読むと、モジュールとして公開せず、実行ファイルを生成する場合は指定する必要があるようです。
次に、書き込むボードを選択します。
$ yotta search --limit 1000 target
とすると対応するボードがずらずら出てくるので、今回はだいぶ前のmbed祭りでいただいた Freescale FRDM-K64Fを使います。
$ yotta target frdm-k64f-gcc ...(省略)... You need to log in to do this. Press enter to continue. Your browser will open to complete login. # エンターを押すとブラウザが開いてmbed.orgへのログインが求められるのでログインします。
すると、yotta_targetsディレクトリに指定したボードの設定が展開されています。
サンプルプログラムを動かすためには、mbed-drivers
というパッケージが必要とのことなのでインストールします。
$ yotta install mbed-drivers
module.json
を見てみるとdependencies
にmbed-drivers
が追加されています。
"dependencies": { "mbed-drivers": "~0.10.3" }
また、yotta_modulesディレクトリにインストールしたパッケージが追加されています。
sourceディレクトリにアプリケーションコードを書いていきます。
今回はサンプルコードを適当にコピペして作った以下のコードを source/app.cpp
として保存します。
#include "mbed/mbed.h" static void blinky1(void) { static DigitalOut led1(LED1); led1 = !led1; printf("LED1 = %d \r\n",led1.read()); } static void blinky2(void) { static DigitalOut led2(LED2); led2 = !led2; printf("LED2 = %d \r\n",led2.read()); } static void blinky3(void) { static DigitalOut led3(LED3); led3 = !led3; printf("LED3 = %d \r\n",led3.read()); } void app_start(int, char**) { minar::Scheduler::postCallback(blinky1).period(minar::milliseconds(300)); minar::Scheduler::postCallback(blinky2).period(minar::milliseconds(500)); minar::Scheduler::postCallback(blinky3).period(minar::milliseconds(1500)); }
ここまでで、アプリケーションの作成は終わりです。
3. ビルドと実行
ビルドするには以下のコマンドを実行します。
$ yotta build
4. mbedボードのファームウェアのアップデート
FRDM-K64Fのファームウェアのバージョンは、PCにつないで認識されたドライブの中のMBED.HTMファイルに書かれています。
ブラウザではなくテキストエディタで開くとバージョンが書かれている部分があります。
<!-- mbed Microcontroller Website and Authentication Shortcut --> <!-- Version: 0203 Build: May 30 2014 19:00:51 Git Commit SHA: ebe7dab202606d9dd80804b70ce95580d3077e23 Git local mods:Yes-->
アップデートする前はVersion: 0201
だったので、ファームウェアのアップデートを行いました。
手順は
Firmware FRDM K64F - Handbook | Mbed
に書かれている通りです。
5. mbedへ書き込み
以下のコマンドでビルドしたファイルをmbedへコピーして、mbedのリセットボタンを押せば完了です。
$ mv build/frdm-k64f-gcc/source/blinky.bin /Volumes/MBED/
上手くいくと下のような感じでLEDがチカチカします。
ソースコードは以下に公開しています。
コードをgit cloneしてyotta buildするだけでbinファイルを作ることもできるので、ぜひお試しください。