在python串口脚本中模拟输入密钥

时间:2013-07-15 17:45:34

标签: python serial-port modem at-command

我目前正尝试使用Telit CC864 Cellular模块做一些简单的事情。该模块通过串口使用AT-Commands控制。因此,使用minicom等调制解调器控制软件,我可以输入以下命令序列:

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

它的作用是连接到我设置的服务器并发送一个数据包“Hello world!”。一切都在minicom工作。但是,我想要做的是将其转换为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()

但是,此脚本无法发送数据包。我想的原因是因为在minicom中,我必须在Hello world之后按Enter键!为了发送数据包。我对如何在python脚本中模拟这个问题感到茫然。任何建议将不胜感激。

编辑:

所以我正在阅读模块文档,似乎我需要做的是通过串口发送Ctrl-Z char(0x1A hex)。你知道怎么在python中做这个吗?

1 个答案:

答案 0 :(得分:2)

请注意,文档指出执行命令是ctrl-z,因此已对此答案进行了编辑,以删除对\n\r的引用

编辑:

根据您的评论,尝试

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