« SPIデバイスの混在とSS信号の初期状態 | トップページ | Fedora 11にCellクロス開発環境(SDK 3.1)をインストール »

Arduino RSSリーダー

これまでに準備した、GLCDへの漢字表示やRSSサイトのXML解析などのパーツをまとめてRSSリーダーを作りました。最低限の機能しか実装してありませんが、Yahoo天気情報を読み込んで1週間分の天気予報を表示するリーダーです。

ハード構成

自作のGLCDシールドをベースに、RSSの記事選択等に使うタクトスイッチを加えて、以下のハード構成としました。

Glcd_shield3v2_2

スケッチ

ArduinoでXMLを解析する」で使用したNunniMCAX XMLパーサーを使用しました。このライブラリはXMLパーサーとしては非常にシンプル・コンパクトですが、Arduino向けとしてはメモリー使用量が多くATMega328ではSRAM容量が不足してしまい、Arduino Megaが必要となります。今回は、ハードリソース的にもディジタルピンの必要本数が328では足りず、Arduino Megaが必要となっているためよしとしました。

スケッチのソースを以下に示します。
  Weather11pub.zip」をダウンロード

スケッチが起動すると、Yahoo天気情報のRSSサイトにアクセスして今日の天気をGLCDに表示します。対象地域は神奈川県東部(私のすみか)固定です、、

Rssreader

RSS情報の解析

Yahoo天気情報は、以下のソース情報抜粋に示すように、RSS 2.0の形式で配信されます。RSS 2.0はXML文書の一種です。

<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
  <channel>
    <title>Yahoo!天気情報 - 東部(横浜)の天気</title>
    <link>http://rd.yahoo.co.jp/rss...............</link>
    <description>Yahoo! JAPANの天気情報に掲載されている最新の情報を提供しています。</description>
    <language>ja</language>
    <copyright>Copyright (C) 2009 Yahoo Japan Corporation. All Rights Reserved.</copyright>
    <lastBuildDate>Sun, 06 Sep 2009 09:51:29 +0900</lastBuildDate>
    <item>
      <title>【 6日(日) 東部(横浜) 】 晴時々曇 - 27℃/22℃ - Yahoo!天気情報</title>
      <link>http://rd.yahoo.co.jp/rss..............</link>
      <description>晴時々曇 - 27℃/22℃</description>
      <pubDate>Sun, 06 Sep 2009 05:00:00 +0900</pubDate>
    </item>
    <item>
      <title>【 7日(月) 東部(横浜) 】 曇時々晴 - 26℃/22℃ - Yahoo!天気情報</title>
      <link>http://rd.yahoo.co.jp/rss..............</link>
      <description>曇時々晴 - 26℃/22℃</description>
      <pubDate>Sun, 06 Sep 2009 05:00:00 +0900</pubDate>
     </item>

       ~ 中略 ~

   </channel>
</rss>

XML情報解析のプログラム部分は、「ArduinoでXMLを解析する」に示したサンプルスケッチと同様です。<item>~</item>タグに囲まれた部分(以後"item"要素と呼びます)が、日毎の天気情報(記事)になります。そのため、"item"要素の開始を見つけた時点で、ItemCount変数をインクリメントし、n番目のitem(デフォルトは1)内にある、"title"要素と"pubDate"要素を抜き取ってGLCDへの表示情報とします。

タクトスイッチを操作することで、翌日・前日の予報に移動します。表示対象日を切り替えた場合はページ全体をリロードして新たな対象日の予報を表示します。item毎の情報をメモリーに保持した方がレスポンスが上がるのですが、現状は手抜きをしています。

RSS 2.0を使用したサイトなら、この方法で記事のタイトル・概要(description)を取り出すことができると思います。RSSには1.0という別の形式がありこちらはフォーマットが全く異なります(RSS 1.0の方が複雑です)。今回は使用していませんが、NunniMCAXにはアトリビュート情報を取り出す機能もあるため、rssタグ(<rss version="2.0">)からversionアトリビュートを取り出して2.0 or 1.0の判定を行うことによって、RSS 2.0と1.0の両方に対応したRSSリーダーを作ることも可能です。

使用したライブラリ

XML解析パーサーとして使用したNunniMCAXとSPI Flash memory(AT45DB161D)ライブラリ以外は、Arduino - Librariesから入手できます。今回のプロジェクト用に変更を行った箇所は以下です:

1) ks0108 GLCD Library
最新のV2をベースに、「Arduinoで漢字表示(4)」で示した漢字表示のコードを追加しています。今回さらに、画面幅を超える長い文字列を表示する際に、自動的に改行を行う機能を追加しました。また、画面の最終行(12ドットフォントの場合、Y座標52~63にかけて)に表示ができない問題を見つけたため修正を盛り込みました。

2) Ethernet Library
WIZ812MJ(W5100搭載モジュール)とAT45DB161D(SPIフラシュメモリー)を同時使用するための変更を実施。

3) String Library
このライブラリも結構メモリーを喰いますが、文字列操作が楽ちんなので使用。メモリーリークバグの修正を盛り込んでいます。

今回使用したライブラリ一式(Arduinoサイトから入手できるライブラリは変更を行ったファイルのみ)を以下に示します。
 「LibraryForWeather11.zip」をダウンロード

余談

ks0108ライブラリの最終行が表示できない問題の解決には結構時間を取られました。GLCD制御レジスタ(ピクセル位置の指定)の操作、書き込むフォントデーターのビット操作が少々複雑で、私の頭の中ではプログラムの動作がイメージし切れませんでした。だいぶ前に、優秀なプログラマーは、部屋数が20位あるお屋敷の総模様替えを頭の中で出来る人、即ちプログラムの実行ステップに従って刻々と変化する変数やハードの状態を頭の中で追える人だとありましたが、その通りだと思いました。

EclipseやVisualStudioではビジュアルなデバック機能に助けられるのですが(上記の状態変化を追いかける仕事の多くを実行・補助してくれる)、Arduinoのデバック環境が貧弱な点も苦戦要素の一つでした(言い訳ですが)。 昔ならもう少し脳内トレースもできたと思うのですが、歳のせいもありそうです。

今回見つけたks0108の問題の修正イメージをArduino Forumにアップしたところ、ライブラリの作者さんから速攻でより美しい修正イメージが提示されました。悩むよりさっさとバグレポートした方が早かったような、、

2010/3/28更新:
WIZ812MJのSCKピン番号を誤記修正

« SPIデバイスの混在とSS信号の初期状態 | トップページ | Fedora 11にCellクロス開発環境(SDK 3.1)をインストール »

Arduino」カテゴリの記事

コメント

RSSリーダーの完成おめでとう御座います。
この後はどういう方向へ向かわれるんでしょう?
楽しみにしてます。

私の方は最近知ったMinimigというイタリア製のFPGAが気になってます。
Spartan-3を搭載しているのでAmigaやX1 turbo程度のクローンまでは作成できるようです。
Digikeyで2万円ぐらいでethernetもついたSpartan-3ANが買えるようなのでそちらの方がよさそうですが。
もう少し研究してから買うかもしれません。

beagleboardさん、いつもコメントありがとうございます。

今後ですが、Arduinoのプロジェクトはネタ切れ状態です。。。
AVRですと限界を感じる時もあり(処理性能ではなく、I/Oピン数やRAM容量です)、ARMを触ってみたいと思っています。先ずはコンパイラなど開発環境を構築して眠っているトラ技付録のARMボードを動かしてみようかと。Beagle Boardも何回かポチりそうになったのですが、Cortex-A8クラスになるとハードを触る余地がなくなること、OSもLinuxクラスでPCと差がなくなる(自作の余地が減る)ため、躊躇しています。

Minimigはwebページを見ましたがおもしろそうですね。どこからこんなネタをお探しに! 情報通恐れ入ります。

レス有難う御座いました。
AVRの限界をなんとか出来ないかということで調べていたところDuino644というのが発表されました。
http://timewitharduino.blogspot.com/2009/09/introducing-duino644.html
RTC + EEPROM + SDカード という夢のようなArduinoです。
今後、なにかのシールドも発表されるようです。最近の注目開発者のひとりです。

STM32も楽しそうですね。最近、秋月とかでも見かけますね。

他に、見つけたものではALTERAとARROWの協力で作られた製品BeMicroも面白そうです。
http://ow.ly/qmnl
USB接続でCycloneIIIの上でNiosIIという32ビットのソフトCPUが動きます。
来年はFPGAの特定用途向けのボードが各種出るらしいですし楽しみです。

ではまた。

Duino644よいですね。AVRでは、ATMega644がdigital入力のピン数とメモリ量などで一番バランスがよいように思います(ATMega1280だと、自分には多すぎて使い切れないです)。

これまで何回かコメント下さったhamayanさんのブログで、STM32を使用したArduino Likeなボードが紹介されていました。こいつもなかなかそそられたのですが、STM32 Primer2に走ってしまいました。STM32クラスになるとAVRとは比較にならないほど機能が多くかつ複雑なのでしばらく格闘の日々が続きそうです。

FPGAも興味があるのですが今は時間的にちょっと手が出ないです。どこかで挑戦してみたいですね。CPLDを使って「CPUの創り方」にある4bitマイコンを自作したいと思っていた時期がありました。結局もうちょっと実用的なArduinoに方向転換したのですが、、

SanguinoでEthernetを使いたいと思い、Blogを参考にさせていただいております。
有益な情報をありがとうございます。

回路図を参考にさせていただいている際に気付いたのですが、WIZ812MJのSCKがJ1_3となっていますが、J2_3が正の様です。

ytsuboiさん、
コメントありがとうございました。ご参考になればなによりです。
回路図の誤記、ご指摘恐縮です。修正版をアップしておきました。

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

« SPIデバイスの混在とSS信号の初期状態 | トップページ | Fedora 11にCellクロス開発環境(SDK 3.1)をインストール »

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      
無料ブログはココログ