【问题标题】:HTTPREAD missing characters with Arduino and SIM900Arduino 和 SIM900 的 HTTPREAD 缺少字符
【发布时间】:2016-02-23 14:50:49
【问题描述】:

我在我的 Arduino 上使用 SIM900 模块,虽然它返回了正确数量的预期字符,但它缺少字符。我在 AT+SAPBR=1,1 和 AT+HTTPINIT 上有错误,所以我不确定这是否是它的原因。我也不确定如何解决这些问题。

AT+CGATT?

+CGATT: 1

OK
AT+CGATT=1

OK
AT+SAPBR=3,1,"CONTYPE","GPRS"

OK
AT+SAPBR=3,1,"APN","mobile.o2.co.uk"

OK
AT+SAPBR=1,1

ERROR
AT+HTTPINIT

ERROR
AT+HTTPPARA="URL","http://www.xxxxxxxxxxx.com/temp/"

OK
AT+HTTPACTION=0

OK

+HTTPACTION:1,200,56
AT+HTTPREAD

+HTTPREAD:56
{"type":"dOK

我的函数在字符进入时读取它们:

void whileAvailable() {
  char data;
  while (SIM900.available()) {
    data=SIM900.read();
    if (data>0) Serial.print(data);
  }
}

我相信该函数可以很好地读取字符,但是我不确定为什么它无法找到其余字符

【问题讨论】:

  • 虽然这很可能是缓冲区溢出,但这不是唯一的原因。响应请求的网站也会导致它(响应标头)。上面的代码很可能适用于 google.com.hk,但不适用于您的网站。

标签: c arduino sim900


【解决方案1】:

这是由于您使用的 arduino uno 或 mega 的串行缓冲区溢出。增加缓冲区大小,以便它们容纳更多字节;并且可以显示这些数据。

【讨论】:

  • 这并没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review
  • @MLavoie 这是一个答案,也是目前唯一的一个,因为在我看来,缓冲区大小确实是问题所在。但是,更改它并不是那么简单,因为它已被嵌入到 UART 库中,所以@user3661027,您能否提供更多详细信息或示例如何做到这一点?
  • 是的,这是可能的。转到安装文件夹 C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino 并在 HardWareSerial.h 中将 SERIAL_TX_BUFFER_SIZE 更改为 128,将 SERIAL_RX_BUFFER_SIZE 更改为 128。这是 Serial.print() 中缺少字符的解决方案
【解决方案2】:

您需要关闭 AT+SAPBR 和 AT+HTTPINIT 模式

试试这个:AT+SAPBR=0,1

       AT+HTTPTERM

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多