Tengo el siguiente código de ejemplo:

import serial

ser = serial.Serial('/dev/ttyUSB1', 115200, timeout=5)
ser.write("AT\r")
response =  ser.readline()
ser.write(chr(26)) 
ser.close()

print response

Mi objetivo es enviar el EN comando y obtener su respuesta ACEPTAR.

La documentación de PySerial readline() dice que lee los datos recibidos hasta que encuentra un salto de línea, el problema es que mi impresión es devolver nada.

Estoy seguro de que después de la EN comando, la respuesta que el modem 3G me envía es ACEPTAR. Alguien sabe la razón por la que usted no puede obtener la respuesta?

PS: el uso de programas como CuteCom, tengo la confirmación de que el dispositivo funciona y que responde a los comandos AT.

  • ¿Has probado a ser.leer(2) en lugar de ser.readline() ?
  • También se establece un tiempo de espera=5 para la depuración, obligando a leer() para devolver si no se dispone de datos después de 5 segundos.
  • También tenga en cuenta que usted no está enviando un retorno de carro en tu ser.write()
InformationsquelleAutor Renato | 2014-05-08

3 Comentarios

  1. 3

    Con el fin de complementar la cuestión comentarios, por favor, intente esto y ver si algo cambia:

    import serial
    
    ser = serial.Serial('/dev/ttyUSB1', 115200, timeout=5)
    ser.write("AT\r")
    response =  ser.read(2)
    print response
    ser.close()

    Si todo funciona, a continuación, agregue el «\r» a tu write() y reemplazar el ser.read(2) con ser.readline() y establecer el valor de tiempo de espera a cero de nuevo.

    • Se dio cuenta de que los cambios que usted ha mencionado. No tengo ninguna respuesta todavía.
    • Puedes intentar ser.escribir(«EN\n») y ser.escribir(«AT\r\n») ?
    • Sí, las he probado las dos opciones. Mi dispositivo es un módem ZTE190, y estoy usando Python 2.7.6
    • Puede enviar y recibir datos correctamente de su /dev/ttyUSB1 dispositivo a través de minicom? Si es así, utilice la configuración completa de la configuración cuando se llama a la serie.Serie(), por ejemplo, el conjunto de todas las siguientes variables de acuerdo con un trabajo de configuración: velocidad en baudios, bytesize,paridad,stopbits,tiempo de espera,xonxoff y rtscts
  2. 3

    Recibido problema con el código:

    import serial
    ser = serial.Serial(port='COM1', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=1, xonoff=False, rtscts=False, dsrdtr=False)
    cmd="AT\r"
    ser.write(cmd.encode())
    msg=ser.read(64)
    print(msg)

    de salida es ACEPTAR 🙂

  3. 1

    es una de varias líneas de salida de lo que el módem devuelve a su aplicación. se necesitan múltiples readline llamadas a recoger todas las de salida (OK no es la primera línea de respuesta y tampoco es segundo, y si readline llamadas son demasiado rápido, se perderán la final del mensaje). considere el siguiente código en su lugar (la respuesta var estaría completa módem de respuesta marcador de posición):

    `

    import serial, time
    
    modem = serial.Serial(port='/dev/ttyHS0', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=1, xonoff=False, rtscts=False, dsrdtr=False)
    
    cmd = "AT\r"
    
    modem.write(cmd.encode())
    
    answer = ""
    
    read_timeout = 0.1
    
    quantity = modem.in_waiting 
    
    while True:
    
        if quantity > 0:
    
               answer += modem.read(quantity)
        else:
                    # read_timeout is depends on port speed
    
                    # with following formula it works:
    
                    # 0.1 sec + 1.0 sec /baud rate (bits per second) * 10.0 bits (per character) * 10.0 times
    
                    # example for 115200 baud rate:
    
                    # 0.1 + 1.0 /115200 * 10.0 * 10.0 ~ 0.1 sec
    
               time.sleep(read_timeout) 
    
        quantity = modem.in_waiting
    
        if quantity == 0:
    
               break

    `

Dejar respuesta

Please enter your comment!
Please enter your name here