ラベル mbed NXP LPC1768 の投稿を表示しています。 すべての投稿を表示
ラベル mbed NXP LPC1768 の投稿を表示しています。 すべての投稿を表示

2011年5月22日日曜日

Natural Tiny Shell (NT-Shell)をmbedで使ってみる (Eating your own dog food)

「自分のドッグフードを喰う(Eating your own dog food)」はソフトウェア開発の世界で有名な台詞です。


自身で作ったソフトウェアを自身で使うことで、それがどのように有用か(あるいはそうでないか)を知る事ができるというわけです。

例にならってNatural Tiny Shell (NT-Shell)をmbedで使ってみることにしました。
目論見は簡単に移植できるというところです。

しかし、実際に移植してみると幾つか気になる点がありました。
これは興味のある方のために後述。

移植した結果はmbed.orgにアップロードしました。
興味がございましたら、ご自由にお使い下さい。

http://mbed.org/users/shintamainjp/notebook/ntshell_ja/

2010年12月1日水曜日

Time elapse image using mbed NXP LPC1768



The components
* mbed NXP LPC1768
* microSD card
* LinkSprite JPEG Color Camera LS-Y201

The content is UNIQLOCK.
http://www.uniqlo.jp/uniqlock/

2010年11月5日金曜日

Practical library for mbed : Firmware updater


Languages



Overview
Network features on mbed is great. So there are so many mbed application in our world.
Sometime I need to update these mbed application firmware.
So I implemented a firmware update class.
You can update mbed if you put on a new firmware with version text file automatically.
It's really easy to update mbed in the distance.

The library compare versions between binary on a server and local file system on mbed.

How to use it?

mbed side

  1. Download your firmware. (e.g.: firm.bin) http://mbed.org/media/uploads/shintamainjp/firm.bin
  2. Make the version text file for the firmware. (e.g.: firm.txt) http://mbed.org/media/uploads/shintamainjp/firm.txt
10
You can check the sequences if logging option enabled.

Server side

  1. Put on a new firmware on HTTP server. (e.g.: firm.bin) http://mbed.org/media/uploads/shintamainjp/firm.bin
  2. Put on the version text file for the firmware (e.g.: firm.txt) http://mbed.org/media/uploads/shintamainjp/firm.txt
25

Setup the library

FirmwareUpdater fwup("http://mbed.org/media/uploads/shintamainjp/", "firm", true); 

Description

exist()
  • Compare version files between on a server and on a mbed.
  • Return 0 if a version on a server higher than a version on a mbed.
execute()
  • Download a new firmware binary file to a temporary file.
  • Download a new firmware version text file to a temporary file.
  • Copy these new files to .bin and .txt.
reset()
  • Reset mbed.

The interfaces

The interfaces are very simple.

The test program

#include "mbed.h"
#include "FirmwareUpdater.h"
#include "EthernetNetIf.h"

EthernetNetIf eth;
FirmwareUpdater fwup("http://mbed.org/media/uploads/shintamainjp/", "firm", true); 

// There are 2 files for the firmware.
//  1. firm.txt : firmware version file.
//  2. firm.bin : firmware binary file.

int main() {
    eth.setup();
    if (fwup.exist() == 0) {
        printf("Found a new firmware.\n");
        if (fwup.execute() == 0) {
            printf("Update succeed.\n");
            printf("Resetting this system...\n\n\n\n\n");
            fwup.reset();
        } else {
            printf("Update failed!\n");
        }
    }
 
    // Your application ...
}

The library

    2010年10月30日土曜日

    mbed + StarBoard Orange用R/Cサーボキット「くまちゃんサーボキット」なんて如何?

    「くまちゃんサーボキット」は現在のところ架空のキット製品です。

    Languages

    はじめに

    StarBoard Orange 専用拡張基板:R/C サーボインターフェース基板でR/Cサーボインターフェース基板について解説しました。
    この文書ではR/Cサーボインターフェース基板を使った架空のキット製品、「くまちゃんサーボキット」についての使用方法について説明します。

    同梱物

    くまちゃんサーボキットには以下のものが含まれます。
    • R/C Servo I/F Board with 16x2 character based LCD.
    • R/C Servo Motor with gears. (GWS SERVO - S03T 2BBMG)
    • AC-DC adapter (Output capacity : 5V 2.3A)

    Box

      Components

      R/C Servo I/F Board

      R/C Servo

      Gears for R/C Servo

      AC-DC Adapter

        準備

        StarBoard Orangeの設定

        LCDを取り外します。
        ピン設定を確認します。

        サーボモータの接続

        サーボモータを写真のように接続します。

        StarBoard Orangeへの取り付け

        StarBoard Orangeに取り付けます。
        サーボ基板のDC入力に付属のAC-DCアダプタを接続します。
        サーボモータの電力はAC-DCアダプタから供給されます。
        これで全体の準備は完了です。
        プログラム
        コンパイル済みプログラムとその他のリソースをまとめたZIPファイルを以下からダウンロードすることができます。
        展開したファイルをmbedのルートディレクトリに展開したらリセットボタンを押します。
        ネットワークの設定が開始されます。
        DHCPサーバからアドレスが取得できたらIPアドレスが表示されます。
        このIPアドレスはmbed上で動作しているHTTPサーバのIPアドレスです。
        それではこのウェブサーバにパソコンから接続してみましょう。
        以下のような画面が表示されます。
        試しにSERVO1のスライダをドラッグして左右に移動させてみましょう。
        スライダの動きに合わせてR/Cサーボが動作することが確認できます。
        ブラウザから制御できるということは当然「アレ」でもやりたくなります。
        もちろんできます。


        デモムービー

        まとめ

        本文書では「くまちゃんサーボキット」に関する解説を行いました。
        関連するサンプルアプリケーションをpublishしました。

        mbedを使えばTwitterから家庭用機器を簡単に制御できます。

        概要

        ここではmbed + StarBoard Orange + 拡張基板を使った活用事例としてTwitterで家庭用機器を制御するデモを御紹介します。
        StarBoard Orange用の拡張基板には赤外線送信回路が搭載されています。
        これを使ってテレビ、エアコン、コンポ、照明など沢山の機器を制御する事が可能です。
        また、mbed + StarBoard Orangeを使えばネットワークの取り扱いも簡単。
        今回はTwitterのつぶやきを拾ってきて特定のメッセージで機器を制御するようにしてみました。
        以下が全体の制御の流れです。

        機能

        • Twitterから呟きを拾ってきて、内容に応じて制御する事ができます。
        • TwitterとのインターフェースにはSuperTweetを使用します。(SuperTweetのアカウントとその設定が必要です。)
        • 今回のアプリケーション例では「Light」という文字列を発見すると、赤外線送信回路を使って照明器具を制御するようにしてみました。

        準備

        プラットフォーム

        ここでは以下のプラットフォームを使用しました。

        機器の準備

        mbedとStarBoard OrangeとExpansion Board Oneを準備します。

        イーサネットケーブルを接続して下さい。

        設定ファイル(SETUP.CFG)

        設定ファイル(SETUP.CFG)をmbedのフラッシュストレージに作成します。
        YOUR_ACCOUNTとYOUR_PASSWORDにはあなたのSuperTweetアカウント情報を入れて下さい。
        SUPERTWEET_ACCOUNT=YOUR_ACCOUNT
        SUPERTWEET_PASSWORD=YOUR_PASSWORD

        プログラム

        以下のプログラムをコンパイルしてmbedにコピーします。
        以上で準備は完了です。

        動かしてみる

        それでは実際に動作させてみましょう。
        起動するとネットワークの設定が始まります。
        設定の結果を確認します。

        動作が始まると以下のような画面になります。
        1行目にはTwitterから取得した回数が表示されます。
        2行目には制御を行った回数が表示されます。

        ここでTwitterのアカウントにキーワードを書き込んでみましょう。
        今回のキーワードは「Light」です。

        制御が完了すると応答がTwitterに書き込まれます。
        どうやらきちんとコマンドを受け付けているみたいです。

        今回のアプリケーション例では、実際に赤外線リモコン信号を送信しています。
        が、私の自宅の赤外線リモコンのコードなのであなたの家では何もおこらないでしょう。(ごめんなさい。)

        まとめ

        • 今回はネットワークから情報を取得して機器を制御する実例として、照明器具をTwitterで制御するアプリケーションを御紹介しました。
        • 今回使用したライブラリとプログラムは全てpublishしてあります。

        2010年10月21日木曜日

        StarBoard Orange - Servo I/F Board (基板が上がってきたみたい)

        きばん本舗さんに基板が到着したようです。
        今回は部品実装もして頂きました。
        お楽しみアプリケーションはこれから。
        完成後にmbed.orgにpublishしますのでお待ち下さい!

        2010年10月13日水曜日

        StarBoard Orange - Servo I/F Board

        StarBoard Orangeを使った活用事例を考える中で「家で飼っているペットに定期的に餌をあげたい。」というお話を聞きました。

        実はこのお話、StarBoard Orangeのパターン設計を担当したきばん本舗さんの中の人の要望。
        で、日頃お世話になっている関係もあって、ちょっと考えてみました。
        • 「餌をあげる」という行為はラジコンサーボの動作によって実現する。
        • ラジコンサーボの電源は外部から(mbedとは別系統)供給する。
        • StarBoard OrangeのLCD部分を交換して使用可能な拡張基板として実現する。
        • LCDが無くなると単なるデグレードになってしまうので、LCDの機能も提供する。
        • 安全性を考慮してmbedとはフォトカプラでアイソレーションする。
        StarBoard OrangeのLCD I/Fには都合良くPWMOUTが3系統出ています。
        ラジコンサーボの仰角制御はこれを使う事にしました。

        先ほどの簡単な仕様を元に「えいっ!」と設計した基板の完成イメージが以下です。



        この基板はStarBoard Orangeの上側に搭載される基板です。
        ですから、私が先に設計したExpansion Boardと同時に使えます。

        LCDはシフトレジスタを経由して制御するようにしました。
        LCDはバックライトが点灯した時の感じが気持ち良いのでSD1602HUOBを選定しました。


        最近はきばん本舗さんも敏速というより爆速で、もうガーバーデータは工場にあるそうです。
        ということで来週には上がって来ますので、その頃にもう少し踏み込んだ内容をお伝えする予定です。

        あ、ちなみにStarBoard OrangeのLCD I/Fを使った実験用スルーホール基板なんていうのも上がってくるかもしれません。こちらは電源ピンとその他のピンを素直に1列に取り出す形になっています。


        2010年10月9日土曜日

        GT-720Fとmbedの接続

        GT-720FはNCピンが2ピンありますが、ここにLVTTL入出力が割り当てられている事が知られています。このピンを使った時に遭遇した問題について記載しておきます。

          
        mbedとGT-720Fを接続するケーブルを製作するのが面倒だったので、近所のパソコンショップで4ピンのオーディオ接続用ケーブルを購入してきました。実はこれが原因でおきる現象があるのです。


        下の波形をご覧ください。
        これは購入したケーブルを用いないときの波形です。

        次にこのケーブルを用いて場合の波形です。
        なんと波形がLに落ちません。
        伝送路をドライブしきれていないように見えます。

        え?と思ってケーブルを調べます。
        ケーブルの全体像はこんな感じです。

        片方をループバックして抵抗値を測ります。

        まぁ、DC的に短絡ということだけわかります。(本当はここで容量も測りたい!)

        ここからは推測です。

        このモジュールはLVTTLも出るし、RS-232Cでも出るしを狙って設計したものの、いざ出荷してみると容量性負荷に対するドライバの能力が足りないために、仕様上でNCピンにせざるを得なかったのではないだろうか、というのが私の見立て。
        頂いた情報によるとメーカのページには始めLVTTLもうたわれていたとのこと。

        まぁ、手抜きでオーディオ用ケーブルを用いるのもどうかと思いますので、きちんとケーブルは作り直します。

        バッファ最大アロケーションサイズに依存したパフォーマンス問題(mbedのHTTPClientとHTTPText)

        mbedはネットワークライブラリも充実していますので、HTTPサーバに接続してデータを取ってくる事も簡単にできてしまいます。先日、あるアプリケーションを設計実装した後で気付いたパフォーマンス問題についてここで述べたいと思います。

        きっかけはこうでした。
        • 「HTTPサーバから数百バイトのデータを読んでいるだけなのになんで30秒もかかるんだ?」
        • 「おかしいなぁ。数十バイトなら1秒もかからないで読めるぞ。」
        • 「なんで読み出しバイトサイズにリニアに比例してないんだ?」
        • 「そういえばローカルバッファはどうなってるんだっけ?」
        • 「HTTPTextにデフォルトバッファサイズがあるなぁ。」
        幾つかの断片的な情報をつなぎ合わせてくると疑問が湧いてきます。
        1. 「数十バイトのテキストをリクエストする分には1秒ほどで済む。」
        2. 「テキストをどんどん大きくしていったらどういう風になるだろう?」
        3. 「パフォーマンスとHTTPTextのバッファサイズとどういう関係があるのだろう?」
        そこで実験してみることにしました。

        サイズの異なる複数のテキストファイルを準備しました。
        例えば32バイトであればhttp://mbed.org/media/uploads/shintamainjp/textfile_32bytes.txtのような感じです。

        次にテストプログラムを実装しました。
        テストは
        1. HTTPサーバからテキストファイルを読み込む。
        2. HTTPTextのバッファサイズは8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096を試行する。
        3. テキストのファイルサイズは8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096を試行する。
        要するに10x10で合計100の条件を与え、HTTPTextのバッファサイズとHTTPサーバ上にあるファイルサイズとの相関関係を見る形を取りました。
        http://mbed.org/users/shintamainjp/programs/PerformanceProblemsWithHTTPText/latest

        出力結果は以下の通り

        (Buffer size of a HTTPText : 8)
        +---------+--------+----+
        |File size|Time[ms]|Code|
        +---------+--------+----+
        |        8|   31525| 200|
        |       16|   30976| 200|
        |       32|   30974| 200|
        |       64|   30976| 200|
        |      128|   30978| 200|
        |      256|   30974| 200|
        |      512|   30971| 200|
        |     1024|   30974| 200|
        |     2048|   30975| 200|
        |     4096|   30976| 200|
        +---------+--------+----+

        (Buffer size of a HTTPText : 16)
        +---------+--------+----+
        |File size|Time[ms]|Code|
        +---------+--------+----+
        |        8|     831| 200|
        |       16|   30977| 200|
        |       32|   30970| 200|
        |       64|   30977| 200|
        |      128|   30975| 200|
        |      256|   30978| 200|
        |      512|   30972| 200|
        |     1024|   30976| 200|
        |     2048|   30976| 200|
        |     4096|   30976| 200|
        +---------+--------+----+

        (Buffer size of a HTTPText : 32)
        +---------+--------+----+
        |File size|Time[ms]|Code|
        +---------+--------+----+
        |        8|     831| 200|
        |       16|     971| 200|
        |       32|   30975| 200|
        |       64|   30976| 200|
        |      128|   30980| 200|
        |      256|   30972| 200|
        |      512|   30976| 200|
        |     1024|   30985| 200|
        |     2048|   30966| 200|
        |     4096|   30974| 200|
        +---------+--------+----+

        (Buffer size of a HTTPText : 64)
        +---------+--------+----+
        |File size|Time[ms]|Code|
        +---------+--------+----+
        |        8|     830| 200|
        |       16|     975| 200|
        |       32|     975| 200|
        |       64|   30971| 200|
        |      128|   30980| 200|
        |      256|   30972| 200|
        |      512|   30980| 200|
        |     1024|   30970| 200|
        |     2048|   30976| 200|
        |     4096|   30975| 200|
        +---------+--------+----+

        (Buffer size of a HTTPText : 128)
        +---------+--------+----+
        |File size|Time[ms]|Code|
        +---------+--------+----+
        |        8|     828| 200|
        |       16|     975| 200|
        |       32|     974| 200|
        |       64|     976| 200|
        |      128|   30974| 200|
        |      256|   30976| 200|
        |      512|   30976| 200|
        |     1024|   30975| 200|
        |     2048|   30976| 200|
        |     4096|   30974| 200|
        +---------+--------+----+

        (Buffer size of a HTTPText : 256)
        +---------+--------+----+
        |File size|Time[ms]|Code|
        +---------+--------+----+
        |        8|     829| 200|
        |       16|     974| 200|
        |       32|     973| 200|
        |       64|     974| 200|
        |      128|     974| 200|
        |      256|   30975| 200|
        |      512|   30977| 200|
        |     1024|   30975| 200|
        |     2048|   30977| 200|
        |     4096|   30977| 200|
        +---------+--------+----+

        (Buffer size of a HTTPText : 512)
        +---------+--------+----+
        |File size|Time[ms]|Code|
        +---------+--------+----+
        |        8|     827| 200|
        |       16|     975| 200|
        |       32|     973| 200|
        |       64|     973| 200|
        |      128|     978| 200|
        |      256|     969| 200|
        |      512|   30975| 200|
        |     1024|   30977| 200|
        |     2048|   30975| 200|
        |     4096|   30975| 200|
        +---------+--------+----+

        (Buffer size of a HTTPText : 1024)
        +---------+--------+----+
        |File size|Time[ms]|Code|
        +---------+--------+----+
        |        8|     829| 200|
        |       16|     973| 200|
        |       32|     973| 200|
        |       64|     975| 200|
        |      128|     974| 200|
        |      256|     974| 200|
        |      512|     975| 200|
        |     1024|   30974| 200|
        |     2048|   30976| 200|
        |     4096|   30976| 200|
        +---------+--------+----+

        (Buffer size of a HTTPText : 2048)
        +---------+--------+----+
        |File size|Time[ms]|Code|
        +---------+--------+----+
        |        8|     830| 200|
        |       16|     974| 200|
        |       32|     977| 200|
        |       64|     976| 200|
        |      128|     971| 200|
        |      256|     976| 200|
        |      512|    1106| 200|
        |     1024|     848| 200|
        |     2048|   31364| 200|
        |     4096|   30851| 200|
        +---------+--------+----+

        (Buffer size of a HTTPText : 4096)
        +---------+--------+----+
        |File size|Time[ms]|Code|
        +---------+--------+----+
        |        8|     564| 200|
        |       16|     968| 200|
        |       32|     973| 200|
        |       64|     974| 200|
        |      128|     975| 200|
        |      256|     975| 200|
        |      512|     971| 200|
        |     1024|     976| 200|
        |     2048|    1244| 200|
        |     4096|   31251| 200|
        +---------+--------+----+
        結果を表にしてみました。


        明らかにおかしな現象が確認できます。
        • バッファサイズとテキストファイルサイズとの関係で現象の有無が決まる。
        • バッファサイズがテキストファイルより小さいと問題が発生する。
        HTTPClientかHTTPTextの実装に問題がありそうです。
        ソースコードは公開されていませんので、ここから先はARM社の仕事になりそうです。

        mbed.orgにトピックを上げておきました。
        http://mbed.org/forum/bugs-suggestions/topic/1180/

        2010年8月26日木曜日

        mbedライブラリ revision 24 のTickerとTimeoutのバグ

        なんだか怪しい挙動を繰り返していたmbedライブラリ revision 24 ですが、
        先ほど修正版がアップデートされていました。
        http://mbed.org/forum/bugs-suggestions/topic/990/


        少なくとも私の書いたバグ出しテストプログラムでは現象が再現しませんでした。
        http://mbed.org/users/shintamainjp/programs/TestProgramForBugTopic990/latest

        まずはひと段落というところでしょうか。
        ありがとうJon Wardさん。

        2010年8月25日水曜日

        ☆ボードオレンジ:「活用事例3:wiiヌンチャクを使ってチョロQを運転しよう!」

        先日の活用事例2では赤外線受信機能を設計実装して、赤外線リモコンでmbedを制御するというものでした。

        今回の活用事例3では赤外線送信機能を追加し、デモアプリケーションとしてチョロQハイブリッドを制御するプログラムを御紹介します。

        http://mbed.org/users/shintamainjp/notebook/starboard_example3_ja/


        今回設計した赤外線送受信ライブラリを使えば、受信した信号と同じものを送信することができるようになります。家庭にある赤外線リモコンを片っ端に調べてみると面白いことがわかるかもしれません。


        ちなみにチョロQハイブリッドはタカラトミーが作ったものですが、赤外線リモコンのフォーマットはソニーのもの。両者の関係がこんなところにも見えるのは面白いものです。

        今回はwiiヌンチャクを使ってチョロQを運転できるようにしました。
        mbedを寝かせっぱなしの方がいましたら、是非お試し下さい。

        2010年8月22日日曜日

        mbedを赤外線で操作しよう

        mbedのページに実用ライブラリシリーズ:赤外線送受信ライブラリを記載しました。
        これは赤外線の送受信に対応したライブラリです。
        以下のようなAPIで簡単に操作することができるようにしました。
        ☆ボードオレンジでも使用可能:☆ボードオレンジ:「活用事例2:赤外線リモコンで楽々操作しよう!」

        2010年8月17日火曜日

        Revision 24のmbedライブラリにおけるTickerとTimeoutのバグ

        Revision 24のmbedライブラリにおいて、TickerとTimeoutにバグがありそうです。
        いずれもattachとdetachの動作に問題がありそうで、他のTickerの動作を壊したりします。

        現在ARM社のmbedチームの方とやり取りをしています。
        http://mbed.org/forum/bugs-suggestions/topic/990/

        当初こちらで作成していた赤外線受信クラスのバグかと思っていました。
        腑に落ちない点があり簡単な動作テストプログラムを記述したところmbedライブラリのバグが発覚。

        これは皆さんも遭遇しそうなバグなので積極的にバグフィックスのためのサポートをしたいと思います。

        2010年8月13日金曜日

        ☆ボードオレンジ「活用事例2:赤外線リモコンで楽々操作しよう!」

        http://mbed.org/users/shintamainjp/notebook/starboard_example2_ja/に記事を記載しました。

        ☆ボードはmbedを活用する上で最高に便利な基板ですが、スイッチがありません。
        スイッチを取りつける事を考えてみましたが、せっかく☆ボードがコンパクトにまとまっているので、あまり積極的になれません。


        どこに付けよう・・・。


        そこで、今回はスイッチを取りつける代わりに赤外線受光モジュールを取りつけ、外部からリモートコントロールできるようにしてみました。こうすれば、以下のようなモジュールを1つ付けるだけで沢山のスイッチ入力に対応することが可能になります。


        こんな風に・・・。


        詳しくはリンク先をご覧ください。