2017年12月10日日曜日

IOT事始め その2

 前回に引き続き、Texas Instruments のマイコン RM57 Launch Padを利用してIOTの実現を試みた内容を忘備録的に述べます。
 前回のデモプログラムでは ただRM57が抱えている、固定のHTTPファイルを単にWebブラウザに配信するだけで物足りなさを感じていました。RM57の処理した結果をHTTPファイルに反映させる必要があると考えました。まず、デモプログラムのファイルシステム(fsdata)にある、index.htmlを書き換えることで、動的なHTTPファイルを実現出来ないかと考えました。
 ソースとなるHTMLファイルに書き換え領域を示すタグを仕込み、その領域をRM57で処理した結果で書き換えれば、多少の制約があるが程々のものができるのではないか、しかしデモプログラムのソースをチェックすると。fs.cにfs_read()はあるけれど、fs_write()がありません。安直にfs_read()でindex.htmlを読み込み、タグをRX57のプログラムで適当に編集した文字列で置き換え、fs_write()でこのファイルを更新してしまえば、当初のIOTの実現が達成されるのではと。。。
 そうなると、ファイルシステム(fsdata)を動的なものに置き換える必要があります。以前、SDカードの読み込みをRM57で試していましたが、なかなかうまくいかず挫折していましたが、今回再度挑戦、、、長期戦を決断しました。

 ファイルシステムをSDカードのファイルシステム FatFs に置き換えることで動的なファイルシステムを実装することにしました。

 RM57は、豊富ペリフェラルを持ちSDメモリーカードに使用するSPIも単独で使用することができました。
 後はひたすら、httpd.cの fs_read(),fs_open()を FatFsのf_read(),f_open()に置き換えることで生じる膨大なビルドエラーに対応しました。
 あと、#define で LWIP_HTTPD_DYNAMIC_FILE_READ 、LWIP_HTTPD_DYNAMIC_FILE_READ を定義する必要があります。
  

 なんとか、SDカードにあるHTMLファイルが Webブラウザに表示できるようになりました。 すると今度はWebブラウザからRM57を制御したくなりました。
 今から十数年まえ、NetscapeのWebサーバでCGIを使っていた事を思い出すと、httpd.cのコメントにCGIの記載があることに気が付きました。
 
 今度はCGIの実装に挑戦です。 


 このプログラムはWebブラウザで入力されたRGBの色の値をRM57に送り、LCDディスプレイにその色で描画するといったものですが。自己満足は十分に満たしたものとなっています。
  

  

2017年6月21日水曜日

IoT事始め

 遅ればせながら、IoTを体験したいと思い、Texas Instruments LaunchPad(LAUNCHXL2-RM57L) の デモアプリケーションを試してみました。

 このデモアプリケーションでは、HTTPDの機能、DHCPからのIPアドレスの取得、シリアル通信によるログ出力が実現されています。

○デモアプリケーション(開発環境、ソースコード)を TI Wikiよりダウンロード。


 ※(http://processors.wiki.ti.com/index.php/LAUNCHXL2_RM57L:_lwIP_Demo)


○開発環境の整備
 ・Code Composer Studio(CCS)は  Version: 6.2.0.00050 にアップデート
 ・HALCoGen  は Window10で一部の画面表示が乱れるので、Windows7 で インストール(アップデート)を行いました。(Window10で一部の画面表示が乱れはかなり少なくなっていますが、まだ使用には耐えられないようです。)
○デモアプリのダウンロード
 ・デモアプリをダウンロードし展開
(フォルダ「HALCoGen EMAC Driver with lwIP Demonstration\v00.03.00¥」に実行ファイル、ソースコードが展開されます。)
(HALCoGenのサブパッケージもインストールされるようです。前述のアップデートは不要かも?ここでアップデートも行われるかも?)
HALCoGen によるRM57のコンフィグレーション
 ・GIO、SCI1、MIIおよびPINMUXの設定を行いました。ただひたすら、Wikiの説明通りの修正作業となりました。
   (from MII_RX_AVCLK4 to MII_RXCLK....の記述がいまいち不明で balls T4, U7 のMII_RXCLK、 MII_TX_CLKを選択。)
 ・RM57Lのコンフィグレーションソースの生成
○CCSによるデモアプリの生成
 ・Wikiの説明通りプロジェクトのインポート、コピーを行う。
 ・HALCoGenの生成ソースコードへのリンクを行う。
 ・HL_phy_dp83640.h、HL_sys_main.cを修正する。
XDS110 Emulator設定
 ・targetConfigsフォルダのRM57L8xx.ccxmlの修正
   「RM57L8xx_0」を「RM57L8xx」に、「XDS110 USB Debug Probe_0」を「XDS110 USB Debug Probe」に修正。
○デバッグ実行
 ・ターミナルソフトをCOM3、9600BPSで立ち上げ実行


LAUNCHXL2-RM57Lはネットに接続していないのでDHCPからのIPアドレス取得エラーが表示されているが、一応稼働しているらしい。






○ちょっと修正

 最初、LauchPadへの接続が不調で、過去に作成した、RM57Lプロジェクトにこのデモアプリケーションのソースを組み込み。なんとか、IoTの実現の第一歩にたどりついた様子を掲載します。



※今回のデモアプリケーションにBOOSTXL-K350QVGへの表示機能を追加したアプリケーション。














※ルータにLaunchPadを接続して、デバック実行
 DHCPによるIPアドレスの取得に成功している。








※WebブラウザでLauchPadにアクセスする。

表示されている内容は、Cのソースコードに変換して、プログラムで定義されたデータの形で扱われている。(固定の表示)








◇コンパイルエラーが多少出る。
 ・HL_pinmux.c の pinMuxReg->PINMUX[9] = PINMUX_BALL_R4_ | PINMUX_BALL_N17_EMIF_nCS_0 | PINMUX_BALL_L17_EMIF_nCS_2; でコンパイルエラー
 対処:PINMUX_BALL_R4_を削る。  など

◇Launch Padのパッケージを開封した際、MACアドレスが同封されていることを期待していたのですが、、、、残念、古い古い、ノートPC(Win95)のEtherNetカードのMACアドレスを流用しようと思います。(ローカルで使う分には、何を使おうが関係ないのですが。。。。)


◇今後は、RM57Lとのデータやパラメータの送受信が HTTPDを介して 実現できたらと思います。