製品案内 - PiOnAir : LTE-M for Raspberry Pi
最新のIoT向けLTEサービス (LTE-M: Category M1, NB-IoT)に対応した Raspberry Piの拡張ボードです。日本国内で使えます。2020年10月 販売開始!
(*) 本体価格: 14,800円(税別)。アンテナは別売り(2,980円)です。 また、SIMカードはご自身でご用意ください。 |
特徴
SIMCOM社の最新LTE-MモジュールSIM7000JCを搭載し、SORACOM社やさくらインターネット社などのnanoサイズのSIMカードを用いることで、Raspberry Piをインターネットに接続することができます。 GPIO制御によるハードウェア・リセットや電源のON/OFFが可能なため、長期安定稼働を目指す方にお勧めです。 多くのRaspberry Piケース内に収めることが可能です。 動作確認済みRaspberry Pi: Raspberry Pi 3 (Model B+) Raspberry Pi 4 Raspberry Pi Zero WH SIM7000の詳細はこちら SIM7000 ATコマンド データシート |
組み立て例
I. 使用準備編
1. シリアルの有効化
最初にRaspberry Piに対して下記設定を行い、シリアルコンソールをソフトウェアから操作できるようにします。pi$ sudo raspi-config を実行すると、設定メニューが現れます。「5 Interfacing Options」を選択し、さらに「 P6 Serial 」を選択します。「Would you like a login shell to be accessible over serial?」と問われるのでYesを選択し、Finishします。 その後、再起動します。 pi$ sudo reboot 再起動後 /dev/serial0 のデバイスが作成されます。 確認方法 pi$ ls /dev/serial* /dev/serial0 /dev/serial1 次に、/boot/cmdline.txt から 「console=serial0,115200」 を削除します。 編集後の/boot/cmdline.txtの例 pi$ cat /boot/cmdline.txt console=tty1 root=PARTUUID=a426a53f-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait 再び再起動します。 pi$ sudo reboot |
2. PPPのインストール
下記を実行して、pppconfig をインストールしてください。
pi$ sudo apt-get install pppconfig |
3. PPPの設定
以下では、SORACOM社のKDDI SIM plan-K を使った場合の設定例を示します。 まず、pionair-soracomという接続名でpppconfigを呼び出します。 pi $ sudo pppconfig pionair-soracom 3.1. 最初に、Createを選びます 3.2. DNS設定では、Dynamicとします 3.3. 認証方法は PAPとします。 3.4. ユーザ名とパスワードはsoraとします。 3.5. 速度は115200とします。 3.6. Toneを選びます。 3.7. ダイヤル先の電話番号は *99# を指定します。 3.8. モデムの設定方法は「いいえ」(=自分で設定)を選びます 3.9. /dev/ttyS0 と入力します。ttyS0 は 上記のserial0の実体となります。 3.10. 内容を確認したら「Finished - ファイルを書き出して…」を選びます 3.11. 完了画面です 3.12. Quit してコンソールに戻ります 上記により、 /etc/chatscripts/pionair-soracom /etc/ppp/peers/pionair-soracom の二つのファイルが作られます。 3.13. チャットスクリプトの編集 pi $ sudo nano /etc/chatscripts/pionair-soracomなどの方法で、チャットスクリプトを編集します。 具体的には、# modeminit の部分を、書き換えます。 最終的に以下のようになれば正解です。 # This chatfile was generated by pppconfig 2.3.18. # Please do not delete any of the comments. Pppconfig needs them. # # ispauth PAP # abortstring ABORT BUSY ABORT 'NO CARRIER' ABORT VOICE ABORT 'NO DIALTONE' ABORT 'NO DIAL TONE' ABORT 'NO ANSWER' ABORT DELAYED # modeminit '' ATH OK AT+CFUN=1 OK ATZ OK ATE1 OK AT+CGDCONT=1,"IP","soracom.io" # ispnumber OK-AT-OK "ATDT*99#" # ispconnect CONNECT \d\c # prelogin # ispname # isppassword # postlogin # end of pppconfig stuff (*) /etc/ppp/peers/pionair-soracomについては修正の必要はありません。 以下のようになっていれば大丈夫です。 pi $ sudo cat /etc/ppp/peers/pionair-soracom # This optionfile was generated by pppconfig 2.3.18. # # hide-password noauth connect "/usr/sbin/chat -v -f /etc/chatscripts/pionair-soracom" debug /dev/ttyS0 115200 defaultroute noipdefault user "sora" remotename pionair-soracom ipparam pionair-soracom usepeerdns 以上で、準備完了です。 |
II. インターネット接続編
1. モジュールの電源をONにする
まず、sim7000_onoff.pyというファイルを作ります。$ nano sim7000_onoff.py その中身は、以下のようにします。 import RPi.GPIO as GPIO import serial import time # SIM7000JC Interface Configuration s=serial.Serial( port='/dev/serial0',\ baudrate=115200,\ parity=serial.PARITY_NONE,\ stopbits=serial.STOPBITS_ONE,\ bytesize=serial.EIGHTBITS,\ timeout=5); # GPIO Configuration GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) # GPIO17 -- SIM7000 CTS Port GPIO.setup(17,GPIO.IN) # GPIO18 -- SIM7000 RTS Port GPIO.setup(18,GPIO.OUT) GPIO.output(18,GPIO.LOW) # GPIO22 -- SIM7000 Power ON/OFF Trigger Port GPIO.setup(22,GPIO.OUT) GPIO.output(22,GPIO.LOW) # GPIO27 -- SIM7000 Hardware Reset Signal Port GPIO.setup(27,GPIO.OUT) GPIO.setup(27,GPIO.LOW) # Power ON the module # active duration should be more than 1 second. GPIO.output(22,GPIO.HIGH) time.sleep(1.5) GPIO.output(22,GPIO.LOW) # Wait for booting (more than 4.5 second) time.sleep(5) # Read messages from SIM7000 for line in s.readlines() : print (line) # Check response, expecting OK by AT command. s.write('AT\r\n') time.sleep(1) print (s.readline()) # Read messages from SIM7000 for line in s.readlines() : print (line) ファイルを作成できたら、 $ python sim7000_onoff.pyを実行してください。 20秒間くらいの間に以下のようなメッセージが出れば起動に成功したことを意味します。 . RDY +CFUN: 1 +CPIN: READY SMS Ready AT OK もし、 NORMAL POWER DOWN とのメッセージが出た場合には、モジュールの電源が落ちたことを意味するので、 再度 sim7000_onoff.pyを実行して、起動させてください。 |
2. pppd を起動する
pppdを使って、pionair-soracom 接続を呼び出します。 ここではログを/tmp/ppp.logに書き出すことにします(長期運用ではログを定期的に削除するなどしてください)。 $ sudo pppd call pionair-soracom debug logfile /tmp/ppp.log 1分くらい待つとログが/tmp/ppp.logに書き出されます。 $ cat /tmp/ppp.log Script /usr/sbin/chat -v -f /etc/chatscripts/pionair-soracom finished (pid 679), status = 0x 0 Serial connection established. using channel 1 Using interface ppp0 Connect: ppp0 <--> /dev/ttyS0 sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0x55528fb5> <pcomp> <accomp>] rcvd [LCP ConfReq id=0x0 <asyncmap 0x0> <auth chap MD5> <magic 0xd0780516> <pcomp> <accomp>] sent [LCP ConfNak id=0x0 <auth pap>] rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0x55528fb5> <pcomp> <accomp>] rcvd [LCP ConfReq id=0x1 <asyncmap 0x0> <auth pap> <magic 0xd0780516> <pcomp> <accomp>] sent [LCP ConfAck id=0x1 <asyncmap 0x0> <auth pap> <magic 0xd0780516> <pcomp> <accomp>] sent [LCP EchoReq id=0x0 magic=0x55528fb5] sent [PAP AuthReq id=0x1 user="sora" password=<hidden>] rcvd [LCP DiscReq id=0x2 magic=0xd0780516] rcvd [LCP EchoRep id=0x0 magic=0xd0780516 55 52 8f b5] rcvd [PAP AuthAck id=0x1 ""] PAP authentication succeeded sent [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>] sent [IPCP ConfReq id=0x1 <compress VJ 0f 01> <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns2 0.0. 0.0>] rcvd [LCP ProtRej id=0x3 80 fd 01 01 00 0f 1a 04 78 00 18 04 78 00 15 03 2f] Protocol-Reject for 'Compression Control Protocol' (0x80fd) received rcvd [IPCP ConfReq id=0x0] sent [IPCP ConfNak id=0x0 <addr 0.0.0.0>] rcvd [IPCP ConfRej id=0x1 <compress VJ 0f 01>] sent [IPCP ConfReq id=0x2 <addr 0.0.0.0> <ms-dns1 0.0.0.0> <ms-dns2 0.0.0.0>] rcvd [IPCP ConfReq id=0x1] sent [IPCP ConfAck id=0x1] rcvd [IPCP ConfNak id=0x2 <addr 10.215.179.23> <ms-dns1 100.127.0.53> <ms-dns2 100.127.1.53> ] sent [IPCP ConfReq id=0x3 <addr 10.215.179.23> <ms-dns1 100.127.0.53> <ms-dns2 100.127.1.53> ] rcvd [IPCP ConfAck id=0x3 <addr 10.215.179.23> <ms-dns1 100.127.0.53> <ms-dns2 100.127.1.53> ] Could not determine remote IP address: defaulting to 10.64.64.64 not replacing default route to eth0 [192.168.1.1] local IP address 10.215.179.23 remote IP address 10.64.64.64 primary DNS address 100.127.0.53 secondary DNS address 100.127.1.53 Script /etc/ppp/ip-up started (pid 697) Script /etc/ppp/ip-up finished (pid 697), status = 0x0このようなログが出たら、接続できたことを確認します。 |
3. ppp0 インタフェースの確認
ifconfigコマンド等を使って、ppp0 インタフェースが作成されたことを確認します。$ ifconfig eth0, lo, wlanなどのインタフェースも見えると思いますが、 ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500 inet 10.215.179.23 netmask 255.255.255.255 destination 10.64.64.64 ppp txqueuelen 3 (Point-to-Pointプロトコル) RX packets 5 bytes 62 (62.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 6 bytes 101 (101.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 のように ppp0 のインタフェースが作られていれば成功です。 |
4. 疎通性の確認
pingコマンドを使って、ppp0からインターネット上のホストと通信ができるかどうかを確認します。
デフォルト・ルートを変更していないので、ここでは -I オプションでppp0を指定してください。 DNS解決を行うため、最初の表示まで少し時間がかかりますが、 $ ping -I ppp0 www.futaba-kikaku.jp PING www.futaba-kikaku.jp (157.7.107.146) from 10.215.179.23 ppp0: 56(84) bytes of data. 64 bytes from 157-7-107-146.virt.lolipop.jp (157.7.107.146): icmp_seq=1 ttl=55 time=612 ms 64 bytes from 157-7-107-146.virt.lolipop.jp (157.7.107.146): icmp_seq=2 ttl=55 time=119 ms 64 bytes from 157-7-107-146.virt.lolipop.jp (157.7.107.146): icmp_seq=3 ttl=55 time=152 ms 64 bytes from 157-7-107-146.virt.lolipop.jp (157.7.107.146): icmp_seq=4 ttl=55 time=86.9 ms 64 bytes from 157-7-107-146.virt.lolipop.jp (157.7.107.146): icmp_seq=5 ttl=55 time=164 ms 64 bytes from 157-7-107-146.virt.lolipop.jp (157.7.107.146): icmp_seq=6 ttl=55 time=86.1 ms 64 bytes from 157-7-107-146.virt.lolipop.jp (157.7.107.146): icmp_seq=7 ttl=55 time=131 ms 64 bytes from 157-7-107-146.virt.lolipop.jp (157.7.107.146): icmp_seq=8 ttl=55 time=87.7 ms ^C --- www.futaba-kikaku.jp ping statistics --- 8 packets transmitted, 8 received, 0% packet loss, time 645ms rtt min/avg/max/mdev = 86.099/179.749/612.131/165.814 ms のように結果が得られれば成功です。 |
5. 切断方法
pppd プロセスを終了すると、インターネット接続が切断されます。 psコマンドを使ってpppdのプロセスIDを調べると、 pi $ ps auxwww | grep pppd root 1431 0.0 0.2 6520 2364 ttyS0 Ss+ 19:01 0:00 pppd call pionair-soracom debug logfile /tmp/ppp.log のように表示が得られます。この場合は、1431がプロセスIDなので、 pi $ sudo kill 1431 を実行すれば、終了します。その後、ログ(/tmp/ppp.log)を確認すると、 Terminating on signal 15 Connect time 5.4 minutes. Sent 2436 bytes, received 2436 bytes. Script /etc/ppp/ip-down started (pid 1588) sent [LCP TermReq id=0x2 "User request"] rcvd [LCP TermAck id=0x2] Connection terminated. Script /etc/ppp/ip-down finished (pid 1588), status = 0x0 といった内容が記録されていると思います。 (*)上記以外に、 pi $ sudo killall pppd を実行する方法もあります。 (*) 最後に、sim7000_onoff.py を使って、モジュールの電源を落としてください。 |
6. デフォルト・ゲートウェイの変更
「2. pppd を起動する」が成功した段階では、eth0(LANポート)がインターネット接続のための デフォルト・ゲートウェイとして設定されています。 (*) Raspberry Pi Zeroでは wlan0(WiFiポート)が設定されています。 ルーティングテーブルを確認するため、 pi $ sudo route -n を実行してみると pi $ sudo route -n カーネルIP経路テーブル 受信先サイト ゲートウェイ ネットマスク フラグ Metric Ref 使用数 インタフェース 0.0.0.0 192.168.1.1 0.0.0.0 UG 202 0 0 eth0 10.64.64.64 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 192.168.1.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0 のように得られると思います。 この例では、受信先サイト0.0.0.0 (ネットマスク 0.0.0.0) は、192.168.1.1を経由すること、 またそのためにはeth0を使用すること、が記されています。 これを以下の二つのコマンドを実行することで変更します。 pi $ sudo route del -net 0.0.0.0/0 gw 192.168.1.1 pi $ sudo route add -net 0.0.0.0/0 gw 10.64.64.64 その結果、 pi $ sudo route -n カーネルIP経路テーブル 受信先サイト ゲートウェイ ネットマスク フラグ Metric Ref 使用数 インタフェース 0.0.0.0 10.64.64.64 0.0.0.0 UG 0 0 0 ppp0 10.64.64.64 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 192.168.1.0 0.0.0.0 255.255.255.0 U 202 0 0 eth0 のようになります。 これで、受信先サイト0.0.0.0 (ネットマスク 0.0.0.0) は、10.64.64.64を経由すること、 またそのためにはppp0を使用すること、となります。 この状態では、すべてのインターネット上のホストとの通信は、ppp0 を使用するようになります。例えば、 pi $ wget https://www.futaba-kikaku.jp/ --2020-10-21 10:40:24-- https://www.futaba-kikaku.jp/ www.futaba-kikaku.jp (www.futaba-kikaku.jp) をDNSに問いあわせています... 157.7.107.146 www.futaba-kikaku.jp (www.futaba-kikaku.jp)|157.7.107.146|:443 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 4842 (4.7K) [text/html] `index.html' に保存中 index.html 100%[=======================================================>] 4.73K 3.72KB/s 時間 1.3s 2020-10-21 10:40:29 (3.72 KB/s) - `index.html' へ保存完了 [4842/4842] は、ppp0を使用して行われます。 |
7. 付録
SIM7000は、ATコマンドによるTCP/UDPソケット通信も可能です。 興味のある方は参考にしてみてください。 HTTPサーバとの通信例:sim7000_sample_code1.py NTPサーバとの通信例:sim7000_sample_code2.py |