python - 覆盆子 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'
解决方案
该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()
也许您想对响应做点什么。:-)
推荐阅读
- php - 是否可以使用 openssl 将文件解密到内存而不是磁盘文件
- google-chrome-extension - 在 chrome 扩展中获取和设置本地存储
- jmeter - JMeter中生成的PerfMon png中y轴的单位是什么?
- typescript - 通用、联合和扩展。打字稿
- reactjs - 如何防止用户输入以数字开头的用户名,但只允许在字母字符后输入数字?
- python - Python:如何在循环中只打印一行
- android - 使用 shrinkResources true 时未找到可绘制对象
- cert-manager - 是否可以使用 cert-manager 颁发手动创建的证书?
- javascript - 如何持续关注 MongoDB 并更新我的 UI?
- python - Python在引发异常后添加重试