スマートフォンでRaspberry Piカメラを操作するには

Raspberry Piカメラが なかまになりたそうに こちらをみている。
(見ているのではなく、目の前の怪しい人を写してるだけ)

カメラモジュールを接続したRaspbbery Pi(以下、Piカメラと呼称致します)を、スマートフォンで操作したいと思います。

スマートフォンでカメラの映像を確認しながら、写真の撮影・動画の録画・タイムラプスの撮影が可能です。

いつでもどこでも、Wi-Fiアクセスポイントが無い屋外でも、スマートフォンで操作できるように、Raspberry PiをWi-Fiアクセスポイント(親機)として設定するところがポイントです。

Raspberry Piの機種はWi-Fi内蔵のRaspberry Pi 3を使用します。RaspbianはStretch版の設定方法になります。


スマートフォンで操作できるようにRaspberry Piを設定

RPi-Cam-Web-Interfaceのインストール

Raspberry PiへRPi-Cam-Web-Interfaceをインストールすることで、Webブラウザによるカメラの操作が可能になります。

  1. こちらの記事を参考に、RaspbianとRPi-Cam-Web-Interfaceをインストールします。

ご自宅など、Wi-Fiアクセスポイント(親機)がある場所で、スマトフォンから操作したい場合は、以上で設定完了です。

ここから先は、アクセスポイントが無い場所でも操作できるように、Raspberry PiをWi-Fi親機にする設定になります。


Wi-Fiに固定IPアドレスを設定

次に、Wi-Fiの子機設定を停止して、固定IPアドレスを割り当てます。

  1. /etc/wpa_supplicant/wpa_supplicant.confを編集します。networkの設定があれば、ssid, psk, key_mgmtの各行に#をつけて無効化します。
    sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

  2. PiカメラをWi-Fi親機にする場合のIPアドレスを決めます。プライベートIPアドレスを利用します。例として、次の内容で設定します。
    • PiカメラのIPアドレス:172.20.0.1
    • サブネットマスク:24ビット(255.255.255.0)
  3. /etc/dhcpcd.confを編集します。
    sudo nano /etc/dhcpcd.conf

    次の1行を追加します。

    denyinterfaces wlan0

  4. /etc/network/interfaces.d/iface-wlan0ファイルを作成します。
    sudo nano /etc/network/interfaces.d/iface-wlan0
    allow-hotplug wlan0
    iface wlan0 inet static
        address 172.20.0.1
        netmask 255.255.255.0
        network 172.20.0.0
        broadcast 172.20.0.255
    #    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

※17.12.30変更:Raspberry PiをWi-Fiアクセスポイントにするこちらの記事を参考に、固定IPアドレスの設定方法を変更しました。こちらのほうがhostapdの動作が安定するようです。

hostapdとisc-dhcp-serverインストール

Wi-Fiアクセスポイント化にhostapd、スマートフォンへのIPアドレス配布にisc-dhcp-serverを使用します。

  1. apt-getでインストールします。
    sudo apt-get install hostapd isc-dhcp-server

hostapdの設定

こちらの記事を参考に設定しました。

  1. /etc/hostapd/hostapd.confを作成します。
    ssid, channel, wpa_passphraseを決めて入力します。

    sudo nano /etc/hostapd/hostapd.conf
    interface=wlan0
    driver=nl80211
    ssid=<piカメラを親機にする場合のssidを入力します>
    hw_mode=g
    channel=7
    wmm_enabled=0
    macaddr_acl=0
    auth_algs=1
    ignore_broadcast_ssid=0
    wpa=2
    wpa_passphrase=<パスフレーズを入力します>

  2. /etc/default/hostapdを編集します。DAEMON_CONFを設定します。
    sudo nano /etc/default/hostapd
    DAEMON_CONF="/etc/hostapd/hostapd.conf"

isc-dhcp-serverの設定

  1. /etc/dhcp/dhcpd.confを編集します。domain-name,rangeは適宜変更して下さい。サブネットマスクが24ビットの場合、subnetはIPアドレスの4オクテット目を0にしたもの、IPbroadcast-addressは255にしたものになります。
    sudo nano /etc/dhcp/dhcpd.conf
    authoritative;
    option domain-name "pi3cam.local";
    option domain-name-servers 8.8.8.8, 8.8.4.4;
    
    default-lease-time 600;
    max-lease-time 7200;
    
    subnet 172.20.0.0 netmask 255.255.255.0 {
      range 172.20.0.128 172.20.0.191;
      option routers 172.20.0.1;
      option broadcast-address 172.20.0.255;
    }

  2. /etc/default/isc-dhcp-serverを編集します。INTERFACESv4を設定します。
    sudo nano /etc/default/isc-dhcp-server
    INTERFACESv4="wlan0"

isc-dhcp-serverの起動に失敗する対策

※17.12.30追記:wlan0の固定IPアドレス設定の方法を変えたため、以下の11~15番の設定は不要です。動作が不安定な場合の参考情報となります。


これで再起動すれば完成!・・・と思ったら、isc-dhcp-serverがうまく起動しません。

原因は、固定IPアドレスの割当を行うdhcpcdよりも先にisc-dhcp-serverが起動してしまい失敗しているようです。

systemdで依存関係を設定すれば良さそうですが、isc-dhcp-serverはinit.dで起動するために、依存関係を設定するのに手間がかかるようですが・・・・

こちらの記事を参考に、isc-dhcp-serverの起動に失敗した場合、自動再起動するようにsystemdの設定を行いました。

  1. Raspberry Piを再起動すると・・・isc-dhcp-serverの起動に失敗しているようです。再起動後、手動で起動するかどうか確認します。
    sudo systemctl restart isc-dhcp-server
  2. isc-dhcp-serverのsystemd設定ファイルを作成します。
    sudo cp /run/systemd/generator.late/isc-dhcp-server.service /etc/systemd/system/
  3. /etc/systemd/system/isc-dhcp-server.serviceファイルを編集します。[Service][Install]セクションに次の内容を追加・変更します。
    sudo nano /etc/systemd/system/isc-dhcp-server.service
    [Service]
    Restart=on-failure
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target

  4. systemdの設定を反映し、isc-dhcp-serverのサービスを再登録します。
    sudo systemctl daemon-reload
    sudo systemctl enable isc-dhcp-server.service

  5. 再起動後、isc-dhcp-serverがちゃんと起動している事を確認します。

動作確認

Piカメラを起動するとWi-Fiアクセスポイントとして動作します。

スマートフォンでPiカメラのSSIDに接続します。

スマートフォンにisc-dhcp-serverで設定したIPアドレスが割当られます。

WebブラウザからPiカメラにアクセスできます。IPアドレスを入力するか、Windows10やiPhoneの場合はホスト名.localでアクセスできるようです。


Wi-Fiを内蔵したRaspberry Pi 3の登場で、スマートフォンとRaspberry Pi 3を直接接続していろいろと操作できる時代になりました。

Raspberry Piとスマートフォンは、ともに電源ケーブルさえあれば動かし続けられます・・・複雑な配線から開放され、極めてシンプルになった印象です。

カメラ以外のデバイスをRaspberry Piに搭載して、スマートフォンで操作する場合にも、上記の設定は応用できそうです。

早速接続して、いろいろと遊んでみましょう!

スポンサーリンク

フォローする

スポンサーリンク

コメント

  1. koji より:

    初めまして、Kojiと申します。ブログを拝見させて頂きました。
    私も屋外(Wi-FiやLANが無い環境)でラズベリーパイにてカメラを遠隔で撮影可能にすることを目標としておりますが、記載されている方法にて試してみましたがどうしても上手くいきません。

    具体的には、スマートフォンにて設定したアクセスポイント名は出てくるのですが、Wi-Fi接続をしようとしても”インターネットアクセス無し”の文字が出ることや、isc-dhcp-serverを起動しようとしても”Failed to start LSB:DHCP server”の文字が出てきて起動に失敗しているようです。

    差支えなければ解決方法をご教示頂けませんでしょうか。
    尚、使用しているラズベリーパイはZeroW、Raspberry Pi stretchになります。
    どうぞ宜しくお願い申し上げます。

    • hide より:

      kojiさん はじめまして

      コメント頂きまして誠にありがとうございます。

      お困りの現象を2点、拝見致しました。

      1つ目:isc-dhcp-serverが起動しない

      こちらの海外の記事を拝見したところ、dhcpd.confの記述が食い違っていて、起動に失敗(Failed to start LSB:DHCP server)する事例もあるようです。
      https://unix.stackexchange.com/questions/173875/why-cant-i-start-isc-dhcp-server-upon-installation

      下記の無線LANの設定が
      /etc/network/interfaces.d/iface-wlan0

      allow-hotplug wlan0
      iface wlan0 inet static
      address 172.20.0.1
      netmask 255.255.255.0
      network 172.20.0.0
      broadcast 172.20.0.255

      isc-dhcp-serverの設定と合っている
      /etc/dhcp/dhcpd.conf

      subnet 172.20.0.0 netmask 255.255.255.0 {
      range 172.20.0.128 172.20.0.191;
      option routers 172.20.0.1;
      option broadcast-address 172.20.0.255;
      }

      このあたりがポイントのようです。
      上記の場合、subnetの値や、netmaskの255.255.255.0が合致しないと
      起動に失敗するそうです。

      /etc/default/isc-dhcp-serverの記述
      INTERFACES=”wlan0″
      ↑無線LANを指定

      このあたりをご確認頂くのはいかがでしょうか?

      もしも、これらの設定が、記事通りの上記の内容の場合

      記事の作成は2018年3月、現在は2019年6月で、1年3ヶ月経ちました。
      もしかすると、年月の経過により、Raspberry Pi stretchのバージョンが変わり、なにか必要な設定が変わった可能性が御座います。

      上記の海外の記事に、別の書き方の/etc/dhcp/dhcpd.confサンプルがありましたので
      そちらの書き方をお試し頂くのも宜しいかもしれません。

      海外サイトから抜粋:
      subnet 10.10.1.0 netmask 255.255.255.0 {
      option subnet-mask 255.255.255.0;
      option broadcast-address 10.10.1.255;
      option routers 10.10.1.1;
      pool {
      range 10.10.1.21 10.10.1.254;
      }
      }

      2つ目:インターネットアクセス無し

      スマートフォンから無線LANでRaspberry Piに接続した場合、確かにRaspberry Pi(カメラ機能)にアクセスできますが、その間、インターネットの接続はできなくなります。
      このため「インターネットアクセス無し」と表示されますが、動作としては正しくなります。

      最初に、1つ目の現象「Failed to start LSB:DHCP server」をご解決頂いたほうが宜しいかと思います。

      解決につながる情報かどうかわかりませんが、宜しければご確認頂けますと幸いです。