使用AT命令操作Modem 3G/4G模块

1. 引言

AT命令是一种通信协议,用于控制和配置各种设备,尤其在通信领域中具有重要性。它的名称来源于"ATtention"(注意),因为命令通常以"AT"开头。AT命令最早被用于调制解调器,用于与计算机通信并进行设置。随着技术的进步,AT命令逐渐在移动通信、嵌入式设备等领域得到广泛应用。本文将深入探讨AT命令的概念和应用,以及它在通信领域中的重要性。

2. 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指令标准

  • V.250:该标准于 1995 年建立,1998 年重命名为 V.250
  • ETSI GSM 07.07(3GPP TS 27.007):用于控制 GSM modem 的 AT 指令集GSM 07.07 是基于 V.250 标准的。是目前最新的 AT 标准。

http://www.arib.or.jp/english/html/overview/doc/STD-T63v9_30/5_Appendix/Rel10/27/27007-a70.pdf

3. AT命令的基本结构

AT命令作为一种通信协议,具有统一的基本结构,为设备控制和配置提供了一种简单而有效的方式。本节将深入探讨标准AT命令的基本结构,以及AT指令、参数和结果的组成。
AT request
AT response

3.1 AT指令的基本格式

AT命令的基本格式通常以"AT"开头,后面紧跟具体的命令内容。例如,拨打电话的AT命令为"ATD",发送短信的AT命令为"AT+CMGS"。这个"AT"前缀告诉设备要执行一个命令。
由于每个厂家的模块不一样,实现的功能不一样,导致每个 AT 模块厂家有自己的一套私有的 AT 命令集,每一个 AT 模块厂家实现的 AT 指令集解析器也不一样(解析器实现的 AT 标准功能也参差不齐)。

3.2 参数的使用

AT命令可以包含参数,这些参数用于指定要执行的操作或配置。参数的具体格式和含义取决于每个命令。例如,发送短信的AT命令"AT+CMGS"需要指定短信内容和接收方号码作为参数。

参数可以是数字、字符串、甚至是特殊字符,具体取决于命令的需求。例如,以下是一些AT命令的示例,其中包含了不同类型的参数:

  • “ATD1234567890;”:拨打电话到号码1234567890。
  • “AT+CMGS=“Hello”,123”:发送短信内容为"Hello",接收方号码为123。

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命令的基本结构,开发者可以更好地与通信设备进行交互和控制,实现各种功能和应用。

4. AT命令的应用领域

AT命令作为一种通用的控制协议,在多个领域中都有广泛的应用。本节将深入探讨AT命令在不同领域的应用,包括调制解调器、移动通信、嵌入式设备等,并特别强调了AT命令在移动通信中的重要性。

4.1 调制解调器

AT命令最早是用于调制解调器的控制和配置。调制解调器是将数字信号转换为模拟信号,以实现计算机之间的数据通信。在调制解调器领域,AT命令用于控制拨号、挂断、设置连接速率等操作。

4.2 移动通信

在移动通信领域,AT命令的应用尤为广泛。移动设备使用AT命令进行各种操作,如发送短信、拨打电话、查询网络状态等。一些常见的移动通信AT命令包括:

  • 发送短信:AT+CMGS=“PhoneNumber”,用于发送短信到指定号码。
  • 拨打电话:ATD"PhoneNumber";,用于拨打指定号码的电话。
  • 查询网络状态:AT+CREG?,用于查询设备是否注册到移动网络。

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. 常见的AT命令

5.0 AT命令分类
AT命令分为4类:

  • Test 命令:AT+<x>=?
    测试指令类似于命令行里的 help 指令,用于提供该命令的使用信息,以及命令参数的取值范围。
  • Read 命令:AT+<x>?
    用于查询该指令对应功能的当前值。
  • Set 命令:AT+<x>=<...>
    设置用户指定的参数到对应的功能里。
  • Execute 命令:AT+<x>
    执行相关操作。

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命令示例涵盖了移动通信和设备控制的多个方面,开发者可以根据需要使用这些命令来实现各种功能。

6. AT命令的执行与响应

AT命令是通过串行通信接口向设备发送的一系列字符,用于配置和控制设备的各种功能。本节将解释设备如何执行AT命令并产生响应,并介绍一些常见的响应码的含义。

6.1 AT命令的执行过程

当一个AT命令被发送至设备时,设备会根据命令进行相应的操作。一般情况下,设备会对命令进行解析和执行,并根据执行结果生成一个响应,然后通过通信接口将响应返回给发送方。

6.2 AT命令的响应

AT命令的响应通常以字符形式返回,常见的响应码有:

  • OK: 表示命令执行成功。
  • ERROR: 表示命令执行失败或命令格式错误。
  • +CME ERROR: <code>: 用于表示扩展的错误情况,后跟错误代码。
  • +CMS ERROR: <code>: 用于表示短信相关的错误情况,后跟错误代码。

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命令并获取相应的模拟结果,包括常见的OKERROR响应。在实际应用中,开发者需要将AT命令发送至实际设备并获取真实的响应。

总之,AT命令的执行过程涉及设备解析和执行命令,并产生相应的响应。开发者需要根据设备的文档和规范来理解不同命令的执行方式和响应码的含义。

7. 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+CUSTOMAT%ANOTHER命令的响应。在实际应用中,开发者需要根据设备的文档和规范,了解自定义命令的含义和用法。

总之,厂商自定义的AT命令和扩展可以帮助设备实现特定的功能和操作,而AT+AT%命令的区别需要根据设备文档来理解。开发者在使用这些命令时应遵循设备的规范和要求。

8. AT命令在移动通信中的应用

AT命令在移动通信领域扮演着重要的角色,它被广泛应用于呼叫控制、短信发送、网络配置等方面。在这一节中,我们将详细介绍AT命令在移动通信中的应用,并提供示例代码来演示如何使用AT命令进行移动通信操作。

8.1 呼叫控制

AT命令在呼叫控制方面发挥着重要作用。通过使用不同的AT命令,设备可以执行拨号、接听、挂断等呼叫控制操作。以下是一些常见的呼叫控制AT命令示例:

  • ATD<number>;: 拨打指定的电话号码。
  • ATA: 接听当前呼叫。
  • ATH: 挂断当前呼叫。

8.2 短信发送

AT命令也可以用于短信的发送和管理。开发者可以使用AT命令来编写应用,实现短信的发送、接收和删除等操作。以下是一些常见的短信操作AT命令示例:

  • AT+CMGS="<number>": 发送短信给指定的手机号。
  • AT+CMGR=<index>: 读取指定索引的收件箱中的短信。
  • AT+CMGD=<index>: 删除指定索引的短信。

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)
}

9. AT命令的安全性和注意事项

在使用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命令,避免不必要的问题和风险。

10. 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、物联网等领域发挥更多的作用,为设备连接、控制和通信提供更强大的支持。

11. GWN上AT命令的应用

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/ttyUSB0ttyUSB3

我使用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”

使用该设备只需以上操作。

模式切换(mode switch)

对于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"
myAddress@myProvider.com/Subject2/sending text.<Ctrl+z>

主题位于“/”或“#”之间。

12. 结论

AT命令作为通信领域中的重要工具,在多个领域和技术中发挥着关键的作用。从调制解调器到移动通信,再到物联网和嵌入式设备,AT命令为通信设备的控制、配置和管理提供了便捷的途径。本文对AT命令的概念、起源、基本结构、应用领域、执行与响应、扩展以及未来发展进行了深入的探讨和介绍。

通过了解AT命令的基本原理和用法,开发者可以在实际应用中灵活地使用AT命令,从而实现各种通信需求。不论是通过标准的AT命令还是厂商自定义的扩展命令,都能够为开发者提供强大的工具来控制和管理设备。当然,在使用AT命令时也需要注意安全性和注意事项,以确保设备和通信的稳定和安全。

13. 参考资料

  • AT Command Set for GSM Mobile Equipment
  • AT Commands
  • AT Commands for GSM Modems
  • AT Commands in 3GPP
  • Introduction to AT Commands
  • AT Commands in IoT
  • AT Command Tester
  • AT命令介绍

通过参考以上资料,读者可以进一步深入了解AT命令在通信领域的应用和技术细节。无论是开发调制解调器、移动通信设备还是物联网设备,AT命令都是不可或缺的工具之一。希望本文能够为读者提供关于AT命令的全面了解,并在实际开发中得到有益的应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/36008.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot整合rabbitmq

rabbitmq的七种模式 Hello word 客户端引入依赖 <!--rabbitmq 依赖客户端--><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.8.0</version></dependency> 生产者 imp…

STM32 LoRa源码解读

目录结构&#xff1a; SX1278 |-- include | |-- fifo.h | |-- lora.h | |-- platform.h | |-- radio.h | |-- spi.h | |-- sx1276.h | |-- sx1276Fsk.h | |-- sx1276FskMisc.h | |-- sx1276Hal.h | |-- sx1276LoRa.h | -- sx1276LoRaMisc.h – src |-- fifo.c |-- lora.c |-- …

【解析postman工具的使用---基础篇】

postman前端请求详解 主界面1.常见类型的接口请求1.1 查询参数的接口请求1.1.1 什么是查询参数?1.1.2 postman如何请求 1.2 ❤表单类型的接口请求1.2.1 复习下http请求1.2.2❤ 什么是表单 1.3 上传文件的表单请求1.4❤ json类型的接口请求 2. 响应接口数据分析2.1 postman的响…

什么是DNS欺骗及如何进行DNS欺骗

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、什么是 DNS 欺骗&#xff1f;二、开始1.配置2.Ettercap启动3.操作 总结 前言 我已经离开了一段时间&#xff0c;我现在回来了&#xff0c;我终于在做一个教…

【AI】p54-p58导航网络、蓝图和AI树实现AI随机移动和跟随移动、靠近玩家挥拳、AI跟随样条线移动思路

p54-p58导航网络、蓝图和AI树实现AI随机移动和跟随移动、靠近玩家挥拳、AI跟随样条线移动思路 p54导航网格p55蓝图实现AI随机移动和跟随移动AI Move To&#xff08;AI进行移动&#xff09;Get Random Pointln Navigable Radius&#xff08;获取可导航半径内的随机点&#xff09…

时序预测 | MATLAB实现基于LSTM长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于LSTM长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于LSTM长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍 Matlab实现LSTM长短期记忆神经…

识别和应对内存抖动

关于作者&#xff1a;CSDN内容合伙人、技术专家&#xff0c; 从零开始做日活千万级APP。 专注于分享各领域原创系列文章 &#xff0c;擅长java后端、移动开发、人工智能等&#xff0c;希望大家多多支持。 目录 一、导读二、概览三、案例分析3.1 使用memory-profiler3.2 使用 cp…

磁粉制动器离合器收放卷应用介绍

张力控制系统的开环闭环应用介绍,请查看下面文章链接: PLC张力控制(开环闭环算法分析)_张力控制plc程序实例_RXXW_Dor的博客-CSDN博客里工业控制张力控制无处不在,也衍生出很多张力控制专用控制器,磁粉制动器等,本篇博客主要讨论PLC的张力控制相关应用和算法,关于绕线…

APP外包开发的iOS开发语言

学习iOS开发需要掌握Swift编程语言和相关的开发工具、框架和技术。而学习iOS开发需要时间和耐心&#xff0c;尤其是对于初学者。通过坚持不懈的努力&#xff0c;您可以逐步掌握iOS开发技能&#xff0c;构建出功能丰富、优质的移动应用。今天和大家分享学习iOS开发的一些建议方法…

【数据结构系列】链表

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

解决hbase节点已下线,但在status中显示为dead问题

工作中需要下线4台hbase小节点&#xff0c;下线完成后使用status 命令查看,有一台为dead状态: 使用status detailed 查看&#xff0c;发现“hd-03"这台节点是dead。 检查各节点配置文件无误&#xff0c;并使用 /opt/hbase/bin/hbase-daemon.sh restart master 重启两个…

less基本使用

1 less中的变量 //对值进行声明 link-color: #ccc//定义变量名称 .{sleName} {}bg: background-color; //定义属性名称 .container {{bg}: red; }2 继承&#xff08;复用重复样式&#xff09; //继承必须位于选择器最后 //继承选择器名不能为变量 .a:hover:extend(.b) {}.a {…

浅谈人工智能技术与物联网结合带来的好处

物联网是指通过互联网和各种技术将设备进行连接&#xff0c;实时采集数据、交互信息的网络&#xff0c;对设备实现智能化自动化感知、识别和控制&#xff0c;给人们带来便利。 人工智能是计算机科学的一个分支&#xff0c;旨在研究和开发能够模拟人类智能的技术和方法。人工智能…

后院失火、持续亏损!Mobileye半年报「不回避」竞争压力

"客户在2023年上半年非常谨慎&#xff0c;导致增长率低于正常水平&#xff0c;但我们已经看到下半年回暖趋势&#xff0c;预计下半年交付将比去年同期增长16%&#xff0c;远高于上半年。"这是Mobileye在近日公司半年报发布会上的预判。 公开数据显示&#xff0c;今年…

2023网络安全常用工具汇总(附学习资料+工具安装包)

几十年来&#xff0c;攻击方、白帽和安全从业者的工具不断演进&#xff0c;成为网络安全长河中最具技术特色的灯塔&#xff0c;并在一定程度上左右着网络安全产业发展和演进的方向&#xff0c;成为不可或缺的关键要素之一。 话不多说&#xff0c;网络安全10款常用工具如下 1、…

Opencv4基于C++基础入门笔记:图像 颜色 事件响应 图形 视频 直方图

效果图◕‿◕✌✌✌&#xff1a;opencv人脸识别效果图(请叫我真爱粉) 先看一下效果图勾起你的兴趣&#xff01; 文章目录&#xff1a; 一&#xff1a;环境配置搭建 二&#xff1a;图像 1.图像读取与显示 main.cpp 运行结果 2.图像色彩空间转换 2.1 换色彩 test.h …

感受RFID服装门店系统的魅力

嘿&#xff0c;亲爱的时尚追随者们&#xff01;今天小编要给你们带来一股时尚新风潮&#xff0c;让你们感受一下什么叫做“RFID服装门店系统”&#xff0c;这个超酷的东西&#xff01; 别着急&#xff0c;先别翻白眼&#xff0c;小编来解释一下RFID是什么玩意儿。它是射频识别…

云计算——存储虚拟化功能

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 前期回顾 前言 一.存储虚拟化功能 1.精简磁盘和空间回收 2.快照 &#xff08;1&a…

面试热题(反转字符串中的单词)

给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意&#xff1a;输入字符串 s中可能会存在前导空格、尾随空格…

JVM——栈和堆概述,以及有什么区别?

方法栈 方法栈并不是某一个 JVM 的内存空间&#xff0c;而是我们描述方法被调用过程的一个逻辑概念。 在同一个线程内&#xff0c;T1()调用T2()&#xff1a; T1()先开始&#xff0c;T2()后开始&#xff1b;T2()先结束&#xff0c;T1()后结束。 堆和栈概述 从英文单词角度来…