65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 Telit GSM 模块和 Python 进行蜂窝开发

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.75/5 (4投票s)

2010年9月20日

CPOL

8分钟阅读

viewsIcon

89777

本文将提供一些背景知识,以帮助您了解如何开始为 Telit 系列设备开发 Python 脚本。

使用 Telit GSM 模块和 Python 进行蜂窝开发

引言

Telit 生产一系列蜂窝模块,可用于为任何项目添加高级通信功能。一些单元配备了 Python 解释器,可以访问高级功能,甚至可以控制外部设备。我不是 Python 专家,但真正的挑战不是学习 Python。而是理解运行模块所需的 AT 命令。本文将提供一些背景知识,以帮助您了解如何开始为该系列设备开发 Python 脚本。

背景

我最近完成了一个涉及远程 FM 广播发射器站点的设备监控和控制项目。我们使用 Janus Remote Communications 的 Terminus 设备作为该项目的基础。我使用的具体产品可在 此处 找到。

其他公司,如 Sparkfun,提供扩展板选项,但我使用的 Terminus 终端设备可以作为一个一体化封闭系统运行。也提供支持 GPS 的单元。现在有些单元具有 Python 功能,所以在订购时要小心。此外,这些是手机,因此需要一张有效的 SIM 卡才能使用蜂窝功能。

初始设置

该模块需要使用 Telit Python 包。编辑器不是最好的,但会提供有限且有 bug 的调试能力。我使用了自己支持 Python 的编辑器,然后用 Telit Python 版本进行编译/下载代码。安装完成后,您需要做的就是右键单击文件并编译它,然后连接到单元,右键单击.pyo文件并下载。该单元可以使用.py文件,但更复杂的脚本在不将其编译为 .pyo 文件的情况下往往会变慢。

要激活脚本,我们使用 AT 命令

AT#ESCRIPT[="script_name]

示例

at#escript?
#ESCRIPT: "test.pyo"
OK

设置 ESCRIPT 可确定启动时使用的脚本。另一个命令用于确定它是否启动以及等待多长时间。

AT#STARTMODESCR=<start mode>, [script name]
at#startmodescr?
#STARTMODESCR: 1,10
OK

此命令有两个参数:模式和超时。

模式有三种选项

  • 选项 0:启动时无脚本
  • 选项 1:脚本将运行,除非用户在启动时发出 AT 命令
  • 选项 2:脚本将在超时后无论如何都运行。

选项 2 很危险,除非您可以在设备上访问多个串行端口。但是,可以通过稍后将介绍的 CMUX 函数来克服这一点。

超时以秒为单位。应注意,设备启动需要大约 5 秒,然后计时器开始,因此设置为 10 秒将导致脚本执行前的启动时间约为 15 秒。

Telit 有大量的文档,但组织不佳,有时难以理解。本文将涵盖大多数 Python 特定功能以及调试,但未来的文章可能会更深入地探讨如何使用模块本身执行更多功能,例如发送 SMS 或电子邮件。

CMUX

CMUX 有 bug 且难以使用,但一旦您使用成功,它将是救星,并使程序开发变得更容易。

CMUX 是模块能够将多个功能多路复用到一个串行端口的能力。对于我的项目,我使用 CMUX 来监视 Python 打印语句,并通过一个名为 serialmon 的程序向外部设备发送串行命令。它还允许您访问第二个 AT 接口,以便在脚本运行时发出命令。

我将解释如何设置它,然后告诉您我如何解决它的一些棘手问题。

需要两个命令

AT+CMUX
AT#CMUXSCR

AT+CMUX 有两个参数,但每个参数只有一个选项。只需使用 AT+CMUX? 命令确认它设置为 0,0。

AT+CMUXSCR 控制速度并激活 CMUX 协议。要以 115200 波特率激活接口,请使用以下命令

AT#CMUXSCR=1,115200

现在是复杂的部分。您需要 Telit 的基于 PC 的软件。可以 此处 下载。

在主程序的设置选项中配置软件

确保虚拟端口与您计算机上的实际端口没有冲突。主端口是您将用于与模块通信的实际连接。

我使用 Round Solutions 为 Telit 模块制作的终端程序。可以 此处 找到。

它具有许多针对模块的特定快捷方式和一个日志记录功能。任何终端程序都可以正常工作。

现在是困难的部分。连接到运行 Python 代码的设备时,您需要给它启动和开始运行的时间。在我的情况下,这需要大约 15 秒。我设置了一个计时器,当我打开设备电源并等待至少 15 秒后,就可以轻松连接。使用您的终端程序以及 Telit Serial Port Mux,您可以打开到相应虚拟端口的连接。需要注意的是,Python 调试器位于虚拟端口 #4 上,而第一个 AT 实例默认位于端口 #1 上。

在脚本启动后连接到虚拟端口 #4 将激活mux,系统托盘中的图标将变为蓝色。现在您应该可以看到脚本中执行的任何打印语句。在关闭设备电源之前,请务必关闭连接,否则您将不得不关闭并重新启动所有程序。mux程序对突然断开连接的支持不是很好。

这是最难弄清楚的部分,可能并不适用于所有人。我之前提到过,但界面有 bug,如果您不需要它,就不要费事,但它有助于在脚本运行时调试它们。

Python

值得注意的是,模块的 Python 端并不直接控制模块;它本质上只是一种自动发送 AT 命令的便捷方式。如果情况允许,您可以使用 PC 或微控制器系统来发送 AT 命令,这样也可以完成,但如果您想要一个独立的系统,Python 是最佳选择。

Telit 有几个定制库,可以使事情变得容易得多

  • MDM
  • MDM2
  • SER
  • SER2
  • GPIO
  • MOD
  • SPI
  • IIC
  • GPS

最常用的库是 MDM 接口。这些用于向模块发送命令以及从模块接收命令。MDM 和 MDM2 使用不同的 AT 实例。设备可以从任一实例进行控制。对于我的项目,通过使用 MDM 直接向 SER 接口发送 Telnet 数据包,同时在 MDM2 接口上读取连接状态,我得以同时处理一些任务。

SER 接口是硬件串行接口。每个接口连接到模块上的一个 UART,根据您的硬件接口,这些可能连接到 USB 端口或串行端口。我使用的接口中,SER1 连接到 RS232 端口,SER2 是 3.3 伏 TTL,在底部的大接头器上可用。AT 命令可以直接发送到 SER,数据可以从 SER 接口路由出去。

GPIO 用于控制模块上有限的 I/O。

MOD 很重要,因为它包含睡眠和看门狗计时器等功能。

SPI、IIC 和 GPS 用于控制各自的功能。对不熟悉的人简单解释一下;SPI 和 IIC 是芯片级通信协议,只有在与其他硬件接口时才有用。

可以通过在脚本开头导入它们来使用任何库。

import MDM
import SER
import GPIO

MDM/MDM2

这些库是相同的,但仅访问不同的 AT 实例。这两个库中真正重要的部分是sendreceive 命令。

MDM.send(string,timeout)

send 命令用于向单元发送 AT 命令,例如。

A = MDM.send(‘AT+CMGR=1\r’,5)

如果成功,它返回 1,如果达到超时,则返回 -1。超时是以 1/10 秒为单位的。因此,该示例将在超时前等待 0.5 秒。

它不会返回 AT 接口返回的内容;要读取此内容,您需要receive 命令

b = MDM.receive(10)

这将在 1.0 秒的超时后将接收缓冲区分配给b。该库还提供支持发送和接收单个字节的函数。Python 部分是容易学习的部分。学习该设备响应的上百个 AT 命令将花费最长的时间。通过 MDM 接口和 SER 接口与硬件交互,您就可以开始项目了。未来的文章将涵盖更具体的功能,例如打开 Telnet 会话或发送 SMS 消息,但目前,这些是为您的下一个项目添加蜂窝功能所需的基础知识。

有关 AT 命令列表以及此处讨论的所有功能的更多详细信息,Telit 网站是一个很好的资源。与我使用的模块 GC864-Quad 相关的所有文档都可以在 此处 找到。

© . All rights reserved.