目次
開発の経緯
弊社所在地の鳥取県では、スーパーの閉店が相次ぎ、自動車の運転ができない高齢者を中心に買い物難民問題が発生しています。幸い、閉店後の店舗を他事業者が別スーパーとして開店した店舗もありますが、完全に閉店してしまった店舗もあります。
ただ、人口減少が続く鳥取県においては、実店舗閉店は今後も続くことですし、それに伴う買い物難民問題も継続することになります。
よって、今後の買い物の方法としてはオンライン注文をして配送してもらうことが増加すると考えられますが、特に高齢者を中心にオンライン注文を苦手とする方々をどのようにサポートするかが課題です。
そこで、オンライン注文にWEBやスマホアプリを利用することなく、もの(メダル)を使って簡単に注文するシステム「メダルカート(仮)」を開発しました。
メダル(RFIDタグ)をメダルカートに投入し、注文ボタンをタッチするだけ。簡単に注文することが可能です。
メダルカートは下記のような動作をします。
- お客さんがメダルカートで注文(簡単操作)
- お店のスマホに新規注文通知
- お店で配達予定日を設定
- お客さんのメダルカートに配達予定日通知
技術検証項目
今回の開発においては、下記項目の技術検証を主な目的としています。
- M5Stack Core2のUIFlowによるソフトウェア開発
- HF帯RFIDリーダー・タグの読み取り精度確認
- LTE-M通信モジュールにおけるCoAP/UDPプロトコルによる双方向通信
- IoT専用SIM「1NCE」でのデータ処理
- Google Firebaseでのバックエンド開発
- React Native Expo Routerでのフロントエンド開発
- Expo利用によるiOS / AndroidへのPUSH通知
M5Stack Core2
UIFlowによる開発
M5Stack Core2の開発では、従来はArduino IDEを利用することが多かったのですが、最近ではDX関連ツールにローコード・ノーコードツールが採用されることが増えているため、M5Stackのローコードツール「UIFlow」を用いて開発しました。
基本的な処理は既存のブロックを組み合わせることで開発可能ですが、既存ブロックでは対応できない処理はPythonを利用することで解決できました。
また、UIFlowを利用すれば、画面へのボタン表示、画像表示、日本語表示も比較的簡単に実装可能です。
HF帯RFIDリーダー・タグの読み取り精度確認
UHF帯のRFIDリーダー・タグを用いたデバイスやアプリの開発経験はあるため、今回はHF帯のRFIDリーダー・タグを利用することにしました。UHF帯は広範囲の読み取りが可能ですが、HF帯はリーダーから10cm程度の距離が読み取り範囲です。
HF帯のRFIDリーダーを製造しているメーカーに数社問い合わせしたところ、全てのメーカーからタグが重なっていると読み取り不可のため、重ならないように並べる必要があるとの回答でした。
当初の構想では、カゴのようなものにメダルを投入して一括読み取りする構想でしたがタグの重なりは回避困難なため、1個ずつタグを読み取る方式に変更しました。
1個ずつタグを読み取る方式の場合、タグをリーダー上に乗せたり外したりするのは面倒なため、自動販売機のようにRFIDタグを内蔵したメダルを投入し、移動するメダルをRFIDリーダーで読み取ることにしました。
移動中のメダルのデータを正確に読み取れるかが課題でしたが、メダルが落下するスロープの角度や読み取りタイミングを調整することで、高精度にRFIDタグのデータを読み取り可能であることを確認しました。
200回のメダル投入試験では、読み取り失敗は0回でした。
今回利用したRFIDリーダーはM5Stackに直接接続可能な安価なRFIDユニットです。
メダルに利用したRFIDタグはこちらです。タグ本体の他に外側のケースもセットになっています。
3Dプリンタによる筐体制作
メダルカート本体のケース(筐体)は3Dプリンタにより制作しています。上記に記載しましたとおり、メダルが落下するスロープの角度調整にはトライ&エラーが想定されたため、スロープ部分とその他の部分を分離した形状で3Dプリントしています。メダルカートにおけるスロープの最適な角度が判明したため、次回以降はスロープ部分も結合した状態で筐体を制作予定です。
制作に利用している3Dプリンタは、FLASHFORGE Adventurer3 という15cm四方程度の小型なものしか制作できませんが、IoTデバイスは小型なものが多いので、結構役立ちます。
大型のもの、ある程度の数量の量産時には、外注します。
LTE-M通信モジュールにおけるCoAP/UDPプロトコルによる双方向通信
通信モジュールについて
当初はM5Stack Core2に簡単に使用可能な下記CAT-Mモジュールを考えていましたが、9Vの外部電源を供給しなければ通信が安定しなかったため、不採用にしました。
代用として、M5Stack用ではありませんが、M5Stack Core2とUART接続で利用可能な下記通信モジュールを採用しました。
CoAP/UDPプロトコルによる双方向通信
メダルカートとサーバー間の通信にはUDPを利用しました。当初はCoAPを利用予定だったのですが、どうしてもうまく接続できない部分があり断念。原因を調査したうえで、CoAPに変更する予定です。
CoAPはIoTに適した通信プロトコルです。Goolgeの生成AIによると、
CoAP(Constrained Application Protocol)は、制約のあるデバイス向けに特化したインターネットアプリケーションプロトコルです。IoTデバイスなどのようにメモリ・消費電力・帯域幅などリソースに制約のあるデバイスが、効率的にWeb通信を行えるように設計されています。
CoAP(Constrained Application Protocol)は、制約のあるデバイス向けに特化したインターネットアプリケーションプロトコルです。IoTデバイスなどのようにメモリ・消費電力・帯域幅などリソースに制約のあるデバイスが、効率的にWeb通信を行えるように設計されています。CoAPは、HTTP(Hypertext Transfer Protocol)に似たプロトコルですが、IoTデバイスの制約に合わせて軽量化されています。UDP上で動作しますが再送処理をサポートしています。また、UDPを使ってHTTPを実装しているような仕組みになっています。
後ほど記載予定ですが、今回利用しているSIM「1NCE」は1ヶ月の通信量が4MB程度のため、なるべく1回の通信量を削減する必要があります。HTTPS/HTTPだと通信量が増加するため、CoAPでの通信を目指しています。
今回は、メダルカートからサーバーに注文データを送信する、サーバーからメダルカートに配送日を送信するという双方向通信に利用しています。
「1NCE」ではデバイスに対してデータを送信するための仕組みが準備されており、簡単にデータ送信可能です。
IoT専用SIM「1NCE」でのデータ処理
「1NCE」は日本国内ではソフトバンクさんが販売代理店をされているグローバルSIMのため、海外でも利用可能です。特徴は10年間で500MBのデータ通信ができる買い切り型のSIMです。そのため、データ通信量を削減すれば、格安で利用することが可能です。
日本国内ではSoftbankとKDDI(au)の電波を利用可能であるため、メダルカートの場合はまずSoftbankに接続を試み、接続に失敗した場合にはKDDIに接続する処理にしています。
1NCEの概要については、下記記事をご覧ください。
Google Firebaseでのバックエンド開発
Firebaseは小規模のプロジェクトであれば無料で利用可能なため、弊社ではよく利用します。Cloud Functionsなどの機能を利用するためには従量制プランに移行する必要がありますが、無料枠が多いため小規模プロジェクトであれば無料で利用可能です。(1年間のみ無料とかではないため安心して利用できます)
Coming soon…
React Native Expo Routerでのフロントエンド開発
React Native Expo RouterはiOSアプリ、Androidアプリ、WEBアプリを一括開発できる開発環境です。簡単なアプリであれば短期間で開発可能です。
iOSアプリやAndroidアプリはスマートフォンにダウンロード・インストールすればそのまま利用できますし、WEBアプリはFirebase Hostingを利用して公開することで、PCのブラウザからアクセスして利用することが可能です。これらを、3つ別々に開発することなく1つのソースコードを書くことで構築可能であり、開発期間の短縮や開発費の削減につながります。
Google生成AIによると、
React Native Expo Router は、React Native アプリケーションでファイルベースのルーティングを行うためのライブラリです。
Expo Router の特徴は次のとおりです。
・ルーティングの定義をすべてファイルベースで行い、対応する URL が自動的に定義される
・React Native で利用されることの多い React Navigation を利用して構築されている
・素の React Navigation を使うより簡潔にナビゲーションの管理を行うことができる
・Next.js のようなファイルシステムベースのルーティングを実現する
Expo Router は、React Native を使ったアプリ開発をサポートしているフレームワークの 1 つである Expo で使用できます。Expo を使えば、スマホのカメラを使ったアプリや位置情報取得を用いた地図アプリなどはネイティブのコードを書かずに実装できます。
Coming soon…
Expo利用によるiOS / AndroidへのPUSH通知
メダルカートでは、新規注文時に店舗用のスマホアプリに自動的に通知(PUSH通知)が届きます。iOSとAndroidではPUSH通知を送信する仕組みが異なるため、従来は別々に構築する必要がありましたが、Expoを利用することで簡単にPUSH通知を送信可能であることを確認しました。
Coming soon…