Raspberry Pi에서 SORACOM Air를 쉽게 사용 (FS01BU USB 모뎀을 사용한 자동 연결)

11669 단어 SORACOMIoT

개요



Raspberry Pi로 후지 소프트의 USB 모뎀 FS01BU를 사용해, SORACOM Air의 3G 통신을 할 수 있습니다. 접속 스크립트가 gist로 공개 되고 있으므로, 그것을 이용해 자동 기동하도록 해 상시 운용할 수 있도록 해 봅시다.
수동으로 확인하면서 연결하는 방법은 다음 사이트에서 소개했습니다.
  • 좀 더 쉽게 Raspberry Pi에서 SORACOM Air 사용 (FS01BU USB 모뎀 사용)

  • 절차



    FS01BU를 Raspberry Pi에 연결합니다. Raspberry Pi를 시작하여 터미널에서 작동합니다.
    실행하기 전에 wvdialusb-modeswitch를 설치하십시오.
    $ sudo apt-get update
    $ sudo apt-get install wvdial usb-modeswitch
    
    git clone 명령으로 소스를 라즈파이쪽으로 복사합니다. ./sora 디렉토리를 만들 수 있습니다.
    $ git clone https://gist.github.com/j3tm0t0/65367f971c3d770557f3 sora
    Cloning into 'sora'...
    remote: Counting objects: 8, done.
    remote: Compressing objects: 100% (7/7), done.
    remote: Total 8 (delta 5), reused 0 (delta 0), pack-reused 0
    Unpacking objects: 100% (8/8), done.
    Checking connectivity... done.
    $ ls -d sora
    sora
    

    단독으로 사용할 수 있도록 /opt 에 복사합니다.
    $ sudo cp -R sora /opt/
    $ ls -l /opt/sora
    合計 4
    -rw-r--r-- 1 root root 1369 10月 11 12:39 connect_air.sh
    

    취향에 따라 실행 가능( $ sudo chmod 755 /opt/sora/connect_air.sh )으로 하거나 패스를 통과( $ PATH=$PATH:/opt/sora/ )하면 좋을까 생각합니다.

    수동으로 스크립트를 실행하고 확인해 봅시다.
    $ sudo bash /opt/sora/connect_air.sh
    

    아래의 표시가 되면, 정상적으로 접속할 수 있습니다. Ctrl+C 를 2회 치고 종료해 둡니다.
    Bus 001 Device 007: ID 0bda:8176 Realtek Semiconductor Corp. RTL8188CUS 802.11n WLAN Adapter
    Bus 001 Device 006: ID 046d:c52b Logitech, Inc. Unifying Receiver
    Bus 001 Device 009: ID 1c9e:6801 OMEGA TECHNOLOGY 
    Bus 001 Device 004: ID 1a40:0101 Terminus Technology Inc. 4-Port HUB
    Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
    Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. LAN9500 Ethernet 10/100 Adapter / SMSC9512/9514 Hub
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
    Bus 001 Device 009: ID 1c9e:6801 OMEGA TECHNOLOGY 
    Look for target devices ...
       product ID matched
     Found devices in target mode or class (1)
    Look for default devices ...
       product ID matched
     Found devices in default mode (1)
    Access device 009 on bus 001
    Current configuration number is 1
    Use interface number 0
    Use endpoints 0x01 (out) and 0x81 (in)
    Error: can't use storage command in MessageContent with interface 0;
           interface class is 255, expected 8. Abort
    
    waiting for modem device
    --> WvDial: Internet dialer version 1.61
    --> Initializing modem.
    --> Sending: ATZ
    ATZ
    OK
    --> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
    ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
    OK
    --> Sending: AT+CGDCONT=1,"IP","soracom.io"
    AT+CGDCONT=1,"IP","soracom.io"
    OK
    --> Modem initialized.
    --> Sending: ATD*99***1#
    --> Waiting for carrier.
    ATD*99***1#
    CONNECT 14400000
    --> Carrier detected.  Starting PPP immediately.
    --> Starting pppd at Sun Oct 11 13:00:48 2015
    --> Pid of pppd: 2597
    --> Using interface ppp0
    --> pppd: ?????J?[01]?J?[01]
    --> pppd: ?????J?[01]?J?[01]
    --> pppd: ?????J?[01]?J?[01]
    --> pppd: ?????J?[01]?J?[01]
    --> pppd: ?????J?[01]?J?[01]
    --> pppd: ?????J?[01]?J?[01]
    --> local  IP address 10.214.154.107
    --> pppd: ?????J?[01]?J?[01]
    --> remote IP address 10.64.64.64
    --> pppd: ?????J?[01]?J?[01]
    --> primary   DNS address 169.254.0.53
    --> pppd: ?????J?[01]?J?[01]
    ←[Ctrl+C]で中止
    ^CCaught signal 2:  Attempting to exit gracefully...
    --> Terminating on signal 15
    --> pppd: ?????J?[01]?J?[01]
    --> Connect time 9.9 minutes.
    --> pppd: ?????J?[01]?J?[01]
    --> pppd: ?????J?[01]?J?[01]
    --> pppd: ?????J?[01]?J?[01]
    --> Disconnecting at Sun Oct 11 13:10:46 2015 ←もう一度[Ctrl+C]で終了
    ^C
    $
    
    Ctrl+C 를 한 번 치면 적어도 1분 이내에 Ctrl+C 를 칠 필요가 있습니다. 그렇지 않으면 다시 연결되므로 주의 ^^
    연결이 완료되면 자동 시작 스크립트 /etc/init.d/soracomair를 만듭니다.
    $ sudo vi /etc/init.d/soracomair
    

    /etc/init.d/soracomair
    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides:          soracomair
    # Required-Start:    $remote_fs $syslog 
    # Required-Stop:     $remote_fs $syslog
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description: Example initscript
    # Description:       This file should be used to construct scripts to be
    #                    placed in /etc/init.d.  This example start a
    #                    single forking daemon capable of writing a pid
    #                    file.  To get other behavoirs, implemend
    #                    do_start(), do_stop() or other functions to
    #                    override the defaults in /lib/init/init-d-script.
    ### END INIT INFO
    
    #SORACOM Air接続スクリプトのフルパスを設定
    cmd="/opt/sora/connect_air.sh"
    
    start(){
        #working  /opt/sora/connect_air.sh
        echo -n "connect air...\n"
        #スクリプトの実行
        bash $cmd &
    
        return 0
    }
    stop(){
        echo -n "stopping connect air...\n"
        #スクリプトが実行されているプロセスのPIDを設定
        pid=`ps ax | grep -v grep | grep "$cmd" | awk '{ print $1 }'`
        #スクリプトの停止
        kill $pid
        #ダイヤラーwvdialの停止 pppdも停止する
        killall wvdial
    
        return 0
    }
    
    case $1 in
            start)
                    start
                            ;;
            stop)
                    stop
                            ;;
            *)
                   echo "Usage: $0 {start|stop}"
                   exit 2
                            ;;
    esac
    

    ※ 상기 스크립트는 connect_air.sh를 호출하는 간단한 것입니다. 보다 적절한 스크립트에 댓글을 달 수 있기를 바랍니다.

    시작 스크립트를 만들고 저장한 후 insserv 명령을 사용하여 각 런레벨의 시작 링크를 설정합니다.
    $ sudo chmod 755 /etc/init.d/soracomair
    $ sudo insserv -d /etc/init.d/soracomair
    $ ls -l /etc/rc*.d/*soracomair
    lrwxrwxrwx 1 root root 20 10月 11 13:20 /etc/rc0.d/K01soracomair -> ../init.d/soracomair
    lrwxrwxrwx 1 root root 20 10月 11 13:20 /etc/rc1.d/K01soracomair -> ../init.d/soracomair
    lrwxrwxrwx 1 root root 20 10月 11 13:20 /etc/rc2.d/S02soracomair -> ../init.d/soracomair
    lrwxrwxrwx 1 root root 20 10月 11 13:20 /etc/rc3.d/S02soracomair -> ../init.d/soracomair
    lrwxrwxrwx 1 root root 20 10月 11 13:20 /etc/rc4.d/S02soracomair -> ../init.d/soracomair
    lrwxrwxrwx 1 root root 20 10月 11 13:20 /etc/rc5.d/S02soracomair -> ../init.d/soracomair
    lrwxrwxrwx 1 root root 20 10月 11 13:20 /etc/rc6.d/K01soracomair -> ../init.d/soracomair
    $ 
    

    잘 설정되어 있으면 재부팅합니다.
    $ sudo reboot
    

    재부팅 후 부팅 시 자동 연결되어 있는지 확인해 봅시다.

    연결 확인



    재부팅 후 pi 사용자로 로그인하고 ifconfig 명령으로 확인합니다.
    $ ifconfig ppp0
    ppp0      Link encap:Point-to-Pointプロトコル  
              inetアドレス:10.214.154.107 P-t-P:10.64.64.64  マスク:255.255.255.255
              UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  メトリック:1
              RXパケット:7 エラー:0 損失:0 オーバラン:0 フレーム:0
              TXパケット:8 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:3 
    
    

    그리고 curl이나 ping 등을 치면 좋을 것입니다. 이름 확인도 확인할 수 있습니다.
    $ curl http://www.yahoo.co.jp
    
    $ ping www.yahoo.co.jp
    

    연결되지 않을 때



    수동 연결 확인 시 lsusb의 출력 결과만 표시되어 연결할 수 없는 경우가 있습니다.
    $ bash /opt/sora/connect_air.sh
    …
    Bus 001 Device 005: ID 1c9e:98ff OMEGA TECHNOLOGY 
    …
    $ 
    

    이 때 ID가 1c9e:98ff이므로 연결할 수 없습니다. FS01BU USB 모뎀을 분리했다가 다시 명령을 실행하거나 다시 시작해 보십시오. ID가 1c9e:6801일 때 연결 가능합니다.

    자동 재연결 등



    어떠한 트러블로 접속이 끊어진 경우, 재접속을 할 수 있을지 어떨지가 운용의 열쇠가 됩니다만, gist에 게시된 연결 스크립트 그럼, 접속 후 1분 간격으로 재접속을 실시하게 되어 있습니다. 실제로 SORACOM Air 콘솔에서 휴지/시작을 반복해도 다시 연결되는 것을 확인했습니다.
    여러가지 검토·확인할 필요가 있습니다만, 우선 자동 접속과 자동 재접속을 할 수 있게 되었습니다. 더 좋은 방법 등이 있으면이 게시물에 댓글을 달거나 Qiita에 게시하십시오.

    그럼! SORACOM Air에서 IoT를 즐기십시오

    좋은 웹페이지 즐겨찾기