TTGO T-Cameraの画像をngrok経由で取得

NAT配下のWebサーバ等をインターネットからアクセスできるようにトンネリングをするngrokというサービスがあります。

これを使って、3Dプリンタの監視画像をインターネットから取得できないか試してみました。

テスト環境は以下のとおりです。

   |
 WiFi Router
   | 192.168.10.1
   |
   +---- TTGO T-Camera
   |       192.168.10.2
   |          80/TCP Web, 81/TCP Streaming
   |
   +---- Raspberry Pi(Raspbian Lite)
           192.168.10.3

まず、ngrok公式サイトからサインアップをします。サインアップすると、「Setup & Installation」という画面に移行しますので、これに沿って操作していきます。

まず、ngrokのダウンロードですが、Linux(ARM)のURLをコピーして、wgetでzipファイルを取得します。(下記はURLを書き換えてありますので、必ずURLをコピーしてください)

~$ wget https://bin.equinox.io/c/xxxxxxxxxx/ngrok-stable-linux-arm.zip

ダウンロードしたら、②、③に沿って展開とトークンの取得を行います。トークンの取得は③のところのコマンドラインをコピー&ペーストして実行するだけです。

~ $ unzip ngrok-stable-linux-arm.zip 
Archive: ngrok-stable-linux-arm.zip
inflating: ngrok 
~ $ ./ngrok authtoken xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Authtoken saved to configuration file: /home/pi/.ngrok2/ngrok.yml

トークンを取得したら、 ~/.ngrok2/ngrok.yml にある設定ファイルを作成します。

authtoken: xxxxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxxxxx
tunnels:
  ttgo:
    addr: 192.168.10.2:80
    proto: http
    auth: "user:password"
    bind_tls: true

1行目の内容はトークン取得で作成されている内容です。2行目以降が追加した内容になります。

tunnels:
  ttgo:        <-------- トンネルにつけた名前です
    addr: 192.168.10.2:80    <---- アクセスされた際の転送先です
    proto: http              <---- httpプロトコルを指定します
    auth: "user:password"    <---- アクセスの際の認証を追加します
    bind_tls: true           <---- TLSで暗号化を強制します

作成したら、

~ $ ./ngrok start --all

で起動します。(終了すると tunnel も消滅するので screen と併用するとよいかと思います)

ngrok by @inconshreveable                                           (Ctrl+C to quit)
                                                                                    
Session Status                online                                                
Account                       XXXXXXXXXXXXXXXXX (Plan: Free)                       
Version                       2.3.27                                                
Region                        United States (us)                                    
Web Interface                 http://127.0.0.1:4040                                 
Forwarding                    https://b3d16323.ngrok.io -> http://192.168.10.2:80   
                                                                                    
Connections                   ttl     opn     rt1     rt5     p50     p90           
                              0       0       0.00    0.00    0.00    0.00

という感じで状態が表示されます。この状態でインターネット側から https://b3d16323.ngrok.io にアクセスするとBASIC認証が求められ、設定したユーザー名とパスワードを入力すると、TTGO T-Cameraへアクセスすることができました。アクセスすると上記の状態の下にHTTPリクエストの状態がリストで表示されます。なお、b3d16323の部分は起動する度にランダムに変わります。有料プランにするとこの部分を固定にすることができるようです。

実際にGet Stillをクリックすると、

という感じで実際に画像を取得できました。なお、ストリーミングについては異なるポート(81/TCP)でのアクセスが必要なのですが、ngrokのコンフィグファイルでは複数のポートの設定も記述できるものの、ポートごとに異なるURLが割り付けられます。このため、うまくいきませんでした。有料プランにするとURLを指定できるので、うまく行く方法があるのかもしれません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)