去年,我用Quectel ec25和覆盆子pi做了一个4g热点,它在这个目的上运行得很好。今年早些时候,我想扩展它的功能,为某些系统自动回复带有状态更新的文本消息。我能够很好地使用AT命令发送和接收文本消息,但让python识别和响应包含关键字的文本消息时遇到了问题。我找到了这段代码,http://www.python-exemplary.com/index_en.php?inhalt_links=navigation_en.inc.php&inhalt_mitte=raspi/en/gsm.inc.php,并对它做了一些修改,使EC25可以与USB串行接口一起工作。
我同时运行两个SSH会话,一个使用命令行,另一个使用minicom会话来监视串行。EC25正在向Pi发送它正在接收消息的指示,当接收到消息时,它的输出是"+CMTI:"ME",0“,但是pi没有对它作出响应。代码在这一部分似乎没有响应。它将打印“正在侦听传入的SMS...”但它永远不会超越这一点,即使它接收到文本消息。
reply = ser.read(ser.inWaiting())# Clean buf
print "Listening for incoming SMS..."
while True:
reply = ser.read(ser.inWaiting())
if reply != "":我只用ser.read()和ser.inWaiting()试过了,但这使它陷入了一个糟糕的反馈循环。
这是我的代码。
# SIMSMS1.py
# pip install pyserial
import RPi.GPIO as GPIO
import serial
import time, sys
import datetime
P_BUTTON = 24 # Button, adapt to your wiring
def setup():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(P_BUTTON, GPIO.IN, GPIO.PUD_UP)
SERIAL_PORT = "/dev/ttyUSB3" # Raspberry Pi 3
ser = serial.Serial(SERIAL_PORT, baudrate = 115200, timeout = 5)
setup()
ser.write("AT+CMGF=1\r") # set to text mode
time.sleep(1)
ser.write('AT+QURCCFG="urcport","usbmodem"\r') #set URC Indication
time.sleep(1)
ser.write('AT+CPMS="ME","ME","ME"\r') #set memory to Mobile equipment message storage
time.sleep(1)
ser.write('AT+CMGD=1,4\r') # delete all SMS
time.sleep(1)
reply = ser.read(ser.inWaiting())# Clean buf
print "Listening for incoming SMS..."
while True:
reply = ser.read(ser.inWaiting())
if reply != "":
ser.write("AT+CMGR=1\r") # read message
time.sleep(3)
reply = [ser.read(ser.inWaiting())]
print "SMS received. Content:"
print reply
if "getStatus" in reply:
t = str(datetime.datetime.now())
if GPIO.input(P_BUTTON) == GPIO.HIGH:
state = "Button released"
else:
state = "Button pressed"
ser.write('AT+CMGS="+1xxxxxxxxxx"\r') #designate phone number
time.sleep(3)
msg = "Sending status at " + t + ":--" + state
print "Sending SMS with status info:" + msg
ser.write(msg + chr(26))
time.sleep(3)
ser.write('AT+CMGD=1,4\r') # delete all messages
time.sleep(3)
ser.read(ser.inWaiting()) # Clear buf
time.sleep(5) 这是串行上的输出,最后一行是正在接收的消息
AT+CMGF=1正常
AT+QURCCFG="urcport“、"usbmodem”正常
AT+CPMS= "ME“,"ME",”ME“+物理服务器: 0,255,0,255,0,255
OK AT+CMGD=1,4 OK
+CMTI:"ME",0
我知道它与"reply = ser.read(ser.inWaiting())“有关,但我不知道该写什么才能使它工作。提前谢谢你
发布于 2021-05-16 09:54:07
最简单的方法可能是轮询收到的消息。也许EC25有一些可能的gpio。一旦有消息到来,gpio就会产生一个脉冲信号。
https://stackoverflow.com/questions/66299923
复制相似问题