使用 AT 命令和 Python 在 Raspberry Pi 2 上接收空白短信 SIM800

Recieving Blank SMS SIM800 using AT Commands and Python on Raspberry Pi 2

我在 rpi2 上创建了这个 python 脚本,消息通过了,但它是一条空白消息。是编码问题吗?

import serial
import time
from sys import version_info
from curses import ascii
phone = serial.Serial("/dev/ttyAMA0", 115200, timeout=0.5)
def send_text(number,message):    
    phone.write(b'AT+CMGF=1\r')
    phone.write(b'AT+CMGS="' + number.encode() + b'"\r')
    phone.write(message.encode())
    phone.write(ascii.ctrl('z'))
    for i in range(len(reply)):
        reply[i] = reply[i].rstrip()
    print reply

AT命令(其中0000000000是10位手机号码) 在 Minicom 中,仍然是 空白 消息

minicom -D /dev/ttyAMA0 -b 115200 -o

AT
OK
AT+CMGS="0000000000"
>Hello
 <ctrl-z>
+CMGS: 14
OK

Screenshot of Message from GSM Module

文本模式参数存在问题。下面的 AT 命令修复了它 -

AT+CSMP=17,167,0,0

--info about it
AT+CSMP=<fo>,<vp>,<pid>,<dcs>
<fo>=17 Sets reply pat, user data header, status report request, validity period format, reject duplicates and message type.
<vp>=167 Sets validity period.
<pid>=0 Higher layer protocol indicator.
<dcs>=0 Information encode format.
OK Modem Response.

A​​T+CSMP=17,167,0,0

参数 取决于命令或结果代码:GSM 的第一个八位字节 03.40 SMS-DELIVER,SMS-SUBMIT(默认 17),

SMS-STATUS-REPORT 或 SMS-COMMAND(默认 2)整数 格式。如果设置为 49,则在文本模式下支持短信状态报告。

取决于 SMS-SUBMIT 设置:GSM 03.40 TP-Validity-Period 为整数格式(默认为 167)或时间字符串 格式(参考)

GSM 03.40 TP 协议标识符,整数格式(默认为 0)。

GSM 03.38 整数格式的 SMS 数据编码方案。