AT命令是一种通信协议,用于控制和配置各种设备,尤其在通信领域中具有重要性。它的名称来源于"ATtention"(注意),因为命令通常以"AT"开头。AT命令最早被用于调制解调器,用于与计算机通信并进行设置。随着技术的进步,AT命令逐渐在移动通信、嵌入式设备等领域得到广泛应用。本文将深入探讨AT命令的概念和应用,以及它在通信领域中的重要性。
AT(Attention)指令是由 Dennis Hayes 发明的,所以也称为 Hayes command set。
AT命令作为一种通信协议,源于调制解调器的早期发展。在通信领域的发展过程中,AT命令逐渐演化成一种通用的控制方式,用于控制和配置各种设备。让我们回顾一下AT命令的历史和来源,以及它最早应用于调制解调器控制的情况。
2.1 调制解调器时代
AT命令最早的应用场景是在调制解调器(Modem)中。调制解调器是一种用于将数字信号转换成模拟信号(调制)和将模拟信号转换成数字信号(解调)的设备。在调制解调器的早期,通过串口连接到计算机的方式,用户可以使用终端软件与调制解调器进行交互。
2.2 AT命令的引入
AT命令最初是由调制解调器制造商引入,作为一种交互方式,允许用户通过终端软件向调制解调器发送各种指令。这些指令用于执行各种操作,如拨号、连接到远程服务器、查询设备状态等。由于命令通常以"AT"开头,因此被称为AT命令,其中"AT"表示"ATtention"(注意)。
2.3 演进和应用扩展
随着通信技术的发展,AT命令的应用范围逐渐扩展到不仅限于调制解调器,还包括各种通信设备和嵌入式系统。它逐渐成为控制和配置设备的一种通用方式。AT命令被用于调制解调器、移动通信设备、蓝牙模块、GPS模块等各种设备中。
2.4 AT命令的历史价值
尽管通信技术已经取得了巨大的进步,但AT命令作为一种简单而有效的控制协议仍然具有历史价值。它的应用已经超越了调制解调器的范畴,成为通信领域中不可或缺的一部分。同时,AT命令的历史也让我们了解到通信技术的发展历程和变革。
通过了解AT命令的起源,我们可以更好地理解它在通信领域中的重要性和应用价值,以及它如何从最早的调制解调器时代演化成今天的通信设备控制方式。
2.4 AT命令应用框图
通常,我们把 AT 模块端的解析处理程序称为 AT Server,而将控制 AT 模块的处理器端的解析处理程序称为 AT Client。由 AT Client 发起命令请求,AT Server 回应处理结果。另外 AT Server 通过 URC(Unsolicited result code) 来主动给 AT Client 发送数据。
2.5 AT指令标准
http://www.arib.or.jp/english/html/overview/doc/STD-T63v9_30/5_Appendix/Rel10/27/27007-a70.pdf
AT命令作为一种通信协议,具有统一的基本结构,为设备控制和配置提供了一种简单而有效的方式。本节将深入探讨标准AT命令的基本结构,以及AT指令、参数和结果的组成。
3.1 AT指令的基本格式
AT命令的基本格式通常以"AT"开头,后面紧跟具体的命令内容。例如,拨打电话的AT命令为"ATD",发送短信的AT命令为"AT+CMGS"。这个"AT"前缀告诉设备要执行一个命令。
由于每个厂家的模块不一样,实现的功能不一样,导致每个 AT 模块厂家有自己的一套私有的 AT 命令集,每一个 AT 模块厂家实现的 AT 指令集解析器也不一样(解析器实现的 AT 标准功能也参差不齐)。
3.2 参数的使用
AT命令可以包含参数,这些参数用于指定要执行的操作或配置。参数的具体格式和含义取决于每个命令。例如,发送短信的AT命令"AT+CMGS"需要指定短信内容和接收方号码作为参数。
参数可以是数字、字符串、甚至是特殊字符,具体取决于命令的需求。例如,以下是一些AT命令的示例,其中包含了不同类型的参数:
3.3 结果的反馈
执行AT命令后,设备会返回一个结果,反映了命令的执行状态和相关信息。这些结果通常用于判断操作是否成功,或者获取进一步的细节。例如,执行成功的AT命令可能返回"OK",表明操作已成功完成。如果命令执行失败,可能会返回"ERROR"或其他错误信息。
3.4 示例代码
以下是一个简单的示例代码,使用Kotlin模拟发送AT命令并获取结果的过程:
fun sendATCommand(command: String): String {
// 此处为模拟,实际应用中需将AT命令发送至实际设备并获取结果
val simulatedResponse = if (command == "ATD1234567890;") {
"Dialing..."
} else {
"Unknown command"
}
return simulatedResponse
}
fun main() {
val atCommand = "ATD1234567890;"
val response = sendATCommand(atCommand)
println("Response: $response")
}
上述示例代码模拟了一个拨打电话的AT命令,并根据命令返回相应的模拟结果。实际应用中,开发者需要将AT命令发送至实际设备,并从设备获取真实的结果。
通过理解AT命令的基本结构,开发者可以更好地与通信设备进行交互和控制,实现各种功能和应用。
AT命令作为一种通用的控制协议,在多个领域中都有广泛的应用。本节将深入探讨AT命令在不同领域的应用,包括调制解调器、移动通信、嵌入式设备等,并特别强调了AT命令在移动通信中的重要性。
4.1 调制解调器
AT命令最早是用于调制解调器的控制和配置。调制解调器是将数字信号转换为模拟信号,以实现计算机之间的数据通信。在调制解调器领域,AT命令用于控制拨号、挂断、设置连接速率等操作。
4.2 移动通信
在移动通信领域,AT命令的应用尤为广泛。移动设备使用AT命令进行各种操作,如发送短信、拨打电话、查询网络状态等。一些常见的移动通信AT命令包括:
4.3 嵌入式设备
在嵌入式设备领域,AT命令被用于控制各种硬件模块和外设。例如,GPS模块、蓝牙模块等嵌入式设备可以通过AT命令进行配置和控制。
4.4 示例代码
以下是一个示例代码,演示如何使用Kotlin模拟发送AT命令并获取结果,模拟了发送短信的操作:
fun sendATCommand(command: String): String {
// 此处为模拟,实际应用中需将AT命令发送至实际设备并获取结果
val simulatedResponse = if (command.startsWith("AT+CMGS=")) {
"Message sent successfully!"
} else {
"Unknown command"
}
return simulatedResponse
}
fun main() {
val atCommand = "AT+CMGS=\"1234567890\",Hello"
val response = sendATCommand(atCommand)
println("Response: $response")
}
上述示例代码模拟了一个发送短信的AT命令,并根据命令返回相应的模拟结果。实际应用中,开发者需要将AT命令发送至实际移动设备,并从设备获取真实的结果。
总之,AT命令在不同领域的应用使其成为通信和控制的重要工具。通过理解和掌握不同领域中的AT命令,开发者可以更好地利用这一协议实现各种功能和应用。
5.0 AT命令分类
AT命令分为4类:
AT+=?
AT+?
AT+=<...>
AT+
AT命令是通信领域中的重要工具,用于配置和控制各种设备和模块。本节将介绍一些常见的AT命令示例,以及每个命令的简要解释和示例用法。
5.1 AT+CGSN(获取IMEI)
AT+CGSN
命令用于获取移动设备的IMEI(国际移动设备标识)号码,IMEI是设备的唯一标识符。
示例用法:
AT+CGSN
响应:
123456789012345
5.2 AT+CMGS(发送短信)
AT+CMGS
命令用于发送短信到指定号码。
示例用法:
AT+CMGS="1234567890"
> Hello, this is a test message.
Ctrl+Z
响应:
+CMGS: 123
OK
5.3 AT+CREG?(查询网络状态)
AT+CREG?
命令用于查询设备是否已注册到移动网络。
示例用法:
AT+CREG?
响应:
+CREG: 0,1
OK
5.4 AT+DIAL(拨号)
ATD
命令用于拨打电话到指定号码。
示例用法:
ATD"1234567890";
(设备将尝试拨打号码为"1234567890"的电话)
5.5 AT+CPIN?(查询SIM卡状态)
AT+CPIN?
命令用于查询SIM卡的状态。
示例用法:
AT+CPIN?
响应:
+CPIN: READY
OK
5.6 示例代码
以下是一个使用Kotlin模拟发送AT命令并获取响应的示例代码:
fun sendATCommand(command: String): String {
// 此处为模拟,实际应用中需将AT命令发送至实际设备并获取结果
val simulatedResponses = mapOf(
"AT+CGSN" to "123456789012345",
"AT+CMGS" to "+CMGS: 123\nOK",
"AT+CREG?" to "+CREG: 0,1\nOK",
"AT+CPIN?" to "+CPIN: READY\nOK"
)
return simulatedResponses[command] ?: "Unknown command"
}
fun main() {
val atCommands = listOf("AT+CGSN", "AT+CMGS", "AT+CREG?", "AT+CPIN?")
for (command in atCommands) {
val response = sendATCommand(command)
println("Command: $command\nResponse: $response\n")
}
}
上述示例代码模拟了发送不同的AT命令,并根据命令返回相应的模拟结果。在实际应用中,开发者需要将AT命令发送至实际设备并获取真实的响应。
总之,这些常见的AT命令示例涵盖了移动通信和设备控制的多个方面,开发者可以根据需要使用这些命令来实现各种功能。
AT命令是通过串行通信接口向设备发送的一系列字符,用于配置和控制设备的各种功能。本节将解释设备如何执行AT命令并产生响应,并介绍一些常见的响应码的含义。
6.1 AT命令的执行过程
当一个AT命令被发送至设备时,设备会根据命令进行相应的操作。一般情况下,设备会对命令进行解析和执行,并根据执行结果生成一个响应,然后通过通信接口将响应返回给发送方。
6.2 AT命令的响应
AT命令的响应通常以字符形式返回,常见的响应码有:
OK
: 表示命令执行成功。ERROR
: 表示命令执行失败或命令格式错误。+CME ERROR:
: 用于表示扩展的错误情况,后跟错误代码。
+CMS ERROR:
: 用于表示短信相关的错误情况,后跟错误代码。
6.3 示例代码
以下是一个使用Kotlin模拟发送AT命令并获取响应的示例代码:
fun sendATCommand(command: String): String {
// 此处为模拟,实际应用中需将AT命令发送至实际设备并获取结果
val simulatedResponses = mapOf(
"AT+CGSN" to "123456789012345",
"AT+CMGS" to "+CMGS: 123\nOK",
"AT+CREG?" to "+CREG: 0,1\nOK",
"AT+CPIN?" to "+CPIN: READY\nOK",
"AT+DIAL" to "Dialing...",
// 其他AT命令及响应
)
return simulatedResponses[command] ?: "Unknown command"
}
fun main() {
val atCommands = listOf("AT+CGSN", "AT+CMGS", "AT+CREG?", "AT+CPIN?", "AT+DIAL")
for (command in atCommands) {
val response = sendATCommand(command)
println("Command: $command\nResponse: $response\n")
}
}
上述示例代码模拟了发送不同的AT命令并获取相应的模拟结果,包括常见的OK
和ERROR
响应。在实际应用中,开发者需要将AT命令发送至实际设备并获取真实的响应。
总之,AT命令的执行过程涉及设备解析和执行命令,并产生相应的响应。开发者需要根据设备的文档和规范来理解不同命令的执行方式和响应码的含义。
AT命令的标准覆盖了许多基本和常见的功能,但不同厂商可能会根据自己的需求扩展和自定义AT命令,以满足特定的应用场景和设备功能。本节将讨论厂商自定义的AT命令和扩展,并介绍AT+命令和AT%命令之间的区别。
7.1 厂商自定义的AT命令
除了标准的AT命令集,不同厂商可能会引入自定义的AT命令来支持特定的功能。这些自定义的AT命令可以用于设备的特定配置、控制和操作。例如,一个嵌入式设备制造商可能会引入用于控制设备唯一功能的AT命令。
7.2 AT+命令和AT%命令的区别
AT命令通常以AT
作为前缀,但在某些情况下,厂商可能会使用AT+
或AT%
来区分不同类型的命令。这两种前缀的命令可能有不同的用途和语法,需要根据设备的文档来理解其具体含义。
一般来说,AT+
命令通常是标准化的命令,符合AT命令的标准规范,而AT%
命令可能是厂商自定义的命令。开发者在使用这些命令时需要仔细查阅设备的文档,了解每个命令的用途和语法。
7.3 示例代码
以下是一个示例代码,演示如何发送自定义的AT命令以及区分AT+
和AT%
命令:
fun sendCustomATCommand(command: String): String {
// 此处为模拟,实际应用中需将AT命令发送至实际设备并获取结果
val simulatedCustomResponses = mapOf(
"AT+CUSTOM" to "Custom command executed",
"AT%ANOTHER" to "Another custom command executed"
)
return simulatedCustomResponses[command] ?: "Unknown command"
}
fun main() {
val customCommands = listOf("AT+CUSTOM", "AT%ANOTHER")
for (command in customCommands) {
val response = sendCustomATCommand(command)
println("Command: $command\nResponse: $response\n")
}
}
上述示例代码演示了发送自定义的AT命令,模拟了对AT+CUSTOM
和AT%ANOTHER
命令的响应。在实际应用中,开发者需要根据设备的文档和规范,了解自定义命令的含义和用法。
总之,厂商自定义的AT命令和扩展可以帮助设备实现特定的功能和操作,而AT+
和AT%
命令的区别需要根据设备文档来理解。开发者在使用这些命令时应遵循设备的规范和要求。
AT命令在移动通信领域扮演着重要的角色,它被广泛应用于呼叫控制、短信发送、网络配置等方面。在这一节中,我们将详细介绍AT命令在移动通信中的应用,并提供示例代码来演示如何使用AT命令进行移动通信操作。
8.1 呼叫控制
AT命令在呼叫控制方面发挥着重要作用。通过使用不同的AT命令,设备可以执行拨号、接听、挂断等呼叫控制操作。以下是一些常见的呼叫控制AT命令示例:
ATD;
: 拨打指定的电话号码。ATA
: 接听当前呼叫。ATH
: 挂断当前呼叫。8.2 短信发送
AT命令也可以用于短信的发送和管理。开发者可以使用AT命令来编写应用,实现短信的发送、接收和删除等操作。以下是一些常见的短信操作AT命令示例:
AT+CMGS=""
: 发送短信给指定的手机号。AT+CMGR=
: 读取指定索引的收件箱中的短信。AT+CMGD=
: 删除指定索引的短信。8.3 网络配置
AT命令还可以用于配置和管理设备的网络连接,例如配置无线网络、查询网络状态等。以下是一些常见的网络配置AT命令示例:
AT+COPS=?
: 查询可用的运营商列表。AT+CGATT=1
: 打开GPRS附着,用于数据连接。AT+CGACT=1,1
: 激活PDP上下文以建立数据连接。8.4 示例代码
以下是一个简单的示例代码,演示如何使用AT命令发送短信和查询网络状态:
fun sendSMSUsingATCommand(number: String, message: String) {
// 此处为模拟,实际应用中需将AT命令发送至实际设备并获取结果
println("Sending SMS to $number: $message")
}
fun checkNetworkStatusUsingATCommand() {
// 此处为模拟,实际应用中需将AT命令发送至实际设备并获取结果
println("Checking network status...")
val networkStatus = "Connected"
println("Network status: $networkStatus")
}
fun main() {
val phoneNumber = "1234567890"
val messageText = "Hello from AT command!"
sendSMSUsingATCommand(phoneNumber, messageText)
checkNetworkStatusUsingATCommand()
}
上述示例代码演示了如何使用模拟的AT命令函数来发送短信和查询网络状态。实际应用中,开发者需要将AT命令发送至实际设备并根据响应处理结果。
总之,AT命令在移动通信中有着广泛的应用,涵盖了呼叫控制、短信发送、网络配置等方面。开发者可以根据设备的文档和规范,使用适当的AT命令来实现各种移动通信操作。
AT命令在移动通信中的应用非常广泛。例如,通过AT命令可以发送短信、呼叫指定号码、查询网络状态等。以下是一个使用AT命令发送短信的Kotlin示例代码:
fun sendSMS(message: String, phoneNumber: String) {
val command = "AT+CMGS=\"$phoneNumber
\""
// 发送AT命令到设备
sendCommandToDevice(command)
// 等待设备响应
val response = waitForResponse()
if (response == ">")
sendTextMessage(message)
}
在使用AT命令时,安全性和注意事项是非常重要的考虑因素。本节将强调在使用AT命令时需要注意的安全性问题,以及提供一些使用AT命令的注意事项,以避免误操作和不良影响。
9.1 安全性问题
使用AT命令时需要特别注意以下安全性问题:
防止滥用:AT命令具有强大的控制能力,可以对设备进行各种操作。为了防止滥用,开发者应该仅允许有权的应用或用户执行AT命令。
恶意操作:不当的AT命令操作可能导致设备故障、数据泄露等问题。开发者应该限制对AT命令的访问,并避免恶意操作。
权限控制:在移动通信设备中,一些AT命令可能需要特定的权限才能执行。开发者应该根据需要设置适当的权限控制,确保只有授权用户可以执行敏感的AT命令。
9.2 注意事项
在使用AT命令时,开发者应该注意以下事项:
文档和规范:在使用特定设备的AT命令时,务必仔细阅读相关文档和规范。了解每个AT命令的用途、参数和响应是十分重要的。
备份和恢复:在执行可能影响设备配置或数据的AT命令之前,务必进行备份。这样可以在出现问题时进行恢复操作。
误操作风险:由于AT命令可以直接操作设备,误操作可能导致不良影响。开发者应该小心操作,确认每个AT命令的用途和参数。
测试和验证:在实际应用中使用AT命令之前,建议在测试环境中进行验证。确保AT命令的操作符合预期并不会引发问题。
9.3 示例代码
以下是一个示例代码,演示如何通过权限控制来限制AT命令的执行:
fun executeATCommand(command: String) {
// 此处为模拟,实际应用中需根据权限判断是否执行AT命令
val isAuthorized = checkAuthorization()
if (isAuthorized) {
// 执行AT命令操作
println("Executing AT command: $command")
} else {
println("Unauthorized to execute AT command: $command")
}
}
fun checkAuthorization(): Boolean {
// 模拟权限检查,实际应用中根据用户或应用权限来判断
return true
}
fun main() {
val atCommand = "AT+CMGS=\"1234567890\", \"Hello from AT command!\""
executeATCommand(atCommand)
}
上述示例代码演示了如何通过权限控制函数 checkAuthorization
来限制对AT命令的执行。实际应用中,开发者可以根据用户或应用的权限来判断是否允许执行特定的AT命令。
总之,在使用AT命令时,安全性和注意事项都是需要特别关注的方面。通过合理的权限控制、文档阅读和验证,开发者可以确保正确使用AT命令,避免不必要的问题和风险。
随着通信技术的不断进步和新兴领域的崛起,AT命令也在不断演化和发展。本节将探讨AT命令在新技术和通信标准中的未来发展,特别是在5G、物联网等领域的应用。
10.1 AT命令在5G中的应用
5G技术的到来为通信领域带来了革命性的变化,AT命令也在适应新的5G网络和功能。一些可能的未来发展包括:
更多网络控制:5G网络的复杂性可能导致AT命令需要支持更多的网络控制功能,如对网络切换、频谱分配等的控制。
低延迟通信:5G的低延迟通信特性可能会要求AT命令在实时通信和控制方面提供更高效的支持。
多媒体和AR/VR:随着5G网络支持更多的多媒体和增强现实/虚拟现实应用,AT命令可能需要扩展以支持这些应用的控制和通信需求。
10.2 AT命令在物联网中的应用
物联网(IoT)领域的迅速发展也对AT命令提出了新的挑战和机遇:
设备连接:AT命令在物联网中的应用范围可能会扩展到更多类型的设备,包括传感器、智能家居设备等,以支持设备之间的连接和控制。
能耗优化:物联网设备通常需要在有限的电池寿命下运行,因此AT命令可能需要优化以减少能耗,延长设备的使用寿命。
安全性:物联网中的设备安全性至关重要,AT命令可能需要加强安全性功能,以确保设备和数据的安全。
10.3 示例代码
以下是一个示例代码,演示了如何使用AT命令来控制物联网设备的连接和通信:
class IoTDevice(private val port: SerialPort) {
fun sendATCommand(command: String) {
val response = executeCommand(command)
println("AT Command: $command")
println("Response: $response")
}
private fun executeCommand(command: String): String {
// 此处为模拟,实际应用中需通过串口通信发送AT命令并接收响应
return "OK"
}
}
fun main() {
val serialPort = SerialPort("COM1")
val iotDevice = IoTDevice(serialPort)
// 控制物联网设备发送AT命令
iotDevice.sendATCommand("AT+CONNECT")
}
上述示例代码演示了一个简单的物联网设备类 IoTDevice
,它通过串口与主机通信。通过调用 sendATCommand
方法,可以向设备发送AT命令并获取响应。在实际应用中,开发者需要根据设备的通信方式和协议来实现相应的AT命令交互。
总之,AT命令作为通信领域的基础工具,随着技术的进步和应用领域的扩展,也在不断演进和应用。在未来,AT命令可能会在5G、物联网等领域发挥更多的作用,为设备连接、控制和通信提供更强大的支持。
GWN可以通过外挂USB dongle使用3G/GSM Modem拨号上网、发送短信或者发送邮件。
这种方法相当简单,只使用串行/dev/ttyUSB0
端口和"AT"命令来发送短信。
几乎任何基于OpenWrt版本都可以使用,并且任何支持USB的OpenWrt设备都可以使用。
如果您的设备类似于WL-520Gu,并且具有较小的内置闪存,则需要使用以下模块构建自己的OpenWrt固件映像(通常通过opkg安装它们会因为内存不足而失败):
kmod-usb2 kmod-usb-ohci kmod-usb-serial kmod-usb-serial-option usbutils usb-modeswitch kmod-usb-storage kmod-scsi-core kmod-scsi-cdrom kmod-scsi-generic picocom
当我插入USB调制解调器时,它检测到scsi驱动器和4个tty设备–/dev/ttyUSB0
到ttyUSB3
。
我使用picocom
连接到调制解调器:picocom -b 9600 -f n -p n -d 8 -r /dev/ttyUSB0
键入"AT"后,得到响应:“OK”
然后使用以下命令发送短信:
AT+CMGF=1 [set pdu mode to text]
AT+CMGS="+12345678900" [use a valid cell phone number]
Type some message<Ctrl-z> [type a message terminated with <Ctrl-z>]
过了一会儿,我得到了响应:“+CMGS: 18”
使用该设备只需以上操作。
对于ZTE新款dongle来说,情况会更复杂一些。ttyUSB设备没有被检测到。这是因为许多(大多数?)手机调制解调器会以scsi设备启动,在Windows中,scsi设备会自动加载驱动程序并切换模式以启用调制解调器。但在Linux中,您必须执行模式切换。有一个专门用于模式切换的程序,即usb-modeswitch,还有usb-modeswitch-data。在GWN上,我需要使用lsusb
(来自usbutils)获取供应商号和产品ID。然后执行usb-modeswitch -v nnnn -p nnnn
。执行此操作后,dmesg将显示ttyUSB
设备0-3,然后我就可以像上面那样进行操作。
对于其他设备,modeswitch过程可能更复杂。各种网站都有解释。
MPR-A8–无需modeswitch,在MPR-A8上,使用自行编译的trunk版本,在串行控制台上观察,先识别了scsi驱动器,然后大约30秒后,识别了4个ttyUSB设备。我再次登录/dev/ttyUSB0(使用microcom),并使用上面展示的命令发送了短信消息。
发送邮件
对于我的供应商T-Mobile,您还可以使用以下命令发送带有地址号码"500"的电子邮件(在"AT+CMGF=1"之后):
AT+CMGS="500"
[email protected]/Subject2/sending text.<Ctrl+z>
主题位于“/”或“#”之间。
AT命令作为通信领域中的重要工具,在多个领域和技术中发挥着关键的作用。从调制解调器到移动通信,再到物联网和嵌入式设备,AT命令为通信设备的控制、配置和管理提供了便捷的途径。本文对AT命令的概念、起源、基本结构、应用领域、执行与响应、扩展以及未来发展进行了深入的探讨和介绍。
通过了解AT命令的基本原理和用法,开发者可以在实际应用中灵活地使用AT命令,从而实现各种通信需求。不论是通过标准的AT命令还是厂商自定义的扩展命令,都能够为开发者提供强大的工具来控制和管理设备。当然,在使用AT命令时也需要注意安全性和注意事项,以确保设备和通信的稳定和安全。
通过参考以上资料,读者可以进一步深入了解AT命令在通信领域的应用和技术细节。无论是开发调制解调器、移动通信设备还是物联网设备,AT命令都是不可或缺的工具之一。希望本文能够为读者提供关于AT命令的全面了解,并在实际开发中得到有益的应用。