前からRaspberry PiやArduino等に興味はあったものの自分では試せていなかったのですが、先日 IoT Technology Conference if-up 2017 で 3G SIM の USBドングルをいただいたので、これを機に自分でもRaspberry Piを購入して色々と試してみることにしました。同じカンファレンスで紹介されていてとても良さそうだったIoTエンジニア養成読本も買って、まずはそのハンズオンの内容をベースに動くものを作ってみようと思います。
Raspberry Piのセットアップ
まずは下記URLからRaspbian OSのイメージをダウンロードします。HDMIモニタやUSBキーボードを接続せずにセットアップしたかったので、デフォルトでsshサーバが起動する2016-09-28のイメージを選択しました。これより後のバージョンだとデフォルトではsshサーバは起動しないようです。(結局LANケーブルが見つからずHDMIモニタとUSBキーボードを繋いでセットアップしたので、最新のを選択してもよかったのですが。。)
http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian_lite/images/raspbian_lite-2016-09-28/
ダウンロードしたファイルは解凍してimgファイルを取り出しておきます。
続いてイメージファイルをSDカードに書き込んでいきます。今回は16GBのマイクロSDにアダプタをつけてMacBook ProのSDカードスロットにさします。
diskutilコマンドでストレージを確認します。
pi $ diskutil list /dev/disk0 (internal, physical): #: TYPE NAME SIZE IDENTIFIER 0: GUID_partition_scheme *500.3 GB disk0 1: EFI EFI 209.7 MB disk0s1 2: Apple_CoreStorage Macintosh HD 499.4 GB disk0s2 3: Apple_Boot Recovery HD 650.0 MB disk0s3 /dev/disk1 (internal, virtual): #: TYPE NAME SIZE IDENTIFIER 0: Macintosh HD +499.1 GB disk1 Logical Volume on disk0s2 D522C0D0-F775-4496-8BDA-640948662DCD Unlocked Encrypted /dev/disk2 (internal, physical): #: TYPE NAME SIZE IDENTIFIER 0: FDisk_partition_scheme *15.5 GB disk2 1: Windows_FAT_32 NO NAME 15.5 GB disk2s1
サイズから判断して /dev/disk2 がSDカードなので、ddコマンドでSDカードにOSのイメージを書き込みます。マウントしていると書き込めないので、diskutil unmountDisk コマンドでアンマウントしてから実行します。
pi $ sudo dd if=2016-09-23-raspbian-jessie-lite.img of=/dev/rdisk2 bs=1m Password: dd: /dev/rdisk2: Resource busy pi $ pi $ diskutil unmountDisk /dev/disk2 Unmount of all volumes on disk2 was successful pi $ pi $ sudo dd if=2016-09-23-raspbian-jessie-lite.img of=/dev/rdisk2 bs=1m 1325+0 records in 1325+0 records out 1389363200 bytes transferred in 94.477593 secs (14705743 bytes/sec) pi $
MacBook ProからSDカードを取り出してアダプタを外し、Raspberry PiのSDカードスロットにさします。今回買ったのはRaspberry Pi 3 Model Bです。
HDMIモニタとUSBキーボードを接続して最後に電源ケーブルを接続すると、OSが起動します。
ログインプロンプトが表示されたらデフォルトのログインIDとパスワードでログインし、無線LANへの接続の設定を行います。wpa_passphraseコマンドを利用するのですが、wpa_supplicant.confはrootユーザしか書き込み権限を持っていないので、書籍でも紹介されているようにパイプでつないで tee コマンドをsudoで使って書き込むのが良いのですが、手元のキーボードだとパイプが入力できず、キーボードの設定を変更すれば良いと思うのですが面倒だったので、一時的にroot以外にも書き込み権限を与えてリダイレクトでファイルに追記し、そのあとでまた権限を戻しました。MY_AP_SSID と MY_AP_PASSWORD は接続するAPのSSIDとパスワードに置き換えてください。設定後はOSを再起動します。
$ sudo chmod 606 /etc/wpa_supplicant/wpa_supplicant.conf $ wpa_passphrase MY_AP_SSID MY_AP_PASSWORD >> /etc/wpa_supplicant/wpa_supplicant.conf $ cat /etc/wpa_supplicant/wpa_supplicant.conf $ sudo chmod 600 /etc/wpa_supplicant/wpa_supplicant.conf $ sudo reboot
再起動後にipコマンドで無線LANへ接続できていてIPアドレスが割り当てられていることを確認します。
pi@raspberrypi:~ $ ip a show dev wlan0 3: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether b8:27:eb:e6:89:f8 brd ff:ff:ff:ff:ff:ff inet 192.168.10.10/24 brd 192.168.10.255 scope global wlan0 valid_lft forever preferred_lft forever inet6 2408:212:2862:5c00:b342:9793:7abe:c897/64 scope global noprefixroute dynamic valid_lft 2591786sec preferred_lft 604586sec inet6 fe80::bc23:73fb:4394:7972/64 scope link valid_lft forever preferred_lft forever
同じLAN内のRaspberry Pi端末には raspberrypi.local でアクセスできるので、下記のようにMacBook Proからsshでログインします。
pi $ ssh pi@raspberrypi.local The authenticity of host 'raspberrypi.local (2408:212:2862:5c00:b342:9793:7abe:c897)' can't be established. ECDSA key fingerprint is SHA256:B98CBwQsKcPnKMeIGBNQ065GNnMXZvBm1pKoHc7+0Zw. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'raspberrypi.local,2408:212:2862:5c00:b342:9793:7abe:c897' (ECDSA) to the list of known hosts. pi@raspberrypi.local's password: The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Sat Apr 29 16:26:21 2017
下記コマンドでRaspbianを最新の状態にアップデートします。
% sudo apt-get update % sudo apt-get upgrade % sudo apt-get dist-upgrade
最後にpasswdコマンドでデフォルトのログインパスワードをオリジナルのものに変更して、基本的なセットアップは終了です。
SORACOM Air での接続セットアップ
カンファレンスでいただいた3G Sim の USBドングルを使って、SORACOM Airでネットワーク接続できるようにセットアップします。事前にSORACOM AirのSimを購入して、SORACOMのユーザアカウントの作成とSimの登録を済ませておきます。
いただいたUSBドングルはABIT AK-020です。
3G接続に必要なパッケージをインストールします。
pi@raspberrypi:~ $ sudo apt-get install -y usb-modeswitch wvdial Reading package lists... Done Building dependency tree Reading state information... Done usb-modeswitch is already the newest version. The following extra packages will be installed: libpcap0.8 libuniconf4.6 libwvstreams4.6-base libwvstreams4.6-extras ppp The following NEW packages will be installed: libpcap0.8 libuniconf4.6 libwvstreams4.6-base libwvstreams4.6-extras ppp wvdial 0 upgraded, 6 newly installed, 0 to remove and 0 not upgraded. Need to get 1390 kB of archives. After this operation, 3127 kB of additional disk space will be used. Get:1 http://mirrordirector.raspbian.org/raspbian/ jessie/main libpcap0.8 armhf 1.6.2-2 [121 kB] Get:2 http://mirrordirector.raspbian.org/raspbian/ jessie/main libwvstreams4.6-base armhf 4.6.1-7 [235 kB] Get:3 http://mirrordirector.raspbian.org/raspbian/ jessie/main libwvstreams4.6-extras armhf 4.6.1-7 [448 kB] Get:4 http://mirrordirector.raspbian.org/raspbian/ jessie/main libuniconf4.6 armhf 4.6.1-7 [173 kB] Get:5 http://mirrordirector.raspbian.org/raspbian/ jessie/main ppp armhf 2.4.6-3.1 [306 kB] Get:6 http://mirrordirector.raspbian.org/raspbian/ jessie/main wvdial armhf 1.61-4.1 [107 kB] Fetched 1390 kB in 2s (493 kB/s) Can't set locale; make sure $LC_* and $LANG are correct! perl: warning: Setting locale failed. perl: warning: Please check that your locale settings: LANGUAGE = (unset), LC_ALL = (unset), LC_CTYPE = "UTF-8", LANG = "en_GB.UTF-8" are supported and installed on your system. perl: warning: Falling back to a fallback locale ("en_GB.UTF-8"). locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory Preconfiguring packages ... Selecting previously unselected package libpcap0.8:armhf. (Reading database ... 31414 files and directories currently installed.) Preparing to unpack .../libpcap0.8_1.6.2-2_armhf.deb ... Unpacking libpcap0.8:armhf (1.6.2-2) ... Selecting previously unselected package libwvstreams4.6-base. Preparing to unpack .../libwvstreams4.6-base_4.6.1-7_armhf.deb ... Unpacking libwvstreams4.6-base (4.6.1-7) ... Selecting previously unselected package libwvstreams4.6-extras. Preparing to unpack .../libwvstreams4.6-extras_4.6.1-7_armhf.deb ... Unpacking libwvstreams4.6-extras (4.6.1-7) ... Selecting previously unselected package libuniconf4.6. Preparing to unpack .../libuniconf4.6_4.6.1-7_armhf.deb ... Unpacking libuniconf4.6 (4.6.1-7) ... Selecting previously unselected package ppp. Preparing to unpack .../ppp_2.4.6-3.1_armhf.deb ... Unpacking ppp (2.4.6-3.1) ... Selecting previously unselected package wvdial. Preparing to unpack .../wvdial_1.61-4.1_armhf.deb ... Unpacking wvdial (1.61-4.1) ... Processing triggers for man-db (2.7.0.2-5) ... Processing triggers for systemd (215-17+deb8u6) ... Setting up libpcap0.8:armhf (1.6.2-2) ... Setting up libwvstreams4.6-base (4.6.1-7) ... Setting up libwvstreams4.6-extras (4.6.1-7) ... Setting up libuniconf4.6 (4.6.1-7) ... Setting up ppp (2.4.6-3.1) ... Setting up wvdial (1.61-4.1) ... locale: Cannot set LC_CTYPE to default locale: No such file or directory locale: Cannot set LC_ALL to default locale: No such file or directory Sorry. You can retry the autodetection at any time by running "wvdialconf". (Or you can create /etc/wvdial.conf yourself.) Processing triggers for libc-bin (2.19-18+deb8u7) ... Processing triggers for systemd (215-17+deb8u6) ...
SORACOM Airでネットワーク接続するためのスクリプトをダウンロードして実行権限を付与します。
pi@raspberrypi:~ $ curl -O http://soracom-files.s3.amazonaws.com/connect_air.sh % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 2843 100 2843 0 0 23012 0 --:--:-- --:--:-- --:--:-- 23113 pi@raspberrypi:~ $ pi@raspberrypi:~ $ ls -l total 4 -rw-r--r-- 1 pi pi 2843 Apr 30 04:08 connect_air.sh pi@raspberrypi:~ $ pi@raspberrypi:~ $ chmod +x connect_air.sh pi@raspberrypi:~ $ pi@raspberrypi:~ $ ls -l total 4 -rwxr-xr-x 1 pi pi 2843 Apr 30 04:08 connect_air.sh pi@raspberrypi:~ $ pi@raspberrypi:~ $ sudo mv connect_air.sh /usr/local/sbin/ pi@raspberrypi:~ $ pi@raspberrypi:~ $ ls -l /usr/local/sbin/connect_air.sh -rwxr-xr-x 1 pi pi 2843 Apr 30 04:08 /usr/local/sbin/connect_air.sh
そしてUSBドングルにSimを入れて、Raspberry PiのUSBポートに挿し、スクリプトを実行します。
pi@raspberrypi:~ $ sudo /usr/local/sbin/connect_air.sh Found AK-020 Configuring modem ... done. waiting for modem device..done. Resetting modem ...done could not initialize AK-020 waiting for modem device --> WvDial: Internet dialer version 1.61 --> Cannot get information for serial port. --> 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 21000000 --> Carrier detected. Starting PPP immediately. --> Starting pppd at Sun Apr 30 04:19:32 2017 --> Pid of pppd: 1873 --> Using interface ppp0 --> local IP address 10.247.81.162 --> remote IP address 10.64.64.64 --> primary DNS address 100.127.0.53 --> secondary DNS address 100.127.1.53
SORACOMのユーザーコンソールから確認すると、SessionがOnlineになっていて、接続できていることが確認できます。