2016年7月4日月曜日

Raspberry Pi Zero So-net 0SIM L-02A mjpeg-streamer

So-net 0SIMでwebcamseverを構築した記録
目的:我が家のインターネット環境では停電時等一時的な回線断時に外部からアクセスできない状態が発生するかもしれない。旅行等で不在にしているときにこれが起こったら、とっても不安。しかし、そんな時でもアクセスできるよう、通常回線とは独立した、携帯電話回線を使った環境も極力安価に構築してみる。

2016-7-2とりあえずの raspi_zero_L-02A_C270webcamサーバ 完成状態

【部品一覧】
raspi zero (pimoroniからpaypal支払 送料込み8.83GBP(1300円ほど))
L-02A USB接続型データ通信端末 (yahoo auctionで入手 送料込み600円ほど)
So-net 0SIM (3240円)
usb-hub 4in1 MicroUSB OTGハブアダプター (amazonで送料込み880円)
電源 5V 2A (短時間の停電にも耐えられるモバイル電源に変更予定) 
microSDcard 4GB 
usb wifiドングル
logitec C270 (yahoo auctionで入手 送料込み800円ほど)
HDMI-miniHDMI変換アダプタ (近くの100円ショップ)
usb-keyboard

【手順】
・2016-05-27-raspbian-jessie-lite.zipを展開し、4GB microSDカードにインストール
・HDMIケーブルでraspiとテレビを接続
・usbハブを接続し、以下を端子に接続
 usb-有線lanアダプタ
 usb-キーボード
 usb-wifiドングル
 usb-電源
・wifiを有効化
・キーボード、有線lanアダプタ、HDMIテレビを外す
・wifi経由でssh接続
・L-02Aを接続
設定する
(参考 http://thr3a.hatenablog.com/entry/20150125/1422162859
cdc_acmドライバを読み込まれないようにする
#echo blacklist cdc_acm >/etc/modprobe.d/cdc_acm-blacklist.conf

/etc/udev/rules.d/99-foma_l-02a.rules を設定
# for FOMA L-02A
# USB Storage (Zero Installation)
KERNEL=="sr[0-9]*", ENV{ID_VENDOR_ID}=="1004", ENV{ID_MODEL_ID}=="610c", RUN+="/usr/bin/eject /dev/$kernel"

# USB Modem (ttyUSB)
SUBSYSTEM=="usb", ATTR{idVendor}=="1004", ATTR{idProduct}=="6109", RUN+="/sbin/modprobe usbserial vendor=0x$attr{idVendor} product=0x$attr{idProduct}"</del>

So-net 0SIMを挿入したL-02Aを接続し/dev/ttyUSB0確認

/etc/wvdial.confを設定
[Dialer Defaults]
Init1 = ATZ
Init2 = AT+CGDCONT=1,"IP","so-net.jp"
Dial Attempts = 3
Modem Type = Analog Modem
Dial Command = ATD
Stupid Mode = yes
Baud = 460800
New PPPD = yes
Modem = /dev/ttyUSB0
ISDN = 0
APN = so-net.jp
Phone = *99***1#
Username = nuro
Password = nuro
Carrier Check = no
Auto DNS = 1
Check Def Route = 1

$sudo wvdial   LED緑➔青で接続成功
グローバルIPみたいなaddressが振られる。だが、これは ISP Shared Address 100.64.0.0/10 で、ISP内のプライベートIP。これに外部からアクセスすることはできない。

・C270 接続(ピントずれを改造修正
・mjpeg-streamer設定
(参考 
http://www.hiramine.com/physicalcomputing/raspberrypi/webcamstreaming.html
#apt-get install subversion libjpeg-dev imagemagick
#svn co https://svn.code.sf.net/p/mjpg-streamer/code/mjpg-streamer mjpg-streamer
$cd mjpg-streamer
$make
・cron設定
@reboot /home/pi/mjpg-streamer/mjpg_streamer -b -i "/home/pi/mjpg-streamer/input_uvc.so -f 1 -r 640x480 -d /dev/video0 -y -n " -o "/home/pi/mjpg-streamer/output_http.so -w /home/pi/mjpg-streamer/www -p 80"
 この設定でアクセスすると、mjpeg-streamerがクラッシュ。
  -r 320x240 で安定。電源の問題?
  -y オプションが何故か必要。しかも、画質が悪い。

   piユーザでも起動時wvdialを実行するよう設定

・ngrok設定 ngrok.com
(参考 http://tech.misoca.jp/entry/2015/09/04/151451
(参考 http://qiita.com/masato/items/26efb28c3133d83fbae7
$wget https://dl.ngrok.com/ngrok_2.0.19_linux_arm.zip

これを/home/piに展開し、
$ ./ngrok http 80
(接続画面上でバージョンアップもできるが、ver2.1にすると接続不能となるので、このままが良い)
これも起動時実行するようcron設定

ngrok ページにサインアップしダッシュボードに表示されるtokenで
$ ngrok authtoken ******************************
すると、https://dashboard.ngrok.com/status にURL表示可となる。
なお、2016-7現在 無料ユーザーはsubdomain指定不可だが、ngrok statusページの自身のURLをクリックすると raspi_zero_L-02A_C270webcam サーバに飛ぶ。なので、有料ユーザー(年$60)になってdomainを取得する必要はあまりない。

・4GB-SDcardの使用状況
pi@raspi-zero:~$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root        3856164 1151204   2518640  32% /
devtmpfs          218268       0    218268   0% /dev
tmpfs             222556       0    222556   0% /dev/shm
tmpfs             222556    4532    218024   3% /run
tmpfs               5120       8      5112   1% /run/lock
tmpfs             222556       0    222556   0% /sys/fs/cgroup
/dev/mmcblk0p1     64456   20968     43488  33% /boot

・USBシリアル接続



関連記事