Help us understand the problem. What is going on with this article?

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

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

miiiiiiika
hmm...
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした