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






4.75/5 (4投票s)
本文将提供一些背景知识,以帮助您了解如何开始为 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 实例。这两个库中真正重要的部分是send 和receive 命令。
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 相关的所有文档都可以在 此处 找到。