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

news2024/11/26 8:41:17

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.coloradmin.cn/o/875745.html

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

相关文章

驱动阿托斯DLHZO-T伺服比例阀放大器定制

DLHZO-T型伺服比例换向阀&#xff0c;直动式&#xff0c;带LVDT位置传感器和阀芯零遮盖&#xff0c;可应用于各种位置闭环控制实现最佳的性能。 比例阀和模块式数字放大器配合使用。 LVDT传感器和阀套结构可确保非常高的调节精度和响应灵敏度。 失电保护位可实现在电源中断的…

一文读懂3D开发工具HOOPS SDK

近年来&#xff0c;随着对定制软件开发需求的增加&#xff0c;我们也目睹了新的软件开发工具和技术的加入。 大部分企业在移动和Web应用程序开发上投入了大量的精力&#xff0c;这表明市场对技术软件解决方案的需求在增加。然而&#xff0c;在开发软件的过程中&#xff0c;是可…

基于 SIFT 和 RANSAC 算法对高分辨率图像进行图像伪造检测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

kafka基本概念及操作

kafka介绍 Kafka是最初由Linkedin公司开发&#xff0c;是一个分布式、支持分区的&#xff08;partition&#xff09;、多副本的 &#xff08;replica&#xff09;&#xff0c;基于zookeeper协调的分布式消息系统&#xff0c;它的最大的特性就是可以实时的处理大量数据以满足各…

技术解析丨主轴自动换刀系统是如何工作的?有哪些优点?

一、主轴气动自动换刀系统原理 1.当加工过程中需要更换主轴上的刀具时&#xff0c;操作人员通过控制系统发出换刀指令。 2.控制系统根据指令向气动系统发送动作信号&#xff0c;驱动气动马达带动换刀机构运动。 3.换刀机构中的刀具夹持器将现有刀具从主轴上取下&#xff0c;…

FreeRTOS(事件组)

资料来源于硬件家园&#xff1a;资料汇总 - FreeRTOS实时操作系统课程(多任务管理) 目录 一、事件的概念与应用 1、事件的概念 2、事件的应用 二、事件的运作机制 1、FreeRTOS中事件组的句柄 2、FreeRTOS 任务间事件标志组的实现 3、FreeRTOS 中断方式事件标志组的实现…

vue2学习:reduce方法和computed计算属性用法

reduce reduce可以遍历集合并将集合所有的值汇总为一个。 第一个参数是一个回调函数&#xff0c;函数第一个参数是汇总起来的最终值&#xff0c;默认是集合的第一项&#xff0c;函数第二个参数是集合遍历出来的集合元素&#xff1b; 第二个参数可以指定回调函数中第一个参数汇…

62、华为昇腾开发板Atlas 200I DK A2配置mmpose的hrnet模型推理python/c++

基本思想&#xff1a;适配mmpose模型&#xff0c;记录一下流水帐&#xff0c;环境配置和模型来自&#xff0c;请查看参考链接。 链接: https://pan.baidu.com/s/1IkiwuZf1anyKX1sZkYmD1g?pwdi51s 提取码: i51s 一、转模型 (base) rootdavinci-mini:~/sxj731533730# atc --mo…

优测云服务平台|【压力测试功能升级】轻松完成压测任务

一、本次升级主要功能如下&#xff1a; 1.多份报告对比查看测试结果 2.报告新增多种下载格式 Word格式Excel格式 3.新增多种编排复杂场景的控制器 漏斗控制器并行控制器事务控制器仅一次控制器分组控制器集合点 4.新增概览页面&#xff0c;包含多种统计维度 二、报告对比…

智慧工地源码,互联网+建筑工地,基于微服务+Java+Spring Cloud +Vue+UniApp开发

基于微服务JavaSpring Cloud VueUniApp MySql开发的智慧工地云平台源码 智慧工地概念&#xff1a; 智慧工地就是互联网建筑工地&#xff0c;是将互联网的理念和技术引入建筑工地&#xff0c;然后以物联网、移动互联网技术为基础&#xff0c;充分应用BIM、大数据、人工智能、移…

DoorGym:开源的可拓展的开门仿真环境,用于域随机化的强化学习、深度强化学习

0.概述 目的&#xff1a;创建一个可以改变门把手形状、类型、位置、环境颜色、照明条件、机械臂结构的仿真环境&#xff0c;以训练出鲁棒性更高、更能关注到任务本质特征、容易迁移到现实的模型 网址&#xff1a;环境下载&#xff0c; 1.领域随机化DR 假设很难对目标域进…

在Visual Studio上,使用OpenCV实现人脸识别

1. 环境与说明 本文介绍了如何在Visual Studio上&#xff0c;使用OpenCV来实现人脸识别的功能 环境说明 : 操作系统 : windows 10 64位Visual Studio版本 : Visual Studio Community 2022 (社区版)OpenCV版本 : OpenCV-4.8.0 (2023年7月最新版) 实现效果如图所示&#xff0…

SAP SM30 自动带出描述实现

需求&#xff1a; 在SM30中维护销售订单类型的时候&#xff0c;根据维护的销售订单类型自动带出订单类型描述 事务码&#xff1a; SE11 进入表维护生成器中 创建事件 选择【维护事件】: 05 自定义子例程&#xff1a; SET_DESCRIPTION 点击编辑器按钮进行代码编辑 具体代码…

浅学实战:探索PySpark实践,解锁大数据魔法!

文章目录 Spark和PySpark概述1.1 Spark简介1.2 PySpark简介 二 基础准备2.1 PySpark库的安装2.2 构建SparkContext对象2.3 SparkContext和SparkSession2.4 构建SparkSession对象2.5 PySpark的编程模型 三 数据输入3.1 RDD对象3.2 Python数据容器转RDD对象3.3 读取文件转RDD对象…

【力扣每日一题】1572. 矩阵对角线元素的和 8.11打卡

文章目录 题目思路代码 题目 1572. 矩阵对角线元素的和 难度&#xff1a; 简单 描述&#xff1a; 给你一个正方形矩阵 mat&#xff0c;请你返回矩阵对角线元素的和。 请你返回在矩阵主对角线上的元素和副对角线上且不在主对角线上元素的和。 返回合并后的二叉树。 注意…

(leecode)密码检查

有点感觉&#xff0c;试试看~ 先贴解法&#xff0c;再说题目和思路 题解 #include <stdio.h> #include <string.h> #include <ctype.h>int main() {int N 0;scanf("%d",&N);getchar();while(N--) {char str[101] {0};scanf("%s&…

Android性能优化——内存优化

一、内存问题 内存抖动&#xff0c;锯齿状&#xff0c;GC导致卡顿内存泄漏&#xff0c;可用内存减少&#xff0c;频繁GC 内存溢出&#xff0c;OOM&#xff0c;程序异常 二、内存分析工具 Memory ProfilerMemory Analyzer LeakCanary Memory Profiler 实时图表展示应用内存使…

10分钟极速入门dash应用开发

大家好我是费老师&#xff0c;几天前我发布了由我开源维护的dash通用网页组件库fac的0.2.x全新版本&#xff0c;为大家介绍了其具有的诸多实用特性功能&#xff0c;也吸引了很多对基于dash的Python全栈应用开发感兴趣的朋友&#xff0c;为了方便更多对dash应用开发不甚了解的朋…

stable diffusion 电商应用技术(插图部分重绘)

1.下载inpaint anything插件 2.下载识别模型 3.使用全景分割 4.分割模版,获取蒙版 5.发送到图生图重绘制 6.固定姿势 7.clip反推提示词 8.生成重绘衣服

msvcr110.dll缺失的解决方法分享,多种方法教你修复msvcr110.dll

我们在使用电脑的时候会遇到各种各样的问题&#xff0c;特别是dll文件缺失的这一块更是经常可以看到的&#xff0c;如你在使用电脑的时候&#xff0c;突然弹出一个电脑缺失了msvcr110.dll文件&#xff0c;一些程序无法运行&#xff0c;这时候我们就要针对于这方面来进行一些解决…