M5Stack ATOM Matrix を買ってみた

M5Stackは、以前プリン泥棒IoTを見た時から少し気になっていました。 RaspberryPiラジコンがひと段落したところで、ネットで見つけました。 news.livedoor.com

完全に衝動買いです。

開封の儀

SwitchScienceさんの箱に入って郵送されてきました。
f:id:camelrush:20200416231716j:plain

中にはプラスチックのケース
f:id:camelrush:20200416231729j:plain

出ました!
f:id:camelrush:20200416231512j:plain
ちっさ!

電源は USB Type-C で供給するようです。つないでみたところLEDが光りました。表面がボタンになっており、押すと色が変わります。 f:id:camelrush:20200416232548g:plain

改めて、M5Stack ATOM Matrixとは

M5Stack ATOM Matrixは、マイコンジュール「M5Stack」シリーズの小型版です。RaspberryPiがGPIOなどで外部センサー、アナログスイッチと接続していくのに比べ、M5Stackの場合は小さな装置自体にいくつかの部品がすでに内蔵されていることが特徴です。 www.switch-science.com

仕様 ( switch sience より )

  • USB Type-C
  • ESP32 PICOベース
  • 4 MBフラッシュメモリ
  • 2.4G SMDアンテナ:Proant 440
  • MPU6886 6軸センサ
  • 25 x RGB LED(WS2812B)
  • 1 x 赤外線LED
  • 1 x プログラム可能なボタン
  • 1 x リセットボタン
  • 6 x GPIOピン
  • Grove互換インターフェース
  • プログラムプラットフォーム:Arduino、UIFlow
  • 電源入力:5 V / 500 mA
  • 動作環境温度:0 ~ 40 ℃
  • 製品サイズ:24 x 24 x 14 mm
  • 製品重量:14 g

プログラムのアップロードなどは、USB-Type Cで行うようです。

https://d2air1d4eqhwg2.cloudfront.net/images/6260/original/c7abc607-10b1-4852-adc9-f45279a49d0a.jpg

赤外線LEDがついているんですね。テレビやエアコンといった赤外線機器を制御して、スマートホームの実験などに使えそうです。GPIOは6つあるので、ブレッドボードとモータードライバを介すれば、DCモーターなども動かせそう ← ラジコン発想^^;
ESP32 PICOというチップセット?によってWiFiBluetoothといった無線の送受信のほか、I2Cなどの各種インターフェイスに対応しているようです。ここはもう少し勉強が必要そう。

Raspberry Pi Zero を下回る安さ

非常に低価格であり現時点で1,397円。送料込みで1,600円弱でした。最近はピン配置付きの Raspberry Pi Zero WHが 2,000円を超えるので、それを下回ります。

初期セットアップ

開発に入る前に、まずはWifiに接続してみようとおもいます。まだ出回って数日しかないため、情報が少なく、公式ドキュメントをまじめに読んでいくことにします。

docs.m5stack.com

UIFlow Online Mode

英文がわからないところがありましたが、おおよそ手探りで動かしてみました。ご参考までに。

  • 最初にM5Bunnerというアプリケーションをダウンロードします(M5Stackのファームウェアを更新する、ROMライターのようなもの、と解釈しました)
    m5stack.com

  • 以下が、M5Bunnerを起動した画面です。 f:id:camelrush:20200417001241p:plain

  • 左のリストからイメージを選択してダウンロードし、Wifi用のSSID、Passwordを入力後、左のSeriesに「ATOM Matrix」を選んで「Burn」を押します。書き込みが100%まで進むと、LEDの点灯が赤→青→緑に遷移します。
    f:id:camelrush:20200417005531p:plain
    (この時、赤のままの場合は、SSIDやPasswordが間違っている可能性がありますので、再設定後に「Burn」を押して書き込みしなおしましょう)

  • LEDが緑になったら、一度ケーブルを抜きます。表面のLEDを押しっぱなしにしてケーブルをさすと、最初に緑のLEDが表示された後、黄色に遷移します(マニュアルでは、これを「Wifi構成モード」と呼んでいるようです)
    f:id:camelrush:20200417010035p:plain

  • この状態でPCのWifi接続先を確認すると「M5Stack-xxxx」というアクセスポイントが表示れます。
    f:id:camelrush:20200417004837p:plain

  • このアクセスポイントに接続後、ブラウザから 192.168.4.1 にアクセスすると、SSID、Passwordを入れる画面が表示されます。最初に、上部の「M5FLOW-xxxxxxxx」の後ろの値を控えましょう。この値はAPIKeyといい、後で機器に接続するために必要です。なぜだかもう一度SSID設定が必要そうなので、これらを入力後、Configureボタンをクリックします。
    f:id:camelrush:20200417004856p:plain

  • しばらくすると、「Wifi Connection success」と表示されます。もう一度電源を抜き差しします。LEDは緑点滅になります。PCのWifi接続先も、いつもの接続先に戻します。
    f:id:camelrush:20200417004940p:plain

  • この状態でブラウザから以下のURLにアクセスします。最初に表示される画面でAPIKeyを入力すると、M5Stackに接続されます。
    http://flow.m5stack.com/

  • M5Stack の UiFlow画面に遷移します。ここで動作プログラムを作成することができます。Scratchのようですね。上部のボタンを押すと、MicroPython言語にも変換できるようです。
    f:id:camelrush:20200417013125p:plain

  • 例として、ボタンを押したときだけLEDがつく画面を表示させます。
    f:id:camelrush:20200417014045p:plain

  • 動かしてみるとこのようになりました。見た目通り動くのはわかりやすくてよいですね。
    f:id:camelrush:20200417014149g:plain

所感

まだまだ遊ぶ余地はありそうですが、今日はここまでにしておきます。最後のプログラムも直接USBからデータ転送してたようだし、Wifiにつないだ理由がよくわからなくなってしまったな…。

AWSIoTとMQTTで出先から操作できるリモートカメラを作る

AWSIoTとMQTT

AWSのサービスである「IoT Core」を使用すると、MQTTプロトコルを使用して遠隔からエッジデバイスを操作することができます。MQTTはIBMが開発した非同期の通信プロトコルであり、同期コミュニケーションを前提としたHTTPなどに比べ、センサーデータ収集などを目的としたIoTに適していることや、ヘッダー情報が軽量(2bytes)であることから、IoTに都合のよいプロトコルとして注目されています。詳細は以下のページを参照ください。
www.ibm.com

今回のお題

本来、センサデータの収集で活用するMQTTですが、今回はあえて同期メッセージとして、次のことに使用したいと思います。

  • 出先から、家のカメラに対してストリーミング開始を指示
  • 家のカメラからストリーミング映像を配信し、出先のブラウザで確認
  • 出先から、カメラ台のモーターを操作して、上下左右に画角を動かす

配置図

mqttCamera配置図
mqttCamera配置図

必要なハードウェア

  • RaspberryPiを使用します。今回はRaspberryPi3 ModelB+を使用していますが Zeroでも可能です。
  • カメラの種類はUSB接続できるものであれば特に問いません。今回は以下のカメラを使用しました。
  • カメラ台の操作には、以下のサーボモータを使用したカメラパンを使用しました。

環境構築(AWS IoTCore)

AWSのIoTCoreサービスにMQTTメッセージブローカーを作成し、通信のための証明書等を取得します。

  • AWSコンソールにログインし、サービスからIoTCoreを選択します。
  • AWS IoT Coreにブローカー設定します。最初にモノの登録を行います。
  • 以下の記事を参考に、モノの登録を行っていきます。
  • qiita.com
  • 登録に併せて、RootCA証明書、1-Click証明書と秘密鍵のダウンロードを行い、ポリシーのアタッチまで進めてください。

環境構築(Raspberry Pi

Raspberry Piは、実行環境となるPythonのセットアップとして以下3つのライブラリのセットアップを行います。

  • MQTT送受信を行うためのPahoライブラリ
  • GPIOを操作するためのpigpioライブラリ
  • 画像を撮影するためのopencvライブラリ

Paho セットアップ

以下のコマンドを実行して、Paho-mqttをインストールします。

$ sudo pip3 install paho-mqtt

pigpio セットアップ

pigpioのセットアップについては、以前書いた以下の記事を参考にしてください。

camelrush.hatenablog.com

opencv セットアップ

opencvのセットアップは少し手間がかかります。

  • 最初に関連するライブラリをインストールします。
$ sudo apt-get install libhdf5-dev libhdf5-serial-dev libhdf5-103
$ sudo apt-get install libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5
$ sudo apt-get install libatlas-base-dev
$ sudo apt-get install libjasper-dev
$ sudo nano /home/pi/.bashrc
  • ↓ (この一文を最終行に追記)
export LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libatomic.so.1
  • 次の一文をターミナルで実行して、編集した .bashrc を適用します。
$ source /home/pi/.bashrc
  • 最後に、以下のコマンドでopencvをインストールします。
$ sudo pip3 install opencv-python

ソースダウンロードと編集

以下のGithubに掲載しているソースを任意の場所にダウンロードしてzipを解凍してください。 github.com
ダウンロードした内容に対して、以下の変更を行います。

  • 「/awscert」フォルダに前述でAWSからダウンロードしたRootCA証明書、1-Click証明書と秘密鍵を格納します。
  • 「/mqttCamera.py」をテキストエディタで開きます。
    • 上部「# Mqtt Define」にある、「MQTT_CERT」「MQTT_PRIKEY」を格納した証明書・秘密鍵の名前に変更します。
    • 「AWSIoT_ENDPOINT」に、AWSのIoTCoreエントリポイントを設定します。IoTCoreエントリポイントは、AWSコンソールで IoTCoreサービスの「設定」メニューから確認できます。
  • 「/awss3page/static/js/control_view.js」をテキストエディタで開きこちらにも、IoTエントリポイントを設定します。
var requestUrl = SigV4Utils.getSignedUrl('xxxxxxxxxxxxx-xxx.iot.ap-northeast-1.amazonaws.com', 'ap-northeast-1', credentials);

この状態で以下のコマンドを実行してください。

$ sudo python3 mqttCamera.py

画面に「mqtt connected.」と表示されれば、ソフトウェアの準備は完了です。

配線

以下の図を参考に、配線を行ってください。サーボモータはDCモータに比べて配線数が少ないので、比較的簡単だと思います。

環境構築(AWS S3)

AWSのS3に、操作用画面であるWebページ(HTML、JavaScriptCSS等)を配置します。

  • AWSでS3サービスを選択し、新規にバケットを作成します。
  • バケットのアクセス権設定で「パブリックアクセスをすべてブロック」をOFFに設定します。
  • バケット直下に、前述の解凍フォルダにある「/awss3page」の中身をすべてアップロードしてください。
  • S3のアクセスポイントから、「control_view.html」にアクセスしてWebページが表示されればOKです。

環境構築(AWS IAM)

最後にS3のページからMQTTを操作するためのユーザを作成します。

  • AWSでIAMサービスを選択し、ユーザから新規ユーザを作成します。
  • 「アクセス許可の付与」画面で「既存のポリシーを直接アタッチ」を選択します。
  • ポリシーの一覧から、「AWSIoTDataAccess」を選択して「次へ」をクリックします。
  • 「アクセスキー」と「シークレットキー」の値を取得して控えておきます。

以上で準備完了です。

S3にアップロードしたWeb画面上部「AKey」にIAMのアクセスキー、「SKey」にIAMのシークレットキー値を入力して、「Connect」ボタンををクリックし、画面上部の「ON/OFF」を「ON」にして、カメラ画像が表示されればOKです。画面左右にあるレバーを操作することで、RaspberryPiに接続したカメラ台のサーボモータが動き、画角を変更することができます。

AWSIoTとMQTTでラジコンを屋外からリモート操作

以下の記事で作成したラジコンを、屋外から操作するようにしてみます。 camelrush.hatenablog.com

従来のイメージ

もともと、このラジコンはスマホテザリングを使用したWifi環境で動作するようにしていました。

f:id:camelrush:20200331001438p:plain
従来のイメージ

新しいイメージ

これを屋外から操作できるように構成変更します。

f:id:camelrush:20200330231650p:plain
新しいイメージ

環境

  • MQTTブローカーには、AWS IoT Coreを使用します。
  • Publisher、Subscriberとも、Pahoライブラリを使用します。
  • PublisherはS3上に配置した静的サイトで作成し、そこからPaho on JavaScriptで送信します。
  • SubscriberはRaspberryPi上のPythonで行います。こちらもPaho on Pythonです。

使用ソース

github.com

AWS IoT Core 環境設定

  • AWS IoT Coreにブローカー設定します。最初にモノ※の登録を行います。
  • ※モノ=Thingsの直訳で、操作対象のデバイス自体を指しているようなのだけど、もうちょっとよい訳はなかったのかなぁ…。
  • 以下の記事を参考に、モノの登録を行っていきます。
  • qiita.com
  • 登録に併せて、RootCA証明書、1-Click証明書と秘密鍵のダウンロードを行い、ポリシーのアタッチまで進めてください。

IAMユーザの作成

以下のページを参考に、IAMユーザを追加します。
my-scribble.net

Subscriber(Python on RaspberryPi)の作成

RaspberryPi上に、Subscriber環境を構築します。

  • 最初に、Python環境に対して、Pahoライブラリのインストールを行います。
$ pip install paho-mqtt
  • プログラムは前述のGitのファイルをCloneして配置します。
  • Clone内容のうち「awcert」フォルダの内容を削除し、前述のIoT Core環境構築でダウンロードしたRootCA証明書、1-Click証明書と秘密鍵に差し替えます。
  • ソース「miniRc.py」上部にある、「# MQTT定義」部分を、作成したIoTCore環境の内容に書き換えます。
# MQTT定義
AWSIoT_ENDPOINT = "xxxxxxxxxxxx-xxx.iot.ap-northeast-1.amazonaws.com" # IoTCoreエンドポイント※
MQTT_PORT = 8883
MQTT_TOPIC_TO = "miniRcTo"
MQTT_TOPIC_FROM = "miniRcFrom"
MQTT_ROOTCA = "./awscert/xxxxxxxxxCA1.pem" # RootCA証明書ファイル名
MQTT_CERT = "./awscert/xxxxxxxxxxxxx-certificate.pem.crt" #1-Click証明書ファイル名
MQTT_PRIKEY = "./awscert/xxxxxxxxxxxxx-private.pem.key" #1-Click証明書の秘密鍵ファイル名

※IoTCoreエンドポイントは、AWSコンソールの「IoTCore」サービスから「設定」を選択することで確認できます。

  • サービスは以下のコマンドで開始します。
$ python3 miniRc.py
  • 起動後「connected.」と表示されればOKです。

Publisher(JavaScript on S3 WebSite)の作成

S3上に、PublisherとなるWebサイトを配置します。

  • 任意のバケットを作成し、公開用フォルダを作成します。
  • 前述のGitにある、「awss3page」フォルダの内容をアップロードします。
  • アップロード時のオプション画面で、「パブリックアクセス許可を管理する」に「このオブジェクトにパブリック読み取りアクセス権限を付与する」を指定します。
  • アップロードしたファイルのうち、「control_view.html」にブラウザから直接アクセスします。
  • コントローラ画面が表示されたらOKです。
    f:id:camelrush:20200330235901p:plain
    操作画面

    ※中央にある「AccessDenined」は気にしないでください。後でカメラ動画を表示することを画策しています。

動作確認

以上で、環境作成は終了です。表示されたWebページでコントローラを操作してみてください。(あ、書き忘れましたが、画面はスマートフォンのタッチイベントしか対応していません。マウスでは動かないはずです)うまくいかない場合は、以下のいずれかを確認してください。

  • WebPageで開発者ツールを表示して「Connected.」メッセージが表示されているか。
  • IoTCoreの「テスト」画面で、「トピックのサブスクリプション」にトピック「miniRcTo」を設定し、操作した分のメッセージが表示されるか。
  • SubscriberであるPythonの実行画面に、操作した分のメッセージが表示されるか。

まとめ

これで屋外から操作することができるようになりました。ただ、この実装っておそらくセキュリティに大きな問題があると思っています。

  • S3の操作ページがパブリックアクセスとなっていること
  • JavaScriptにシークレットアクセスキーがガッツリ組み込まれているので、ハックで課金させ放題

このあたり、よくアンチパターンとして紹介されている「アクセスキーを直接コードに埋め込まないでください。 」というやつなんでしょうね。
https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws-access-keys-best-practices.html
でも、公開Webから直接MQTT送信するにはこうならざるを得ないのではないかなぁ…。サーバサイドに送ってLambda介してとかやると、せっかくのMQTTの速度が遅くなるような気がするし…。アドバイスあれば、教えてください。

今後

次回は送受信を逆にし、RaspberryPiで撮影した画像をMJpeg方式でWebページの方にMQTT送信して、撮影画像のリアルタイムストリーミングに挑戦しようと思います!

OpenCvを使用した顔画像認識とストリーミングWeb配信(Django)

カメラ(WindowsノートPCのカメラ)でリアルタイム動画を撮影しつつ、Djangoフレームワークでストリーム配信を行ってみました。

目的

別途行っているミニ四駆ラジコン化計画に向け、車載カメラによる撮影と、画像認識技術を使用したカメラ向きの自動補正(顔認識枠が常にカメラ中心点に収まるよう、カメラ制御サーボを動かす)が行えるようにすること(↓こんなふうにしたい) f:id:camelrush:20200329010539p:plain

結果

f:id:camelrush:20200329010552g:plain
顔画像認識(嵐さん)
何人でも認識できるみたいですね。

おおよその作り

  • Python DjangoフレームワークでWebサーバを起動
  • 土台となる index.html を配信し、その中にIFRAMEタグでキャプチャ動画を表示する領域を配置。
  • キャプチャ領域にDjangoテンプレート変数を設定して別途サーバリクエストを行わせ、ルーティング参照先(Views.Capture())でStreamingHttpResponse()を使用して、動画を配信。
  • 動画といっても、実態はカメラから取得した1フレームずつの静止画を、パラパラ漫画の要領で無限ループしつつ送信している(よって、音声は配信できていない)

ソースファイル

github.com

所要

  • 1日程度

苦労話

  • ググると、以下の情報は個々に散見されたが、合わさったものが見つからなかった。

残課題

  • カスケード分類器についてはおおよその理解。3,000枚ほどの静止画があれば、個別の分類器も簡単に作れそうですね(今回はやるつもりはないが)
  • 今回の方法ではT/F(人か、人以外か)の認識しか必要としないが、AI画像認識で行われる各個要素の認識をどうやるのか知りたい(たとえば、商品展にカメラを向けるとリンゴとバナナとパイナップルを別々に識別するとか。まさか、それぞれの分類器分、メソッドを繰り返すのか?)
  • PythonにおけるYeildの処理内容と、DjangoのStreamingHttpResponse()の実行内容について、よくわかっていない。

RaspberryPi Windows 10 IoT で何できる?

なんで?

Linux(Raspbian)の操作はだいぶ慣れてきましたが、あくまで趣味の域を出ないので、比較対象としてWindows 10 IoTを知っておいた方がビジネスサイドの会話がしやすかろうと思いました。

まずは入れてみる

あまり下調べせずに、所感だけ見てみたいと思いインストールを先行します。
今回はRaspberryPi 3 Model B+ を使用します。

以下のページを参考にさせていただきました。
qiita.com

RaspberryPiはストレージがMircoSDカードなので、複数枚持っていれば差し替えるだけでそれぞれの環境を残せます。16GBのカードが余っていたので、今のLinux(Raspbian)環境はよけておいて、別に1枚使うことにします。

Windows 10 IoT Setup画面
Windows 10 IoT Setup画面
f:id:camelrush:20200327105417p:plain
Windows 10 IoT Setup画面 2

SDカードへのインストール後、RaspberryPiに差し込んで電源ON(ケーブルを差し込む)して起動します。
起動までしばらく時間がかかっていたので、その間に少し下調べ。

閑話休題。スペックや市場動向など、下調べ

Wikipediaから抜粋。比較的低いスペックでも動作可能なようですね。
- プロセッサ 400 MHz 以上の x86/x64 プロセッサまたは ARM SoC
- 物理メモリ ディスプレイなしは 256 MB 以上 / ディスプレイありは 512 MB 以上
- ストレージ 2 GB 以上 ja.wikipedia.org

Windows 10 IoT のシェアや市場動向

あまり専門的な調べ方はできていないが、比較的広範囲で活用されているようですね。
ascii.jp

インストールが終わると

結構時間がかかりましたが、以下のような画面が表示されました。
f:id:camelrush:20200328175855p:plain

ただ、なんだかRaspbianよりももっさりしているような…。
今日はここまで。今度はLチカから始めようと思います。
では~。

RaspberryPi ミニ四駆ラジコン化計画

Raspberry Pi Zero WHを介してミニ四駆をラジコン化する手順をご紹介します。

用意するもの

  • ソフトウェア
  • ソースコード github.com

  • ハードウェア

    • Raspberry Pi Zero WH
    • タミヤ「バギー工作基本セット」
    • ミニブレッドボード
    • TA7291P(モータードライバ)
    • NJM7805FA(三端子5V1Aレギュレータ)
    • SG92(ステアリング制御サーボモータ
    • モバイルバッテリー(Raspberry Piの電源として使用)
    • 9V型乾電池×1本(各モータ駆動で使用)

ミニ四駆改造

f:id:camelrush:20200321074602j:plain
f:id:camelrush:20200323224443j:plain
各パーツはマニュアル通り組み立てますが、電源となっている電池ボックスは取り外します。モーター上部についている鉄のフレームも一度取り外しておきおきます。背面にはモバイルバッテリを(強力な)両面テープで張り付け、USBケーブルでRaspberryPiに給電します。

ステアリング部分について

ステアリング部分には、サーボモータを寝せて瞬間接着剤でくっつけます。両タイヤのアームに曲げた針金を図のように半田付けしてレールを作り、サーボホーンにねじを通して左右に駆動するようにします。ねじの径は1.2Φを使用しました。近くのホームセンターなどで売っていますので探してみてください。 f:id:camelrush:20200323224741j:plain

配線

f:id:camelrush:20200323214650p:plain 電源はRaspberryPiではなく、9V電池から取ることにしています(最初モバイルバッテリーから分配してみたのですが、モーターを動かした瞬間にRaspberryPiが低電圧に陥り再起動してしまいました)
なお、9V電池だとサーボモータの適応電圧5Vを超えるため、三端子レギュレータで5Vにおとして使用しています。

RaspberryPiの準備

最初にRaspberryPiにOSをセットアップします。私は「Raspbian Buster with desktop」を使用しましたが、一つ前のバージョンでも問題ないはずです。ファイルは以下のサイトからダウンロードが可能です。 www.raspberrypi.org

WifiSSH を 有効にする

起動操作はスマートフォンテザリングを使用したWifiで無線接続し、SSHによるコマンドで操作します。ネットワークを有効化した後、以下のコマンドで設定画面を表示してSSHを有効化します。以降はTeratermなどを使用し、SSHで外部から実行します。

$ sudo raspi-config 

pipコマンドでDjangoをインストールする

操作画面はWebアプリケーションでデザインしており、これをスマートフォンのブラウザ画面から操作します。
f:id:camelrush:20200323225540g:plain
以下のコマンドで、WebフレームワークであるDjangoをインストールします。

$ sudo pip3 install django

pipコマンドでpigpioをインストールする

pigpioはpythonでRaspberryPiのGPIOを操作するライブラリです。GPIO操作はほかにもいくつかあるようですが、デジタル出力ピンからソフトウェアPWM波形を一番きれいに出せるものとのことなので、これを使用しました。

$ sudo pip3 install pigpio 

pigpioサービスを起動時に有効化する

pigpioを使用するにはサービスとして有効化する必要があります。起動時に常に有効となるように設定します。テキストエディタ(私はnanoを使用しました)で、登録サービスファイルを作成します。

$ sudo nano /etc/systemd/system/pigpiod.service

ファイルの内容は以下の通りです。

[Unit]
Description = pigpio daemon
 
[Service]
ExecStart = /usr/bin/pigpiod
Restart = always
Type = forking
 
[Install]
WantedBy = multi-user.target

再起動すると自動的に起動しますが、今から有効化するには次のコマンドを実行します。

$ systemctl daemon-reload

Githubからソースコードをダウンロードする

前述のgithubからソースコードをダウンロードします。マニュアルドキュメントに動画gifまで入れてしまっているため少し遅いです…。

$ git clone https://gituhub.com/camelrush/miniRc

なお、ダウンロードしたファイルの中で次の箇所をRaspberryPiのIPアドレスに修正してください(localhostに送信したいのですが、Post実行時にエラーが表示されてしまうため、固定IPで指定するしかありませんでした。回避方法求む) \miniRc\miniRcApp\static\js\control_view.js

var API_POST_URL = "http://192.168.43.247:3000/ctrlapi/"; // ← IPをRaspberryPiのアドレスに修正

※現時点のバージョンではPythonの次の箇所も、下の行をコメントアウト(#)し、上の行を有効化してください。 \miniRc\miniRcApp\views.py

def capture(request):
    return render(request, 'test.html')
    #return StreamingHttpResponse(_gen(cam()),content_type='multipart/x-mixed-replace; boundary=frame')

Webサービスの起動

SSHでRaspberryPiにログインし、Djangoサービスを起動させます。

$ sudo Python3 manage.py runserver 0.0.0.0:3000

起動できたら、スマートフォンのブラウザから、次のアドレスにアクセスします。

https://[IPアドレス]:3000/cv/

以上でブラウザにコントロール画面が表示されます。画面下部にある「ステアリング」「スピード」のレバーを操作して、それぞれ前輪、後輪が動作することを確認してください。