昨年、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シリアル。
私は一度に 2 つの SSH セッションを行っています。1 つはコマンドラインアップで、もう 1 つはシリアルを監視するための 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 OK
AT+QURCCFG="urcport","usbmodem" OK
AT+CPMS="私","私","私" +CPMS: 0,255,0,255,0,255
OK AT+CMGD=1,4 OK
+CMTI: "私",0
「reply = ser.read(ser.inWaiting())」と関係があることは知っていますが、それを機能させるために何を書くべきかわかりません。前もって感謝します