GR-QRとは
GR-QRは弊社製のQRコード向けソフトウェアライブラリです。
QRコードをエンコード(生成)およびデコード(読取)するためのライブラリを用意しています。
細かな話は、弊社製品ページでご確認ください。
今回の目標
今回はGR-QR/ENCODER(以下GR-QR)を使用してQRコードを生成してみようと思います。
また、なるべく小さな環境での動作を目指したいと思います。
なので、環境は以下の様にしてみました。
評価ボード:freescale社製FRDM-KL25Z
IDE:IAR社製EWARM
ベースプロジェクト:KL25 Sample Code.zip
評価ボードはいつ購入したのか不明ですが、記載されている社名からしてかなり古いものと分かります…
では、なぜこのボードを選んだのか、それは搭載されているコアがCortex-M0+である事、一択です。
ベースプロジェクトはNXP社のWEBよりダウンロードしました。
この中の
「\KL25 Sample Code\kl25_sc_rev10\klxx-sc-baremetal\src\projects\FRDM_KL25ZDemo」
をベースにしてGR-QRを動かします。
QRコードエンコーダなので、作成したコードの出力先が必要ですが、KL25ZにはLCDはついていませんので、FRDM_KL25ZDemoプロジェクトでデバッグメッセージを出力しているUSB-シリアルを流用して、接続したPCのターミナル(Teratermを使いました。)に出力しようと思います。
GR-QRの確認
GR-QRは色々なパラメータを指定できますが、今回はQR CODE Version 2を指定しました。QRコードはQR CODE Versionの値によって、コード内に含められるデータ量が異なります。QR CODE Versionの値が大きくなると生成されるQRコードも大きくなります。QRコードが大きくなるという事はエンコード結果を受け取るバッファサイズも大きなものが必要になりますので注意が必要になります。
※サポート担当からひとこと
コードサイズおよびRAM使用量が一番小さいのはVersion1ですが、Version1は右下にアライメントパターンが存在しないため、Version2以降と比べると読み取り失敗や誤読が起きやすいです。そのためVersion2以降でコード生成することをオススメしています。
GR-QRの使い方
基本的には、エンコード時のパラメータを構造体にセットし、その構造体をGRQRE_CreateQrCode()という関数に指定して実行するだけです。エンコードが出来れば指定した構造体のバッファにエンコード結果が格納されます。エラー時は指定したデータ量が多すぎるなどが考えられるのでパラメータをチェックします。
エンコードが成功したらエンコード結果をUSB-シリアルに出力します。
今回は固定文字列をバイナリとしてエンコードし、結果を「■」、「 」の2文字を使用してターミナルに表示するようなコードを作成しました。
FRDM-KL25Zの接続
ビルドがエラー無く通ったので、評価ボードに書き込もうとしたところで問題が発生しました。
EWARMで評価ボードと接続できないみたいです。
WEBを検索した所、Windows10だと良くないとかEWARMのVersionが新しすぎるなど様々出てきましたが、結果、FRDM-KL25Z上のJTAGのF/Wを更新することで解決しました。
F/Wの更新にはWindows7の環境が必要でしたが、仮想環境のWindows7で更新することで、無事接続できるようになりました。
実行結果
実行し、PCのTeratermを表示すると以下のような表示が行われました。
「Encode String」にはエンコード対象の文字列を表示し、「Encode Time」にはエンコード時間を測定して表示してみました。
表示が「■」と「 」なので隙間がありますが、手持ちのiPhoneのカメラではデコードできました。
まとめ
今回はなるべく小さな環境で動かすことを目標に、動作まで行えました。
FRDM-KL25Zは48MHzで動作していますが、エンコード時間の約70msが十分な速度と見るかは、意見が分かれるかもしれません。
また、フットプリントですがMAPファイルから算出したGR-QRの使用量はROMが約30KB、RAMが約2KBでした。このサイズはIDEや最適化、QR CODE Versionで変わりますのでご注意ください。