ラズパイ4とLTEモデムとドコモ回線でSMS送受信をする

ラズパイ
この記事は約6分で読めます。

前回povoのSIMをつなげたUX302NCでドコモ回線をつなげたりSMS送受信をします。

ロケットモバイル

今回使用する回線はロケットモバイルのDプラン(docomo)の神プラン(200kbps)回線です。

前回のau系povo2.0は電話をVoLTE、SMSをIMS経由で送信しているのもあり送受信はうまくいかなかったので諦めてドコモ系回線を使います。

メイン回線であるOCN Mobile Oneでもよかったのですが、単純に動かし続ける想定では困るので別回線を契約しました。

長期的に見て電話は使いませんが電話ありの国際SMS受信オプション契約しました。

データプランの場合はSMS番号を付与すればいいかな(神プランだとたいした金額差になりません)

UX302NCでロケットモバイルに接続

UX302NCはSIMフリーなので、前回の記事のAPN設定変更だけで済みます。

ハード周りは前回の記事参照で。

ラズパイとLTEモデムでpovo2.0につなげる
どうして5個も買ってしまったのか...
[Dialer Defaults]
Phone = *99***1#

;APN = povo.jp
;Username = [email protected]
;Password = povo
New PPPD = yes
Stupid Mode = yes
Init1 = ATZ
;Init2 = AT+CGDCONT=1,"IPV4V6","povo.jp"


;APN = ocn.ne.jp
;Username = mobileid@ocn
;Password = mobile
;Init2 = AT+CGDCONT=1,"IP","ocn.ne.jp"
APN = 4gn.jp
Username = roke@moba
Password = rokemoba
Init2 = AT+CGDCONT=1,"IP","4gn.jp"

Init3 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init4 = AT+CMGF=1


Dial Attempts = 3
Modem Type = Analog Modem
Modem = /dev/ux302nc
Dial Command = ATD
Carrier Check = no
ISDN = 0

;Init1 = ATZ
;Init3 = ATQ0 V1 E1 S0=0 +FCLASS=0
;Modem Type = Analog Modem
;Baud = 46800
;New PPPD = yes
;Modem = /dev/ux302nc
;ISDN = 0i
; Phone = <Target Phone Number>
; Password = <Your Password>
; Username = <Your Login Name>

APN設定値はSIMカードと一緒に来る説明書に書いてあるのでそれにならいます。
(ロケットモバイルはIPv6は提供していないとのことでIPv4のみの設定です)

設定を保存してwvdialコマンドでひとまずPPPは繋がることを確認できます

root@ras41:~# wvdial
--> WvDial: Internet dialer version 1.61
--> Initializing modem.
--> Sending: ATZ
OK
--> Sending: AT+CGDCONT=1,"IP","4gn.jp"
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
OK
--> Sending: AT+CMGF=1
AT+CMGF=1
OK
--> Modem initialized.
--> Sending: ATD*99***1#
--> Waiting for carrier.
ATD*99***1#
CONNECT 150000000
--> Carrier detected. Starting PPP immediately.
--> Starting pppd at Sat Feb 17 15:12:29 2024
--> Pid of pppd: 1343
--> Using interface ppp0
--> local IP address 000.000.000.000
--> remote IP address 000.000.000.000
--> primary DNS address 000.000.000.000
--> secondary DNS address 000.000.000.000

SMS送受信

今回の本題はSMSの送受信です

一旦wvdialは閉じてscreenでUSBシリアルデバイスに繋ぎます

screen /dev/ttyUSB1

wvdialで接続していた場合コマンドループバックが帰ってきているかもしれません。

受信

受信済みのSMSがあるか確認してみます

AT+CMGL="ALL"
OK

まだ何も送っていないので何もありません

そこで別の端末からSMSを送ってみます

+CMTI: "SM",0

するとこんなログが出てきます。
再度確認すると

+CMGL: 0,"REC UNREAD","送信元電話番号",,"24/02/17,15:43:31+36"
Test

OK

受信できたみたいですね。

AT+CMGL="ALL"
+CMGL: 0,"REC READ","送信元電話番号",,"24/02/17,15:43:31+36"
Test

OK

再実行するとちゃんとステータスが変わっているのがわかります。

+CMTI: "SM",1
AT+CMGL="ALL"
+CMGL: 0,"REC READ","送信元電話番号",,"24/02/17,15:43:31+36"
Test
+CMGL: 1,"REC UNREAD","送信元電話番号",,"24/02/17,15:50:15+36"
30533093306B3061306F

OK

日本語はエンコードされているのでこのままでは読めませんね…

送信

今度はラズパイから別の端末に送信してみます

AT+CMGS="<送信先電話番号>"
> hello world.
> (ここでCtrl+z)

+CMGS: 1

OK

別の端末で確認すると出てきました。

ただ、日本語は送れないようです

AT+CMGS="送信元電話番号"
> こんにちわ
>

+CMS ERROR: 305

どうやら受信でもエンコードされてたようにエンコードをしないとダメそうです。

使い道

一応SMS受信BOTとして動かそうとOSSのソースを動かそうとしましたがパッケージ周りで動かなかったのでいったん保留にします。
(Docker化したりしたけど動かんかった)

コマンドからちゃんと受信できてるそれでヨシ

参考

SMS認証コードをラズパイでSlackに転送してみた | Zeen

3gドングルを使いATコマンドで日本語のSMSを送信する | Qiita

コメント