Я использую сегодня для проекта GSM / GPRS RSPI модуль . Моя работа состоит в том, чтобы отправлять с помощью AT-команд файлы на FTP-сервер (он работает с помощью простой программы на Python или с помощью putty, посылая все AT-команды по одной).
Сегодня, чтобы упростить мой код, я решил перевести код в объект.
Кроме того, я создаю свой класс со всеми моими методами, такими как отправка SMS, connectGPRS, sendFTP ... (эти методы не упрощают код)
Но когда я запускаю свою программу, я не получаю ответ моего подтверждения от модуля.
При запуске isReady()
программа отправляет последовательную команду для проверки модуля. Но у меня нет ответа. Моя конфигурация последовательного порта выглядит так (debug()
return ttyAMA0), и я могу управлять своим модулем с помощью Putty. Но когда я делаю короткое замыкание с Tx и Rx, я не вижу запроса от программы на Putty.
Затем моя программа останавливается в строке sys.exit(0)
, при этом ser.isReady()
возвращает false.
Итак, мой вопрос: можно ли использовать последовательный порт, как я его использовал, в объектном программировании? Или я ошибаюсь в своем коде?
С уважением. (простите, кстати, за мой французский)
import serial
print("Reset du module")
resetModem()
time.sleep(5)
ser = ConnexionModule(SERIAL_PORT, 9600, 5)
if not ser.isReady():
print("Failed reboot, maybe a another program connected on serial, or the device isn't lauched")
sys.exit(0)
#debug() is a print function
def debug(text):
if VERBOSE:
print("Debug:---", text)
# This class is in reality in a another file imported in main
class ConnexionModule():
def __init__(self,serial_port,baudrate,timeout):
self.ser = serial.Serial(serial_port, baudrate, timeout)
# Testing if the module is ready to be used
def isReady(self):
# Resetting to defaults
cmd = 'ATZ\r'
# When i send 'ATZ' the module return 'OK'
debug("Cmd: " + cmd)
self.serialwrite(cmd,2)
reply = self.ser.read(self.ser.inWaiting())
reply = reply.decode("utf-8")
time.sleep(8) # Waiting for a reply
debug("Reply: " + reply)
return ("OK" in reply)
def serialwrite(self,cmd,slp):
debug("Sending:")
debug(self.ser.port)
debug(cmd)
self.ser.write(cmd.encode())
time.sleep(slp)
Этот код работает:
import serial
print("Reset du module")
resetModem()
ser = serial.Serial(SERIAL_PORT, baudrate = 9600, timeout = 5)
if not isReady(ser):
print("Fail reboot")
sys.exit(0)
def isReady(pserial):
# Resetting to defaults
cmd = 'ATZ\r'
debug("Cmd: " + cmd)
serialwrite(pserial,cmd,2)
reply = pserial.read(pserial.inWaiting())
reply = reply.decode("utf-8")
time.sleep(8)
debug("Reply: " + reply)
return ("OK" in reply)
def debug(text):
if VERBOSE:
print("Debug:---", text)
def resetModem():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(P_RESET, GPIO.OUT)
GPIO.output(P_RESET, GPIO.LOW)
time.sleep(0.5)
GPIO.output(P_RESET, GPIO.HIGH)
time.sleep(0.5)
GPIO.output(P_RESET, GPIO.LOW)
time.sleep(3)