从python在SMS文本中发送的AT命令

从python在SMS文本中发送的AT命令,python,at-command,pyserial,Python,At Command,Pyserial,我需要一段代码的帮助,我正在使用华为3G加密狗通过短信发送天气预报 成功了,但我得到的是: AT+CMGF=1 AT+CMGS="+12345678" It's partly cloudy and 20C now in Wahren. 为什么我在字符串处接收这些 import pywapi import string import serial weather_com_result = pywapi.get_weather_from_weather_com('AGXX0006') sms_

我需要一段代码的帮助,我正在使用华为3G加密狗通过短信发送天气预报

成功了,但我得到的是:

AT+CMGF=1
AT+CMGS="+12345678"
It's partly cloudy and 20C now in Wahren.
为什么我在字符串处接收这些

import pywapi
import string
import serial


weather_com_result = pywapi.get_weather_from_weather_com('AGXX0006')
sms_text = "It's " + string.lower(weather_com_result['current_conditions']['text']) + " and " + weather_com_result['current_conditions']['temperature'] + "C now in Wahren.\n\n"

dongle = serial.Serial(port="COM6",baudrate=460800,timeout=0,rtscts=0,xonxoff=0)


def sendatcmd():
    number = "+12345678"
    dongle.write('AT+CMGF=1\r')
    dongle.write('AT+CMGS="' +number+'"\r')
    dongle.write(str(sms_text)+"\r")
    dongle.write(chr(26))
    dongle.close()
    print "sent"

sendatcmd()

我认为您可能需要首先发送ATE0命令以关闭echo,否则每个命令都将由调制解调器进行回音

我曾经为GSM调制解调器编程,但现在没有任何硬件来测试它。尝试在第一个AT命令之前插入此命令:

dongle.write('ATE0\r')

Python是如何访问处理器的(这样它就可以读/写AT命令)。在Android中,这种访问是由无线电接口层(RIL)提供的,而userland无权访问它。由于操作系统将USB视为com端口,并且正在使用python串行库,我认为AT命令根本没有被主机处理器处理,而是像任何其他串行数据一样,作为数据转发到串行/USB接口,仅由加密狗进行解释。是否需要在SMS文本之后返回回车符?表示不是这样。这可能会混淆解析器。@StaceyAnne当我删除它们时,文本不会被发送。哪个消息是空的?PS:你应该等待调制解调器的应答(确定或错误)并解析它们,否则你无法保证你所期望的是发生的事情。我按照你告诉我的,在函数中的第一个AT命令之前放一行,我得到一条空短信。我不确定你的目标是什么。在默认配置中,调制解调器将回显您写入的所有AT命令。使用ATE0时,它会停止回显命令,但仍会处理这些命令。该字符串是您要发送的短信,如果该字符串有效,则该短信的收件人应接收该字符串,但不需要您的调制解调器对此进行回音。如果您不先发送ATE0,您是否会收到该短信?正常情况下,它应该不会对操作产生任何影响。