问题
I'm trying to send data from a cellular-connected arduino temperature sensor to xively.com using AT commands. I can open the TCP connection, but then it immediately closes. Why does the TCP connection keep closing?
setup: arduino uno mackbook seeedstudio gprs v2.0 att gophone sim card
Here is my Terminal readout:
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
my setup: SEEEDStudio GPRS shield Arduino Uno macbook
To send AT commands to the sheild, I have set up a serial relay using the following code:
//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
}
I then enter the commands and monitor serial communication with CoolTerm.
回答1:
This works for me:
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
来源:https://stackoverflow.com/questions/25634804/why-does-tcp-connection-keep-closing-while-connecting-to-xively-from-adruino-gpr