17
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2018-01-19

前書き

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を送信することができませんでした・・・。

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

17
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?