首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python通过Raspberry pi和Quectel EC25自动回复短信

使用Python通过Raspberry pi和Quectel EC25自动回复短信
EN

Stack Overflow用户
提问于 2021-02-21 15:02:58
回答 1查看 162关注 0票数 0

去年,我用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...”但它永远不会超越这一点,即使它接收到文本消息。

代码语言:javascript
复制
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()试过了,但这使它陷入了一个糟糕的反馈循环。

这是我的代码。

代码语言:javascript
复制
# 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())“有关,但我不知道该写什么才能使它工作。提前谢谢你

EN

回答 1

Stack Overflow用户

发布于 2021-05-16 09:54:07

最简单的方法可能是轮询收到的消息。也许EC25有一些可能的gpio。一旦有消息到来,gpio就会产生一个脉冲信号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66299923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档