SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

IoTをかじってみよう

IoTをかじってみよう(1)
~mbedの概要とオンラインIDEの使い方

ライブラリを使う

 前項では、サンプルプログラム「HelloWorld」をオンラインIDEのワークスペースにインポートして、そのままコンパイルとコピーを行い動作させました。

 オンラインIDEのワークスペースで「HelloWorld」の左のツリーを展開してみましょう。

 「main.cpp」はC++言語で書かれたソースです。開いて見てみると、空行を除いて10行のシンプルなソースです。

#include "mbed.h"

DigitalOut myled(LED1);

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

 ソースの先頭行「#include "mbed.h"」で、mbedライブラリのヘッダファイルを取り込んでいます。これは、mbedを制御するためのプログラムを自力で開発しなくても、すでにある公開された実績のあるライブラリを使用できることを意味します。

 このように、プログラムやライブラリをオンラインIDEで検索し、自分のワークスペースにインポートしてすぐに利用できるため、mbedで手軽にプログラミングしてみたい方にとって、オンラインIDEは、うってつけのツールです。

プログラムとライブラリについて

 ライブラリも、プログラムであることに変わりはありません。プログラムは文脈によって、人間が書いたり読んだりするソースコード(例えば「HelloWorld」のmain.cpp)のことを指す場合もありますし、ソースコードをコンパイルしてバイナリ変換された実行可能ファイルのことを指す場合もあります。ここでのライブラリとは、汎用性がある目的を達成するために、共通の機能として、ほかのプログラムから利用できるようにまとめられたソフトウェアの部品のことと理解するくらいでよいでしょう。

無限ループについて

 whileの丸かっこ「()」の中には繰り返し条件を書きます。CやC++では、条件式が0なら偽(false)、0以外なら真(true)を表します。サンプルプログラム「HelloWorld」の「while(1)」は常にtrueになるため、whileブロック(中かっこ{}で囲まれた部分)内のステートメントを無限にループする動きです。後述する書き換え後のソースでは、while(true)と書きました。このほうが直感的に分かりやすくなります。

サンプルプログラムを変更して動作を変える

 最後に、先ほどワークスペースにインポートした「HelloWorld」のソースを変更して、動作を変えてみましょう。

 同じくLEDを点滅させるプログラムですが、モールス信号のSOS(・・・---・・・トトトツーツーツートトト)のリズムで点滅させてみることにします。

新しいプログラムを作成する。

 「HelloWorld」をテンプレートにして、新しいプログラムを作成します。オンラインIDEのメニューから「New」をクリックし、表示された「Create new program」ダイアログの「Program Name:」の値を"mbed_blinky"から"mbed_blinky_sos"に書き換えてから「OK」をクリックします(図16はプログラム名を書き換える前の図です)。

図16:プログラム名の書き換え
図16:プログラム名の書き換え
ソースを変更する

 プログラムの「main.cpp」を開き、下の例のようにソースを書き換えて保存します。

 保存は、オンラインIDEの「Save」をクリックするか、キーボードの[Command]+[S](Windowsなら[Ctrl]+[S])キーを押下します。編集中でまだ保存されていないときは、オンラインIDEの「Program Workspace」のファイル名の右横に*印が表示されます。

(例)変更後のmain.cpp
#include "mbed.h"

DigitalOut myled(LED1);

//短音
void shorttone()
{
  myled = 1;
  wait(0.1);
  myled = 0;
  wait(0.05);
}

//長音
void longtone()
{
  myled = 1;
  wait(0.3);
  myled = 0;
  wait(0.1);
}

//休み
void waiting()
{
  myled = 0;
  wait(1.0);
}

//sは短音3回、oは長音3回
void morse(char val)
{
    switch (val)
    {
        case 's':
          shorttone();
          shorttone();
          shorttone();
          break;
        case 'o':
          longtone();
          longtone();
          longtone();
          break;
        default:
          waiting();
          break;
    }
}

int main()
{
    while(true)
    {
        morse('s');
        morse('o');
        morse('s');
        morse('0'); //wait
    }
}
コンパイルする

 ソースを作成・更新したときは、コンパイルを行わないと、実行可能なプログラム(バイナリファイル)ができません。オンラインIDEのメニューから「Compile」をクリックしましょう。

 正常にコンパイルが通れば、バイナリファイル(mbed_blinky_sos_LPC1768.bin)をダウンロードできます。

コンパイルエラーが起きたら

 コンパイルエラーが起きると、エラー詳細、エラー番号、およびコンパイラがエラーと判断したソースコードの位置が出力されます(図17)。

 エラー番号のリンクをクリックすると、該当するエラー番号のCookBook(エラーの内容や対処方法の参考情報)を参照することができます(図18)。

 なお、今回はソースコードの3行目の「LED1」を「LED5」に書き換えてわざとエラーを表示させました。エラー詳細のメッセージだけで、「LED5」が未定義のため発生したエラーだと分かりますね。

 エラーの原因が分かったらソースコードを修正して、コンパイルしなおしましょう。

図17:コンパイルエラーを発生させる
図17:コンパイルエラーを発生させる
図18:Cookbook
図18:Cookbook
動作を確認する

 バイナリファイル(mbed_blinky_sos_LPC1768.bin)をMBEDドライブにコピーして、基板中央のリセットボタンを押してみましょう。うまくいけば「HellowWorld」で動作確認したときと同じLEDが、今度はSOSのリズムで点滅するはずです。

MBEDドライブ内のファイル管理について

 MBEDドライブ内に複数のバイナリファイルがあるときは、変更日時の新しいものが優先的に動きますので、複数ファイルを格納しても容量(最大約2GB)に収まる範囲内であれば問題ありません。不要なファイルはUSBメモリ内のファイルと同様、OSからの操作で削除できます。また、最初から格納されていたMBED.HTMを誤って消しても、リセットすれば復活しますのでご安心を。

第1回のまとめ

 連載第1回では、mbedの概要とオンラインIDEの使い方をご紹介し、最後に簡単なプログラムを作成して動かすところまでを行いました。

 次回は、アプリケーションボードでmbedを拡張し、クラウド上のサーバで、mbedからセンサデータを受信できるところまでを実践します。関連技術としてMQTTという軽量なプロトコルや、JSONというデータフォーマットについても学習する予定です。お楽しみに!

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
IoTをかじってみよう連載記事一覧

もっと読む

この記事の著者

花井 志生(ペンネーム 宇野るいも)(ハナイ シセイ(ペンネーム ウノルイモ))

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山崎 まゆみ(日本アイ・ビー・エム株式会社)(ヤマザキ マユミ)

人・技術・本が好きなITエンジニア。公共・金融機関のアプリケーション開発/インフラ構築経験を持つ。プロジェクト現場で日々奮闘中。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/9031 2015/10/30 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー