为什么TCP连接在使用AT命令从Arduino GPRS连接到xively时保持关闭?

时间:2014-09-03 01:20:48

标签: tcp arduino gprs xively sim900

我尝试使用AT命令将数据从蜂窝连接的arduino温度传感器发送到xively.com。我可以打开TCP连接,但然后立即关闭。 为什么TCP连接会继续关闭?

设置: arduino uno mackbook seeedstudio gprs v2.0 att gophone sim卡

这是我的终端读数:

Call Ready
AT

OK
AT+CPIN?

+CPIN: READY

OK
AT+CGATT?

+CGATT: 1

OK
AT+CIPSHUT

SHUT OK
AT+CIPSTATUS

OK

STATE: IP INITIAL
AT+CIPMUX=0

OK
AT+CSTT="wap.cingular"

OK
AT+CIICR

OK
AT+CIFSR

10.52.49.206
AT+CIPSTART="TCP","api.xively.com","80"

OK

STATE: TCP CLOSED

我的设置: SEEEDStudio GPRS盾牌 Arduino Uno 的MacBook

要将AT命令发送到sheild,我使用以下代码设置了一个串行继电器:

//Serial Relay - Arduino will patch a 
//serial link between the computer and the GPRS Shield
//at 19200 bps 8-N-1
//Computer is connected to Hardware UART
//GPRS Shield is connected to the Software UART 

#include <SoftwareSerial.h>

SoftwareSerial GPRS(7, 8);
unsigned char buffer[64]; // buffer array for data recieve over serial port
int count=0;     // counter for buffer array 
void setup()
{
  GPRS.begin(19200);               // the GPRS baud rate   
  Serial.begin(19200);             // the Serial port of Arduino baud rate.

}

void loop()
{
  if (GPRS.available())              // if date is comming from softwareserial port ==> data is comming from gprs shield
  {
    while(GPRS.available())          // reading data into char array 
    {
      buffer[count++]=GPRS.read();     // writing data into array
      if(count == 64)break;
  }
    Serial.write(buffer,count);            // if no data transmission ends, write buffer to hardware serial port
    clearBufferArray();              // call clearBufferArray function to clear the storaged data from the array
    count = 0;                       // set counter of while loop to zero


  }
  if (Serial.available())            // if data is available on hardwareserial port ==> data is comming from PC or notebook
    GPRS.write(Serial.read());       // write it to the GPRS shield
}
void clearBufferArray()              // function to clear buffer array
{
  for (int i=0; i<count;i++)
    { buffer[i]=NULL;}                  // clear all index of array with command NULL
}

然后我输入命令并监控与CoolTerm的串行通信。

1 个答案:

答案 0 :(得分:1)

这对我有用:

send AT+CGREG? until you get +CGREG: 0,1
send AT+CGATT? response +CGATT: 1
send AT+CSTT="internet","","" response OK
send AT+CIICR response OK
send AT+CIFSR response IP address
send AT+CIPSTART="TCP","api.xively.com","80" response CONNECT OK