2013-07-15 1 views
0

В настоящее время я пытаюсь сделать что-то простое с помощью сотового модуля Telit CC864. Модуль управляется с помощью AT-команд через последовательные порты. Таким образом, с помощью программного обеспечения управления модема, таких как Миник, я могу ввести следующую последовательность команд: «Привет, мир!»Имитация ввода ключа в сценарии серийного программирования python

Input: AT 
Output: OK 
Input: AT#SGACT=1,1 
Output: OK 
Input: AT#SD=1,0,54321,"30.19.24.10",0,0,1 
Output: CONNECTED 
Input: AT#SSEND=1 
> Hello world! 
> 
Output: OK 

Что это делает он подключается к серверу я настроил и отправляет пакет. Все работает в миникомплексе. Однако то, что я пытаюсь сделать, это преобразовать это в скрипт python. Вот что у меня есть до сих пор:

import serial 
import time 

# Modem config 
modem_port = serial.Serial() 
modem_port.baudrate = 115200 
modem_port.port = "/dev/tty.usbserial-00002114B" 
modem_port.parity = "N" 
modem_port.stopbits = 1 
modem_port.xonxoff = 0 
modem_port.timeout = 3 
modem_port.open() 


def send_at_command(command): 
    modem_port.write(bytes(command+"\r", encoding='ascii')) 

def read_command_response(): 
    print(modem_port.read(100).decode('ascii').strip()) 
    print("\n") 

if modem_port.isOpen(): 

    # Check network status 
    send_at_command("AT+CREG=1") 
    read_command_response() 

    # Configure Socket 
    send_at_command("AT#SCFG=1,1,0,0,1200,0") 
    read_command_response() 

    # Obtain IP from network 
    send_at_command("AT#SGACT=1,1") 
    read_command_response() 

    # Connect to AWS server 
    send_at_command("AT#SD=1,0,54321,\"30.19.24.10\",0,0,1") 
    read_command_response() 

    # Send packet to AWS server 
    send_at_command("AT#SSEND=1") 
    read_command_response() 

    send_at_command("This is sent from Python Script.") 
    read_command_response() 

modem_port.close() 

Однако этот скрипт не может отправить пакет. Я думаю, что причина в том, что в мини-классе мне нужно нажать Enter после Hello world! для отправки пакета. Я не понимаю, как имитировать это в скрипте python. Любые предложения будут высоко ценится.

EDIT:

Так что я читал документацию к модулю еще немного, и кажется, что то, что мне нужно сделать, это отправить Ctrl-Z полукокса (0x1A шестнадцатеричное) через последовательный порт. Вы знаете, как я буду делать это на питоне?

ответ

1

Обратите внимание, что документация указано, что команда выполнения была Ctrl-Z, так что этот ответ был отредактирован, чтобы удалить ссылки на \n и \r

EDIT:

Основываясь на вашем комментарии

def send_at_command(command): modem_port.write(bytes(command+"\1a", encoding='ascii')) 
+0

Это не работает. Я уже пробовал \ r, \ n и \ r \ n. – yz10

+0

Итак, я читал документацию по модулю еще немного, и мне кажется, что мне нужно послать Ctrl-Z char (0x1A hex) через последовательный порт. Вы знаете, как я буду делать это на питоне? – yz10

+0

def send_at_command (команда): modem_port.write (байты (команда + "\ 1a", encoding = 'ascii')) –