I'm using Arduino Uno, CC3000 breakout board (v 1.28) e some sensors (dth11, MQ-7 Carbon Monoxide, and i receive now the BMP180).
My sketch is quite simple: wait for 2 minutes, read sensors, put them into my Xively Account.
The functión for sending data is:
Code: Select all
ReturnType SendDataToXively()
{
DHTData DTHDataSend = GetDataFromDHT11();
MQ7Data MQ7DataSend = GetDataFromMQ7();
//Serial.print(F("QUALITA' DATI:"));
//Serial.print(DTHDataSend.blnGoodData);
//Serial.println(MQ7DataSend.blnGoodData);
if (DTHDataSend.blnGoodData && MQ7DataSend.blnGoodData)
{
if (!cc3000.checkConnected())
cc3000.connectToAP("FloRoBaWifi", "R0ver3B4ud1n0", WLAN_SEC_WPA2);
//Serial.println(F("CONNESSO A WIFI"));
int intCount=0;
//Serial.println(F("WIFI Connected!"));
while (!cc3000.checkDHCP() && !(intCount>40))
{
delay(1000);
intCount++;
}
if (intCount>=40)
return NoResponseFromDHCP;
//Serial.println(F("INDIRIZZO DHCP ACQUISITO"));
String data = "";
data = data + "\n" + "{\"version\":\"1.0.0\",\"datastreams\" : [ {\"id\" : \"Kitchen-Temperature\",\"current_value\" : \"" + String(DTHDataSend.intTemp) + "\"},{\"id\" : \"Kitchen-Humidity\",\"current_value\" : \"" + String(DTHDataSend.intHum) + "\"},{\"id\" : \"Kitchen-CarbonMonoxide\",\"current_value\" : \"" + String(MQ7DataSend.intCO) + "\"}]}";
CC3000Client = cc3000.connectTCP(cc3000.IP2U32(216,52,233,120), 80);
if (CC3000Client.connected())
{
//Serial.println(F("CLIENT CONNESSO"));
CC3000Client.println(F("PUT /v2/feeds/1257980085.json HTTP/1.0"));
CC3000Client.println(F("Host: api.xively.com"));
CC3000Client.println(F("X-ApiKey: MyAPI"));
CC3000Client.println("Content-Length: " + String(data.length()));
CC3000Client.print(F("Connection: close"));
CC3000Client.println();
CC3000Client.print(data);
CC3000Client.println();
intCount=0;
// while (CC3000Client.connected())
// {
// while (CC3000Client.available())
// {
// char c = CC3000Client.read();
// Serial.print(c);
// }
//}
//Serial.println(F("SCRITTURA TERMINATA"));
while (!CC3000Client.available() && intCount<60) //devo aspettare fino a quando non ho la risposta del server, altrimenti non funziona!
{
delay (1000);
//Serial.println(F("ASPETTO"));
intCount++;
}
//Serial.println(F("PAGINA RECUPERATA. OK"));
if (intCount>=60)
return NoXivelyResponse;
CC3000Client.close();
lngLastTimeUpdatedXively = lngScanTime;
//Serial.print(F("FREE RAM:"));
//Serial.println(freeRam());
return AllDone;
}
else
return NoResponseOfClient;
}
else
return BadDataFromSensors;
}
I don't know why, but sometimes the program stuck on this line.
Code: Select all
while (!CC3000Client.available() && intCount<60)
From that moment, the Arduino freezes.
i tried to check the amount of free ram at the end of the all instructions and, when the function works, i receive a feedback of 395 Kb (never change).
i can't find this issue :(
the string "data" is too long? i don't know.
is there a way to send data lighter that this?
help!