2010/06/05(土)HttpClientでRTCをセットする方法

2010/06/06 02:29 mbedimportnucho
先日、NTPサーバを使ってmbedのRTCに時間をセットするNTPClientというライブラリを紹介しましたが、
このライブラリだとセキュリティの問題などでネットワークの123番ポートが閉じられている場所では時間のセットができません

それでもなんとかRTCのセットができないかと調べたところ、日本標準時プロジェクトのようなサイトにhttpでアクセスして、時間が取得できそうだということがわかりました。
このサイトとhttpClientを利用して、RTCのセットを行う方法を紹介したいと思います。

今回つくったプログラムはここに置いておきます。
以下部分的な解説です。


    http.get("http://ntp-a1.nict.go.jp/cgi-bin/ntp", result,PAGE_SIZE);
    result[PAGE_SIZE]='\0';
NTPの情報ページをダウンロードしてきています。

    int start_body=strstr(result,"<BODY>")-result+7;
    int end_body = strstr(result,"</BODY>")-result-1;
    strncpy(buf, result+start_body, end_body-start_body);
    buf[end_body-start_body]='\0';
今回利用するサイトでは<BODY>と</BODY>の間に時間が書かれているので切りだしてきています。

    seconds = strtoul(buf,&e,10)-2208988800UL;
    seconds += 32400;
    set_time(seconds);
strtoulで切りだした文字列から数値に変換した後、NTP時刻とPOSIX時刻のオフセット(2208988800秒)を補正して、さらに日本のタイムゾーンに合わせています。
そしてset_time取得してきた時間をRTCにセットすることができます。
今のところ、3484746681.922というような少数を含む文字列をそのまま整数の数値に変換しようとしているので、そこはあんまりよくないかもしれません。
(strtoulがそこは無視してくれるので問題は起きていないのですが^^;)


以上簡単ではありますが、HttpClientでRTCをセットする方法の紹介でした。
NTPClientが使えない場所などで便利な場合もありそうです。

最後に注意点なのですが、日本標準時プロジェクトのサイトにも書いてある通り、1時間に20回以上のアクセスはしないようにしてくださいね。

2010/05/29(土)RFIDリーダーを使ってみた

2010/05/31 11:56 使ってみたimportnucho
私の通っている学校では、出席のチェックや部屋の電子錠を学生証を兼ねた非接触ICカードで行っています。
ひょんなことからその学生証がMifare仕様であることを知りました。

そこで、日新テクニカさんで取り扱っているMifare対応のRFIDモジュールを使って学生証のCardIDを読んでみました。

Adiaryで記事を書く練習がてら、その流れを書いていこうと思います。

続きを読む

2010/05/27(木)mbedが届きました

2010/05/27 22:17 mbedimportnucho
NXPセミコンダクターズさんのご好意でmbedを使う機会に恵まれました。

100527-133227.jpg


mbedは風変わりなマイコンです。
開発の流れは
  1. ブラウザ上でプログラミング、コンパイルを行う。
  2. フラッシュメモリとして認識されているmbedの中にダウンロードして実行。
という風になっていて、開発環境を構築する必要がほとんどありません
また、ブラウザとフラッシュメモリが動かせるならWindows、Linuxなど環境に依存しない面も便利ですね。

アナログ入力やPWMはもちろん複数のSerial,I2C,SPIがついている他、イーサネットに対応しているため使いこなせればとても面白いものが作れそうです。
これからちょっとずつ遊んでいけたらなと思ってます。