首页 > 解决方案 > 覆盆子 GSM 模型无法工作

问题描述

我正在尝试运行此代码以发送 SMS 消息:

import serial
import time

ser = serial.Serial('/dev/ttyAMA0',baudrate=9600, timeout=3)
ser.write("AT\r")
response = ser.readlines(None)
ser.write("AT+CMGF=1\r")
response = ser.readlines(None)
ser.writ('AT+CMGS="+9693550770"\r')
response = ser.readlines(None)
ser.write("F=Hello Raspberry pi")
ser.weite(ch(26))
time.sleep(19)
ser.close()

错误:

%Run sms.py
Traceback (most recent call last):
  File "/home/pi/Desktop/sms.py", line 4, in: ser.write("AT\r")
  File "/usr/lib/python3/dist-packages/serial/serialposix.py", line 518, in write d = to_bytes(data)
  File "/usr/lib/python3/dist-packages/serial/serialutil.py", line 63, in to_bytes 
      raise TypeError('unicode strings are not supported, please encode to bytes: {!r}'.format(seq))
  TypeError: unicode strings are not supported, please encode to bytes: 'AT\r'

标签: pythonraspberry-pi3

解决方案


write()方法需要字节而不是字符串。最简单的解决方案是在字符串文字前加上b.

您也不得尝试读取超过一行来响应每个 AT 命令。该readlines()方法读取所有行,直到发送方关闭其连接端,因此您的代码将挂在那里。

import time
import serial


def main():
    with serial.Serial('/dev/ttyAMA0', baudrate=9600, timeout=3) as connection:
        connection.write(b'AT\r')
        _response = connection.readline()
        connection.write(b'AT+CMGF=1\r')
        _response = connection.readline()
        connection.write(b'AT+CMGS="+9693550770"\r')
        _response = connection.readline()
        connection.write(b'F=Hello Raspberry pi\x1a')
        time.sleep(19)


if __name__ == '__main__':
    main()

也许您想对响应做点什么。:-)


推荐阅读