Wi-Fi と RTSP カメラストリーミング¶
IPRO7AI Reef EVK は FIN カードを通じてネットワークに接続します。FIN カードは microSD スロット(CARD1)に挿す IPRO6S Wi-Fi カードで、IPRO7AI と SDIO で通信します。このチュートリアルを終えると、Reef で出荷時ファームウェア ipro7ai_reef_demo の Wi-Fi 版(defconfig_wifi_ipro6s)が動作し、お使いのアクセスポイントに接続して、カメラ映像を MJPEG として RTSP で rtsp://<IP>:8554/av0_0 から配信します。この映像を VLC または ffplay で視聴します。最後の手順では、ipro6s_ota を使って Wi-Fi 経由で FIN カードのファームウェアを更新する方法を示します。
前提条件¶
- IPRO7AI Reef EVK、IPRO6S FIN カード、OV5640 FLEX-24 カメラモジュール。
- FIN カード上の Wi-Fi ファームウェア:
defconfig_ipro6_sdioでビルドした IPRO6S のipro6_if_wifiアプリケーション(SDIO 版。手順 2 を参照)。 - U6 に接続した IPRO Debug Probe または 3.3 V USB-UART ケーブル(115200 8N1。配線は IPRO7AI Reef EVK を参照)。
- 最初の FreeRTOS アプリケーションを完了し、開発環境の準備に従って IntelProCube 0.7.0.1 のコマンドライン書き込みツールをインストールしていること。
- Wi-Fi アクセスポイント(SSID とパスフレーズ)と、同じネットワーク上にあり、VLC または
ffplayをインストールしたコンピューター。
FIN カードへの最初のファームウェア
SDK には、FIN カードのファームウェアのソースとビルド構成、および Wi-Fi 経由でファームウェアを更新する ipro6s_ota コマンドが含まれています。ファームウェアがまだ書き込まれていない FIN カードに書き込むには、INTELPRO にお問い合わせください。
手順¶
-
FIN カードとカメラを取り付けます。 まず USB-C を抜きます。JP3 を GPIO に設定し(これでスロットの電源が GPIO14 に従います。
fin cycleでカードの電源を入れ直すにはこの設定が必要です)、FIN カードを microSD スロットに、カメラケーブルを FPC1 に挿します。SW7 が CAM、SW8 が PWR になっていることを確認し、U6 を接続して、最後に USB-C を接続します。 -
(任意)FIN カードのファームウェアをビルドします。 カードを更新する場合(手順 10)にのみ必要です。SDK のルートから次を実行します。
出力は
apps/platform/ipro6_if_wifi/build_ipro6_sdio/build_out/ipro6_if_wifi_IPRO6.binです。この構成では、リセットから約 600 ms 後に Wi-Fi と SDIO ブリッジが自動的に起動します。FIN カード側で入力するものはなく、アソシエーションと DHCP は Reef が制御します。 -
Reef の Wi-Fi 版をビルドします。
出力は
apps/platform/ipro7ai_reef_demo/build_wifi_ipro6s/build_out/ipro7ai_reef_demo_IPRO7.binです。この構成は、出荷時ファームウェアにcomponents/network/ipronet_host(SDIO ホスト側)、lwIP、RTSP サーバー(ポート 8554)を追加し、容量を確保するために USB マイク(mic usb)を外しています。 -
書き込みます。 SW1(BOOT)を押したまま SW2(RESET)を短く押し、SW1 を離してダウンロードモードに入ってから(出荷時ファームウェアが動作している場合は
reboot_dlでも同じです)、IntelProCube のディレクトリから次を実行します。出力に
[All Success]があることを確認してください(このツールは失敗しても終了コード 0 で終了します)。 -
コンソールを開いて FIN カードを確認します。 コンソールを 115200 ボーで開き、SW2 を短く押します。起動ログの最後に、使用できるコマンドが表示されます(レベルと時刻のフィールドは省略)。
REEF: shell ready - `reef`, `led`, `btn`, `spk`, `mic`, `sd`, `fin`, `cam`, `hp` REEF: IPRO-WiFi - `ipronet_up <ssid> <psk>` REEF: RTSP - `rtsp_cam on [fps]`finと入力して、カードが挿さって電源が入っていることを確認します。IPRO6S_FIN: SDIO slave in the SD slot, SD_VDD = its 3V3. seated : yes (DET GPIO15) supply : on (GPIO14, JP3 2-3 required for control) host : SDH_0 on GPIO28-33, see apps/platform/ipro7_sdio_wifi fin cycle | fin power on|off(メッセージ中の「JP3 2-3」は以前のボードリビジョンでのジャンパー名で、V4.0 ボードでは JP3 = GPIO に相当します。)
-
Wi-Fi を起動し、アクセスポイントをスキャンします。
引数なしの
ipronet_upは FIN カードの Wi-Fi を起動するだけで、ipronet_start -> 0と表示します。ipro6s_scanはスキャンを開始し、結果は非同期に届きます。1~2 秒後にipro6s_scan_lastで最新の結果を一覧表示します。 -
アクセスポイントに接続します。
[ctrl] connect '<SSID>' -> 0 (CONNECTED_IND + IP_UPDATE_IND arrive async) [ctrl] STA CONNECTED [ctrl] IP <IP アドレス> / <ネットマスク> gw <ゲートウェイ>起動と接続を一度に行うには、代わりにリセット直後に
ipronet_up <SSID> <パスフレーズ>と入力します。[ctrl] IP …の行が表示されない場合は、ipro6s_link_statusと入力します。host connected=1 ip=1と表示されれば、リンクが確立してアドレスが割り当てられています。 -
RTSP ストリーミングを開始します。
カメラがまだ動作していない場合は起動してから、フォーマットと URL を表示します。
デフォルトは 15 fps で、
rtsp_cam on <fps>で 1~30 を指定できます。 -
コンピューターで視聴します。 コンピューターを同じネットワークに接続した状態で、VLC でネットワークストリームを開き(「メディア」>「ネットワークストリームを開く」)、前の手順で表示された URL を入力します。または
ffplayを使います。rtsp_cam statsは送信したフレーム数、JPEG の平均サイズ、エンコーダーのエラーを表示します。rtsp_cam offは送信を停止し(カメラはcam stopまで動作し続けます)、ipronet_downは Wi-Fi を停止します。 -
FIN カードのファームウェアを更新します。
ipro6s_otaは HTTP サーバーから IPRO6S の OTA パッケージをダウンロードして FIN カードに書き込み、FIN カードの boot2 が再起動後にそれをインストールします。パッケージは IntelProCube で生成した IPRO6S パッケージ(FW_OTA.bin.xz.ota。512 バイトのヘッダーと XZ 圧縮された内容)です。手順 2 のビルド結果をパッケージにする手順については、INTELPRO にお問い合わせください。パッケージをコンピューター上のフォルダーに置き、そのフォルダーを HTTP で公開します。Reef のコンソールで(Wi-Fi に接続した状態で)次のように入力します。
更新全体には約 30~60 秒かかります。Reef が Wi-Fi の通信を止めてパッケージをダウンロードし、FIN カードがそれを書き込んで確認し、インストールのために再起動します。その後、Reef がカードを再度列挙して再接続します。成功すると次のように表示されます。
失敗すると
[ota] RESULT ERR rc=<コード> … phase=<フェーズ>と表示されます。
動作確認¶
finにseated : yesと表示され、ipro6s_scan_lastに周囲のアクセスポイントが一覧表示されます。- 接続後、コンソールに
[ctrl] IP …と表示され、ipro6s_link_statusにhost connected=1 ip=1と表示されます。 rtsp_cam onでrtsp://<IP>:8554/av0_0と表示され、VLC またはffplayにライブ映像が表示され、rtsp_cam statsのフレーム数が増え続けます。
トラブルシューティング¶
| 症状 | 原因 | 対処 |
|---|---|---|
fin に seated : no と表示される |
カードが奥まで挿さっていない | USB-C を抜き、FIN カードを挿し直してから再度電源を入れます |
ipronet_start が 0 以外を返す |
FIN カードが応答しない(ファームウェアがない、SDIO 版ではない、またはカードが停止している) | JP3 を GPIO にした状態で fin cycle と入力してカードの電源を入れ直し、再試行します。カードで defconfig_ipro6_sdio でビルドした ipro6_if_wifi が動作していることを確認します |
ipro6s_scan_last に 0 APs と表示される |
スキャン結果がまだ届いていない | 1~2 秒待ってから ipro6s_scan_last を再実行します。必要に応じて ipro6s_scan を再実行します |
[ctrl] IP … が表示されない |
SSID かパスフレーズが正しくない、またはアクセスポイントが範囲外にある | ipro6s_scan_last で SSID を確認します。ipro6s_disconnect を実行してから、再度 ipro6s_connect を実行します |
rtsp_cam: camera gives no frames - … |
カメラがフレームを出力していない | SW7 が CAM になっていることとカメラケーブルを確認します。cam stop と入力してから rtsp_cam on を実行します |
rtsp_cam: no IP yet - … |
Wi-Fi にまだアドレスがない | 手順 7 を完了してから、URL を表示するために再度 rtsp_cam on を実行します |
| VLC で接続できない | コンピューターと Reef が別のネットワークにある、またはアクセスポイントが無線クライアントを分離している | コンピューターから ping <IP アドレス> が通ることを確認します。アクセスポイントのクライアント分離機能をオフにします |
ipro6s_ota で [ota] RESULT ERR … phase=fetch と表示される |
コンピューターの HTTP サーバーに到達できない、またはパスが正しくない | コンピューターのブラウザーで同じ URL を開きます。ファイアウォールを確認します |
次のステップ¶
- ネットワーク:
ipronet_hostAPI、lwIP の統合、ネットワークの設定。 - IPRO6S:FIN カード上の IPRO6S チップと、その他の
ipro6_if_wifi構成。 - USB ウェブカメラとじゃんけん:代わりに、カメラ映像を USB で送信します。
- カメラと画像処理:画像パイプラインとセンサーの設定。