RaspberryPi
SMS
IoT
3g
SORACOM

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

More than 1 year has passed since last update.


前書き

ATコマンドについて、日本語で書かれた記事がほとんどありません。

最近Soracomの方がATコマンドについて書かれていましたが、非常に勉強になります。

これから始めてみる方はとても参考になるのではないでしょうか。


やりたいこと

ATコマンドを使い、携帯に日本語(UCS2)でSMSを送信します。

以下、間違いなどがあれば指摘してもらえると助かります。


環境

RaspberryPiを使います。


  • RasbperryPi3

$ lsb_release -a

No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 9.1 (stretch)
Release: 9.1
Codename: stretch


SMSを送る

まずは普通に(GSM 7 bit≒Asciiで)SMSを送ってみます(参考)。

Linuxの場合、ドングルを刺すと/dev/ttyUSB0~3が作られます。

このうち、ATコマンドを発行してみると、ttyUSB0ttyUSB1がmodemとして動作していることがわかります。

どちらを使ってもよいのですが、今回はttyUSB1を使用します。

例によってscreenをインストールし、以下のコマンドを実行していきます。

以下、>>は端末上で入力するコマンド、<<はmodemからの応答を表します。

$ screen /dev/ttyUSB1 115200

>> AT+CFUN=1
<< OK
>> AT+CMGF=1
<< OK
>> AT+CMGS="電話番号"
> test(Ctrl-z)
<< +CMGS: ***
<<
<< OK

おくられました。よかったですね。

1.png

各コマンドはそれぞれ以下のような意味を持ちます。


  • AT+CFUN=1

    modemの機能制限に関する設定です。

    1は機能制限をとっぱらいます。

  • AT+CMGF=1

    SMSを送信モードを設定します。

    text modeで送信します。

  • AT+CMGS="電話番号"

    電話番号に対してSMSを送信します。

    > test(Ctrl-z)

    はtestと入力した後にCtrl-zを入力します。


日本語(UCS2)でSMSを送る

USC2(USC2 ⊂ UTF-16)でSMSを送ります。

$ screen /dev/ttyUSB1 115200

>> AT+CFUN=1
<< OK
>> AT+CMGF=1
<< OK
>> AT+CSMP=1,167,0,8
<< OK
>> AT+CSCS="UCS2"
<< OK
>> AT+CMGS="電話番号"
> 3042(Ctrl-z)
<< +CMGS: ***
<<
<< OK

送られました。よかったですね。

2.png


  • AT+CSMP=1,167,0,8

    SMSの送信や保存についての設定です。

    UCS2で送信する場合、4番目の要素が重要で、8とする必要があります。

    8ではなく24(Flash message)にすると地震速報とか緊急速報的なメッセージの出方をします(参考)。

  • AT+CSCS="UCS2"

    エンコードを設定します。

    モジュールによってはUCS2に対応していない場合があります。

    対応しているかどうかは、AT+CSCS=?で確認ができます。

    AK-020の場合は以下のような感じです。

AT+CSCS=?

+CSCS: ("IRA", "GSM", "HEX", "PCCP437", "8859-1", "UCS2", "UCS2_0X81")

このエンコードの設定は受信するSMSにも影響するので、一つのmodemでSMSを送受信する場合は気を付けましょう。

GSM 7 bitに設定したい場合は8859-1を設定します。

また、携帯によって表示が異なりますが、UCS2で使える絵文字も送ることができます。

3.png


参考


雑談

SMSを送受信するだけなら、直接ATコマンドを実行しなくても、gammuという良いツールがあります。

GPLですがPythonなどにライブラリも公開されていますし、1行のコマンドでSMSの送受信を行うこともできます。

ただ、色々試したのですがどうしてもUCS2でSMSを送信することができませんでした・・・。

コードから使いたく、自前で超簡単なものを作りましたので、よかったらどーぞ