GSM SM5100B C M E E R R O R:4 错误

2024-01-09

我正在使用 Arduino 来控制 SM5100B GSM 设备,除了当我想在收到另一条短信后发送短信时,一切正常。我明白了,

错误代码:

确定 > + C M G S : 2 5 确定 + C M E E R O R : 4

我处理上述收到的短信的代码:

     #include <SoftwareSerial.h>  //Include the NewSoftSerial library to send serial commands to the cellular module. 
        char inchar;                //Will hold the incoming character from the Serial Port. 
        SoftwareSerial cell(2,3); 
        char mobilenumber[] = "0597010129";
        void setup() { 
        //GSM
        Serial.begin(9600); // opens serial port, sets data rate to 9600 bps
        Serial.println("Initialize GSM module serial port for communication.");                       
        cell.begin(9600); 
        delay(35000); // give time for GSM module to register on network etc. 
        Serial.println("delay off");
        cell.println("AT+CMGF=1"); // set SMS mode to text 
        delay(200); 
        cell.println("AT+CNMI=3,3,0,0"); // set module to send SMS data to serial out upon receipt 
        delay(200); 
        } 



        void loop() {   

         if(cell.available() >0)//If a character comes in, from the cellular module
         { 
         inchar=cell.read(); 
         Serial.println(inchar); 
         if (inchar=='#'){ // OK - the start of our command 

           delay(10); 
           inchar=cell.read();
           Serial.println(inchar);  

             if (inchar=='a'){ 

               delay(10); 
               Serial.println("The folowing SMS : \n");
               inchar=cell.read();
               Serial.println(inchar); 

               if (inchar=='0'){ //sequance = #a0

                 Serial.println("#a0 was received"); 

             }
             else if (inchar=='1'){//sequance = #a1

                Serial.println("#a1 was received ");
                sendSms();

             }
         }
         cell.println("AT+CMGD=1,4");// AT command to delete all msgs
         Serial.println(" delete all SMS"); 
          } 
        }//end of  if(cell.available() >0) {...}
        }

        void sendSms(){
        //cell.println("AT+CMGF=1"); // set SMS mode to text 
        cell.print("AT+CMGS=");  // now send message... 
        cell.print((char)34); // ASCII equivalent of " 
        cell.print(mobilenumber); 
        cell.println((char)34);  // ASCII equivalent of " 
        delay(500); // give the module some thinking time 
        cell.print(":D hello m3alleg :D");   // our message to send 
        cell.println((char)26);  // ASCII equivalent of Ctrl-Z 
        delay(20000);
}

有关 AT 命令处理的一般说明。

不不不!这种做法永远不会可靠。你MUST等待>发送“text”之前要接收的字符 发送”。或者实际上它不仅仅是>字符,是四个 人物。引用自3GPP 规范 27.005 http://www.3gpp.org/ftp/Specs/html-info/27005.htm:

  • TA 应发送一个四字符序列<CR><LF><greater_than><space>(IRA 13, 10, 62, 32) 命令行后 终止于<CR>;之后可以从 TE 输入文本 我/助教。

(TA(终端适配器)这里指调制解调器,TE(终端设备)指AT命令的发送者)

对于任何可中止的 AT 命令(27.005 明确规定 AT+CMGSThis command should be abortable.)发送任何字符都会 中止命令的操作。去引用国际电联V.250 http://www.itu.int/rec/T-REC-V.250-200307-I/en:

5.6.1 中止命令

...

正在中止 命令的完成是由 从DTE到DCE的传输 任何字符。

(这里的DCE(数据通信设备)指调制解调器,DTE(数据终端设备)指AT命令的发送者)

这意味着当您在发送“\r\n>”之前发送“要发送的文本”时 通过调制解调器,该命令将被中止。没有办法等待“长久” 足以”等待发送响应。你MUST读取并解析 从调制解调器返回的响应文本。

这同样适用于每个命令之后的最终结果代码(例如OK, ERROR, CME ERROR以及更多)。例如发送“AT+CMGF=1” 然后发送下一个命令而不先等待 OK 是乞求 对于问题。所以在发送 AT 命令时,您总是MUST等待 在发送下一个命令之前获取最终结果代码。

请永远、永远不要使用delay等待任何 AT 命令响应。它是 就像踢掉挡道的狗以获得它们一样有用 移动。是的,有时它可能确实有效,但在某些时候你 会为采取这种方法感到抱歉......

回答你的问题。

根据您得到的回复,我可以看到您的问题不是命令 流产(虽然你的解析有如上所述的严重问题 你应该修复),并且 CME 错误是你最好的线索。来自部分 27.007 中的“9.2.1 一般错误”给出了operation not supported作为 值 4 的说明。

27.005 规定:

如果由于网络或ME错误发送失败,则返回最终结果码+CMS ERROR:。

请注意,这是 +CMS ERROR 而不是 +CME ERROR,但它是适用的,请参见下文。

我猜动作顺序如下:

SM100B GSM调制解调器的AT命令处理部分接受短信数据 并将其格式化为适当的格式并将其发送到 与 GSM 网络通信的调制解调器。就成功发送了 SMS 数据发送到网络并将其报告回 AT 命令处理 然后打印的部分+CMGS: 25和最终结果代码OK。然而 短时间后网络发回短信拒绝消息, 然后作为 +CME ERROR 响应给出。

如果我上面的猜测是正确的,那么回复应该已经送达了吧 改为 +CMS ERROR?不,因为最后的回应 已给出 AT+CMGS 命令(OK),并且 永远不应该为一个命令返回多个最终结果代码 (除非是错误的(注1))。 虽然 +CME ERROR 可以替换 ERROR 最终结果代码, 它不仅仅是最终结果代码。从AT+CMEE命令说明来看:

设置命令禁用或启用结果代码 +CME ERROR:作为与以下相关的错误指示 MT 的功能。启用后,MT 相关错误会导致 +CME ERROR:最终结果代码 常规错误最终结果代码。当错误与语法、无效参数有关时,通常返回 ERROR, 或 TA 功能。

因此 +CME ERROR 既可以是最终结果代码,也可以是未经请求的代码 结果代码(可能也是中间结果代码)。

但AT+CMGS命令无法等待接收网络 拒绝并返回+CMS ERROR?可能不会。也不自知 关于短信发送的网络细节,可能是这样的 今天的拒绝可能会比以前晚得多。这样的 更改有时是 GSM 相关 AT 命令的问题,这些命令有 最初与 GSM 行为紧密相关的古老遗产 随着技术转向 GPRS,有时变得越来越不真实, UMTS、LTE 等

Note 1:

我的一位前同事曾经抱怨标准的制定方式 已指定语音呼叫处理,因为经过 ATD1234;命令 你首先得到最终的结果代码 OK,然后当调用时 结束后您会得到一个新的最终结果代码“NO CARRIER”。这简直太可怕了 糟糕的设计,呼叫结束指示应该是特定的未经请求的 回应而非最终回应。

所以总结一下

您的短信似乎被网络拒绝。尝试找出原因。 您的 AT 命令处理也存在一些严重问题 你应该解决的问题;没有办法处理 AT 命令 读取并解析来自调制解调器的响应文本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

GSM SM5100B C M E E R R O R:4 错误 的相关文章

  • Android短信设置唯一ID

    我正在尝试开发一个发送和接收 SMS 消息 除其他外 的 Android 应用程序 我希望我的应用程序短信能够轻松识别 我不想使用 SMS 消息正文作为这个唯一标识符 我认为必须有一个我可以使用的 SMS 消息属性 遗憾的是 我未能找到一个
  • Arduino 上的 Serial 和 Stream 有什么区别,Serial.write 是如何实现的?

    我很难理解串行和流这两个术语之间的区别 串行不是流的一种吗 我对作业有一些我不明白的问题 计算机通过使用 流或串行 读取 彼此发送的数据来确定每个字节的含义 Also Serial write 我也很困惑 它返回一个字节的数据 对吗 一个字
  • 我们可以在 Android 中的短信到达收件箱之前将其删除吗?

    我正在从收件箱中删除一条短信 但我想知道 如何在它到达收件箱之前将其删除 Yes 尽管对这个问题有一些负面反应 但短信拦截有合法的用途 例如 自动电话号码验证 通过短信提供的服务 尽管通常这应该通过数据短信来完成 或者通过处理特殊格式的消息
  • 使用 Java 控制 Arduino

    我正在寻找一个LED http en wikipedia org wiki Light emitting diode用Java程序打开和关闭 我用 C 完成了这个项目大约 5 分钟 但用 Java 似乎更具挑战性 我让 Arduino 等待
  • 如何在 Windows 上获取 Arduino 草图的汇编语言列表?

    我希望能够看到我的 Arduino 草图的汇编语言列表 我怎样才能实现这个目标 Update 我正在 Windows 机器上运行 Arduino 软件 一种方法是使用avr objdump on the elf构建创建的文件 例如 在 OS
  • 如何通过连接到 Linux 计算机的 GSM/GPRS 调制解调器发送彩信? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我有一个目录 其中包含 50 个图像
  • 在 Arduino 上将整数/小数转换为十六进制?

    如何将整数或小数变量转换为十六进制字符串 我可以做相反的事情 将十六进制转换为整数 但我无法找出其他方法 这是为了Serial print 数组中的十六进制值 查看 Arduino 字符串教程here http arduino cc en
  • 无法从三星设备上的通话记录中删除短信日志

    我尝试通过我的应用程序从设备中删除所有短信 但由于某种原因 短信日志仍然出现在某些三星设备的通话记录中 我尝试了一种更 激进 的方法 并使用以下 URI 删除ContentResolver content call log calls co
  • 是否可以在 Arduino 上运行 ZeroMQ

    我想知道是否可以通过 ZeroMQ 与 Arduino 进行通信 我想使用 Arduino 来控制一些设备 并希望将大部分应用程序放在计算机上 为此 如果 Arduino 和控制器可以通过 Zeromq 以及 WiFi 或以太网扩展板进行通
  • 如何使用短信内容提供商?文档在哪里?

    我希望能够读取系统的短信内容提供商 基本上我想制作一个短信应用程序 但只有当我可以看到过去的线程等时它才会有用 似乎有一个内容提供程序 但我找不到它的文档 有人知道它在哪里吗 Thanks 编辑 好的 我找到了一种获取短信收件箱提供程序的方
  • 电话管理器值可靠且可变(cdma)吗?

    我想知道我的应用程序是否可以依赖 Android 上的电话值 例如国家 地区 MCC 等 我可以使用 setprop 在运行时更改它们吗 我尝试使用 setprop 进行更改 但似乎不起作用 据我了解 电话管理器是一个类 接口 代表 GSM
  • Arduino C++ 析构函数?

    我知道在Arduino中你不能使用delete 那么什么时候调用 C 类中定义的析构函数呢 同样 如果我想创建一个指向数组的指针 我必须使用malloc and free 当对象被销毁时 析构函数被调用 对于自动 堆栈上 变量 它在离开其作
  • 通过iPhone音频插孔读取数据

    我正在寻找一种方法来读取通过 iPhone 的音频插孔从 Arduino 发送的原始数据 我搜索了很多并发现this https github com sanjibahmad Is Headphone Plugged In tree mas
  • 从源代码定制 Android 彩信/短信应用程序?

    好的 这是交易 我想下载 Android 手机附带的彩信 短信应用程序的完整源代码 我希望能够对其进行修改 并向其添加一些自定义功能 我正在使用 Eclipse 进行开发 并且使用的是 Windows 7 我注意到现在有一 个适用于 Win
  • facebook 发送 API 错误代码:100 API 错误描述:无效参数错误消息:“链接”无效

    我正在使用 facebook post GRAPH UI 来发布私人消息 并链接到我在 facebook 中的应用程序 早些时候它工作正常 但从最近两天开始 对话框开始抛出错误 发生错误 请稍后再试 API错误代码 100API错误描述 无
  • 编译器:如果条件始终为真/假怎么办

    我想到了条件和编译器 我正在为 Arduino 编写一个应用程序 因此我需要该应用程序尽可能快 在我的代码中我有这个 define DEBUG false if DEBUG String pinName pinName Pin pinNam
  • ios 如何验证输入的电话号码是否确实是用户的电话号码?

    我见过一些不同的应用程序 Snapchat whatsapp 等 要求用户输入电话号码 然后 系统会向用户发送一条带有代码的短信 以验证该号码是否确实是他们的号码 然后他们就可以看到哪些用户的地址簿联系人也拥有该应用程序 我了解所有这些是如
  • Arduino C++ 代码:可以使用虚函数和异常吗?

    跟进这条评论 https stackoverflow com questions 452139 writing firmware assembly or high level 452401从问题中编写固件 汇编还是高级 https stac
  • Python串口通信

    我正在开发一个 Arduino 项目 由于内存限制 我将其与 Python 脚本连接起来 在Python方面 我有一个二维矩阵 其中包含各自的x y坐标值 并且在此列表中有26000个坐标对 因此 为了向大家澄清数据结构 pathlist
  • 如何在 Arduino 中将 char 变量作为数字打印到串行端口?

    我正在使用 Arduino Uno 我正在从 EEPROM 读取一个字节值并将该值存储在类型变量中char 1 字节 我想将变量的值作为数字 而不是相应的 ASCII 代码 打印到串行监视器 例如考虑char val 5 我想查看串行监视器

随机推荐

  • 如何在AWS上自动部署带有子模块的git存储库?

    我的 git 存储库中有一个子模块 我的目录结构如下 app folder1 folder2 submodule 5855 我已使用自动部署服务在 AWS 上部署了我的代码 现在 在服务器上 我的父目录中有代码 但子模块目录为空 Q1 如何
  • 量角器 - 查找所有元素和找到的元素的循环长度,然后单击按钮

    所以我一直在试图弄清楚如何根据 find All 元素的数量来单击按钮 x 次 这意味着如果同一个类名找到 3 个元素 那么我们循环 3 次 这应该单击按钮 3 次 我做了这样的事情 新更新 请查看底部的编辑帖子 通常情况下element
  • StrictMode java.lang.Throwable:检测到未标记的套接字

    启用 StrictMode 后 我刚刚开始收到此异常 java lang Throwable 检测到未标记的套接字 使用 TrafficStats setThreadSocketTag 跟踪所有网络使用情况 有几种方法可以处理此异常 首先
  • 使用细粒度锁的代码示例(JCR Jackrabbit?)

    我正在进行一项学术研究 试图开发一种编程工具 帮助实现细粒度锁定功能 用于维护树状数据结构的并发程序 例如 程序员可能会编写一些接收树根节点并修改树的函数 通过遍历某些路径并添加 删除节点 该工具将帮助他找到代码中节点应该被锁定的位置 以及
  • PDO-bindParam 不起作用

    我正在创建一个 PDO 类以在我的项目中使用 但由于我是新手 所以我无法将参数绑定到准备好的 sql 语句 而不会出现任何错误 这是执行此操作的函数 bindParam public static function bind get fun
  • java.net.URI.relativize 不适用于 JAR URI

    我有两个 URI 对象 一个指向 JAR 文件中的文件夹 另一个指向同一 JAR 文件中的文件 该文件位于第一个 URI 指定的目录的子文件夹中 我喜欢创建一个相对 URI 因此生成的 URI 仅包含 JAR 中文件的相对路径 文件夹URI
  • IIS 上的 Python:如何?

    我有 PHP dotNet 背景 并且对 Python 着迷 我想逐步将功能从 PHP 转置为 Python 并排运行各个部分 由于应用程序规模庞大 这一过渡可能需要 2 年时间 因此我必须使用 IIS 我有 15 年的 Web 编程背景
  • 使用 AFIncrementalStore 和 NSFetchedResultsController 出现死锁

    这几天我一直在苦苦思索这个问题 但我一生都无法弄清楚到底发生了什么 我对核心数据很陌生 但我对它足够了解 可以避免死锁情况 然而 对于这个项目 我决定尝试合并 AFIncrementalStore 我构建了一个示例项目来测试 APIClie
  • 使用 flex 将 Python 多行字符串与转义字符匹配

    我想知道如何将 python 多行注释与 flex 相匹配 我遇到了一些麻烦 以下工作正常Regexr https regexr com 但不被flex识别 我不知道如何修复它 1 2 以前 我使用过 3 0 2 3 它可以检测以下评论 A
  • Python dryscrape 抓取带有 cookies 的页面

    我想从网站获取一些数据 这需要登录 我通过以下方式登录requests url http example com response requests get url email email protected cdn cgi l email
  • 从 github 项目分发二进制文件的最佳实践是什么? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 从 github 项目分发二进制文件的最佳实践是什么 我能想到 在项目中创建一个 bin 文件夹 在其中保存二进制文件的副本 但是 github 旨在
  • iPhone 内存压力导致 iOS 钥匙串数据丢失?

    我正在 iPhone 5s 上通过调试器运行 iOS 应用程序 我使用钥匙串来存储密码 我使用 Apple 的 KeychainItemWrapper 示例来存储和检索我的钥匙串项目 大约 99 99 的情况下 钥匙串检索都能完美运行 但是
  • AWS Terraform:通过匹配标签名称中的子字符串来过滤特定子网

    我有 6 个子网 我想从中过滤 3 个匹配子字符串的子网internal并在 rds 中使用 标签名称具有内部单词 并且希望根据该内部单词进行过滤 有人可以帮我吗 data aws vpc vpc nonprod sctransportat
  • 使用 jQuery .appendTo 后执行 CSS3 动画

    我想用 appendTo 修改元素的 DOM 位置 完成后 我需要使用 CSS3 为元素设置动画 该元素不会产生动画 而是捕捉到新的 CSS 样式 JavaScript run click function imageOriginal ap
  • xcode 构建错误:项目不包含方案

    我正在开发一个离子应用程序 但是当我尝试构建它时 它给了我以下错误 xcodebuild error The project named SnapHome does not contain a scheme named SnapHome T
  • 每个 CPU 的线程实际限制是多少?

    我一直在玩弄线程 试图将一些限制推向极致 为了我自己的娱乐 我知道线程池默认为 25 个线程 并且可以增加到 1000 个 根据 MSDN 但是 每个 CPU 核心的线程数的实际限制是什么呢 在某些时候 上下文切换会比线程保存造成更多的瓶颈
  • 为什么在没有“self”且没有装饰器的情况下声明 Python 类的方法不会引发异常?

    我认为以下代码会导致错误 因为据我所知 Python 类中的方法必须将 self 或任何其他标签 但按照约定为 self 作为其第一个参数 或者 cls 或类似的如果 classmethod使用装饰器 或者不使用装饰器 staticmeth
  • CSS 溢出 - 未按预期工作

    http jsfiddle net bSnaG http jsfiddle net bSnaG 在我看来 上面的例子应该看起来像一个灰色的盒子 x不越过边缘并且 y探出底部 但事实并非如此 显然是这样的overflow x hidden c
  • data.table 基于日期范围合并

    我有两张桌子 policies and claims policies lt data table policyNumber c 123 123 124 125 EFDT as Date c 2012 1 1 2013 1 1 2013 1
  • GSM SM5100B C M E E R R O R:4 错误

    我正在使用 Arduino 来控制 SM5100B GSM 设备 除了当我想在收到另一条短信后发送短信时 一切正常 我明白了 错误代码 确定 gt C M G S 2 5 确定 C M E E R O R 4 我处理上述收到的短信的代码 i