« NMEA-0183メッセージの解析 | トップページ | mbedのライブラリ作成 »

mbed Get

予告どおり(?)、mbedをゲットいたしました。通販でもよかったのですが、秋葉原まで出向いて秋月さんで購入。使ってみた感想を記載します。

セットアップ

秋月さんらしく、箱を開けると日本語のセットアップガイドが出てきます。秋月さんで部品を買うとついてくる紙にコピーした手作りマニュアルで、裏面はLPCXpressoのマニュアルと兼ねていました。

セットアップは以下のように非常に簡単です:

  • mbedをUSBケーブルでPCにつなぐとリムーバブルディスクとして認識される
  • MBED.HTMを開く
  • Sign upからアカウントを登録する

これだけでコンパイラが使えるようになります。また、コンパイル済みのHelloWorld.binをダウンロードしてリムーバブルディスクとして認識しているmbedにコピーし、リセットボタンを押すとLEDチカチカが動き出します。

開発環境のセットアップが不要なため、ここまでは最速ですね、確かに。

TextLCDを使ってみる

開発環境の習熟用に何か動かしてみようと、mbed本体と一緒に16x2 LCDモジュール(SD1602VBWB)を購入。このLCDは端子がシングル・インラインのため、ブレッドボードに挿して使うのにもってこいです。

LCDに文字を表示させるライブラリとして、ArduinoのLiquidCrystal Library相当であるTextLCD Libraryがあります。DigitalIn, AnalogInのような標準ライブラリはプロジェクトを生成すると自動的に使えるようになっていますが、TextLCDはcontributed libraryの位置づけとなり、個々にインポートする必要があります。IDEにライブラリをインポートした画面キャプチャーを以下に示します。

mbedIDE

TextLCD Libraryを使ったサンプルコードを以下に示します。

#include "mbed.h"
#include "TextLCD.h"

TextLCD lcd(p24, p25, p26, p27, p28, p29, p30); // RS, R/W, E, DB4, DB5, DB6, DB7
BusOut myleds(LED1, LED2, LED3, LED4);

char msg1[] = "Hello World!";
char msg2[] = "Hello mbed!";

void showMsg(char *msg);
unsigned int count = 0;

int main() 
{
    while (1) 
    {
        lcd.cls();
        lcd.locate(0, 0);
        showMsg(msg1);
        wait(1);
        lcd.locate(0, 1);
        showMsg(msg2);
        wait(1);
    }
}

void showMsg(char *msg)
{
    int i;

    for (i = 0; i < strlen(msg); i++) 
    {
        lcd.printf("%c", msg[i]);
        myleds = count++;
        wait(0.1);
    }
}

プログラムがmain()で始まるのは(Arudinoのsetup(), loop()でなく)、ある意味ほっとした気持ち(?)になります。Text LCDはしばらく触っていなかったため、一点はまりました。mbed.orgのサンプルには以下のコメントがついています。

TextLCD lcd(p24, p25, p26, p27, p28, p29, p30); // rs, rw, e, d0, d1, d2, d3

d0~d3という記載を見て、データーバスをLCDのDB0~DB3につないでしまい、最初はLCDがうんともすんとも言わない状態でした。よく考えてみると、このライブラリはLCDを4-bitモードで使っているため、LCDのデーターバスはDB4~DB7を使う必要があります。Webドキュメントの配線図も確かにそうなっていますが、ちゃんと見ていませんでした、、、

気を取り直して配線を修正すると以下のようにしっかりと動作してくれます。

mbed_LCD

ArduinoのLiquidCrystal Library(0017で強化された)に比べると機能は最小限ですが、LCDの初期化はちゃんと行っており、過去のArduinoライブラリのようにLCDの初期化が不十分という問題はありません。

あと、ArduinoのI/Oにはない機能として、BusOutクラスをあわせて使ってみました。BusOutは複数の出力ピンをまとめてバスとして使えるようにする機能です。サンプルではLED1~LED4の制御ピン4 bitを使って、LEDを4個を同時に制御します(34行目)。

ちなみにこのLCD、「おしゃれな白抜きタイプ」ということですが、あまり視認性はよくありませんでした。スタンダードな黒表示のSD1602HUOB(-XA-G-R)の方が見やすいです(価格は100円高いです)。

Cの標準ライブラリサポート

TextLCDのサンプルでstrlen()関数を使っていますが、string.hをインクルードしなくてもエラーになりません。理由は、mbed.hで以下の標準ライブラリのヘッダをインクルードしているためです。すなわち、以下のヘッダファイルでサポートしている標準関数が使えることになります。

// Useful C libraries
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <time.h>

mbed上のbinファイルの管理

リムーバーバブルディスクとして認識されるmbedは2MBの容量があり、複数のbinファイルを格納できます。リセットボタンを押すと、最後に格納したbinファイルをMCU(LCP1768)の内臓Flashに書き込んで起動してくれます。

過去に書き込んだbinファイルを起動したい場合は、一旦消去してコピーし直すことで再コンパイルすることなく実行できます。ただ、使わないbinファイルは消してしまうのが一番確実だと思います。

おわりに

出来合いのライブラリを使う範囲内では、mbedはArduino同様非常に効率がよいプログラミングができます。買ってきた部品をチョチョット試してみるにはうってつけです。一方で、Handbook配下にある標準ライブラリはソースコードが公開されておらず(ヘッダファイルのみ)、一部がブラックボックスな点が気になります。Cookbook配下のcontributedライブラリのソースは全て公開されています。

現在カスタムライブラリ作成のお勉強中で、眠っていたeDISP(カラーディスプレー)のライブラリを作成中です。作成の作法はArduinoのライブラリと同様で、C++のクラスを定義します。最小限の半角文字表示と文字色指定までは動作しましたが、もう少し確認・拡張を行って別途公開します。

WebベースIDEの使い勝手とか気になる点もありますが({ }のペアマッチができななど)、しばらく楽しめそうです。

« NMEA-0183メッセージの解析 | トップページ | mbedのライブラリ作成 »

mbed」カテゴリの記事

コメント

この記事へのコメントは終了しました。

2018年10月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
無料ブログはココログ