Hi,
I know this has been discussed many times, but I cannot see why this particular script doesn't run unless the Serial Monitor is open.
I'm trying to log temperature sensor data to emoncms.org, using a LinkIt One, over Wifi. This works fine when it's connected to my PC, and the Serial Monitor is open in Arcuino IDE. But as soon as I close the serial monitor, or let it run off a battery, the logging stops.
Here's the full sketch:
#include <LTask.h>
#include <LWiFi.h>
#include <LWiFiClient.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include<LBattery.h>
OneWire ds(8); // on pin 8 (a 4.7K resistor is necessary)
DallasTemperature sensors(&ds); // Pass our oneWire reference to Dallas Temperature.
#define WIFI_AP "xxxxxxxxxxxx"
#define WIFI_PASSWORD "xxxxxxxxxxxx"
#define WIFI_AUTH LWIFI_WPA // choose from LWIFI_OPEN, LWIFI_WPA, or LWIFI_WEP according to your WiFi AP configuration
LWiFiClient client;
// emoncms Settings
char* server = "emoncms.org";
String writeAPIKey = "xxxxxxxxxxxx";
int node = 1; //if 0, not used
int sent = 0;
int myPeriodic = 30;
DeviceAddress Room1Temp = { 0x28, 0xBA, 0xB6, 0x65, 0x05, 0x00, 0x00, 0x21 };
DeviceAddress Room1RoofTemp = { 0x28, 0x52, 0xCA, 0xA0, 0x07, 0x00, 0x00, 0x12 };
DeviceAddress Room2Temp = { 0x28, 0x1D, 0xB3, 0xE6, 0x05, 0x00, 0x00, 0x7B }; // Silver probe
DeviceAddress Room2RoofTemp = { 0x28, 0x92, 0xDC, 0x98, 0x05, 0x00, 0x00, 0x76 }; // Black probe
DeviceAddress Room3Temp = {0x28, 0x50, 0x00, 0xA0, 0x07, 0x00, 0x00, 0xE3 };
DeviceAddress Room3RoofTemp = {0x28, 0x50, 0x00, 0xA0, 0x07, 0x00, 0x00, 0xE3 };
DeviceAddress KitchenTemp = {0x28, 0x50, 0x00, 0xA0, 0x07, 0x00, 0x00, 0xE3 };
DeviceAddress DiningRoomTemp = {0x28, 0x50, 0x00, 0xA0, 0x07, 0x00, 0x00, 0xE3 };
DeviceAddress HallTemp = {0x28, 0x50, 0x00, 0xA0, 0x07, 0x00, 0x00, 0xE3 };
DeviceAddress TVRoomTemp = {0x28, 0x50, 0x00, 0xA0, 0x07, 0x00, 0x00, 0xE3 };
DeviceAddress OutsideTemp = {0x28, 0x50, 0x00, 0xA0, 0x07, 0x00, 0x00, 0xE3 };
DeviceAddress PatioTemp = {0x28, 0x50, 0x00, 0xA0, 0x07, 0x00, 0x00, 0xE3 };
void setup()
{
LWiFi.begin();
Serial.begin(115200);
sensors.begin(); // Start up the library
int res = 12; // set the resolution to 12 bit. Lower is faster. 9-12 bit
sensors.setResolution(Room1Temp, res);
sensors.setResolution(Room1RoofTemp, res);
sensors.setResolution(Room2Temp, res);
sensors.setResolution(Room2RoofTemp, res);
sensors.setResolution(Room3Temp, res);
sensors.setResolution(Room3RoofTemp, res);
sensors.setResolution(KitchenTemp, res);
sensors.setResolution(DiningRoomTemp, res);
sensors.setResolution(HallTemp, res);
sensors.setResolution(OutsideTemp, res);
sensors.setResolution(TVRoomTemp, res);
sensors.setResolution(PatioTemp, res);
Serial.println("Connecting to AP"); // keep retrying until connected to AP
while (0 == LWiFi.connect(WIFI_AP, LWiFiLoginInfo(WIFI_AUTH, WIFI_PASSWORD)))
{
delay(1000);
Serial.println("Connected to AP");
}
startWifi();
} // END setup()
void loop()
{
float Room1TempC;
float Room1RoofTempC;
float Room2TempC;
float Room2RoofTempC;
float Room3TempC;
float Room3RoofTempC;
float KitchenTempC;
float DiningRoomTempC;
float HallTempC;
float OutsideTempC;
float TVRoomTempC;
float PatioTempC;
sensors.requestTemperatures();
Room1TempC = sensors.getTempC(Room1Temp);
Room1RoofTempC = sensors.getTempC(Room1RoofTemp);
Room2TempC = sensors.getTempC(Room2Temp);
Room2RoofTempC = sensors.getTempC(Room2RoofTemp);
Room3TempC = sensors.getTempC(Room3Temp);
Room3RoofTempC = sensors.getTempC(Room3RoofTemp);
KitchenTempC = sensors.getTempC(KitchenTemp);
DiningRoomTempC = sensors.getTempC(DiningRoomTemp);
HallTempC = sensors.getTempC(HallTemp);
OutsideTempC = sensors.getTempC(OutsideTemp);
TVRoomTempC = sensors.getTempC(TVRoomTemp);
PatioTempC = sensors.getTempC(PatioTemp);
if (client.connect(server, 80)) {
Serial.print("Connected to ");
Serial.println(server);
String postStr;
// Room1Temp
if ((Room1TempC == 0.00) || (Room1TempC == 85.00) || (Room1TempC == -127.00)) {
Serial.println("Room1Temp: " + String(Room1TempC));
} else {
postStr += "Room1:";
postStr += String(Room1TempC);
Serial.println("Room1Temp: " + String(Room1TempC));
}
//Room1RoofTemp
if ((Room1RoofTempC == 0.00) || (Room1RoofTempC == 85.00) || (Room1RoofTempC == -127.00)) {
Serial.println("Room1TempRoof: " + String(Room1RoofTempC));
} else {
postStr += "&Room1Roof:";
postStr += String(Room1RoofTempC);
Serial.println("Room1RoofTemp: " + String(Room1RoofTempC));
}
//Room2Temp
if ((Room2TempC == 0.00) || (Room2TempC == 85.00) || (Room2TempC == -127.00)) {
Serial.println("Room2Temp: " + String(Room2TempC));
} else {
postStr += "&Room2:";
postStr += String(Room2TempC);
Serial.println("Room2Temp: " + String(Room2TempC));
}
//Room2RoofTemp
if ((Room2RoofTempC == 0.00) || (Room2RoofTempC == 85.00) || (Room2RoofTempC == -127.00)) {
Serial.println("Room2RoofTemp: " + String(Room2RoofTempC));
} else {
postStr += "&Room2Roof:";
postStr += String(Room2RoofTempC);
Serial.println("Room2RoofTemp: " + String(Room2RoofTempC));
}
//Room3Temp
if ((Room3TempC == 0.00) || (Room3TempC == 85.00) || (Room3TempC == -127.00)) {
Serial.println("Room3Temp: " + String(Room3TempC));
} else {
postStr += "&Room3:";
postStr += String(Room3TempC);
Serial.println("Room3Temp: " + String(Room3TempC));
}
if (postStr != NULL) {
client.print("GET /input/post?apikey=");
client.print(writeAPIKey);
if (node > 0) {
client.print("&node=");
client.print(node);
}
client.print("&json={");
// client.print("Room1:");
// client.print(Room1TempC);
client.print(postStr);
client.println("} HTTP/1.1");
client.println("Host:emoncms.org");
client.println("User-Agent: Arduino-ethernet");
client.println("Connection: close");
client.println();
client.read();
//Debugging URL to be posted to emoncms
Serial.print("GET /input/post.json?apikey=");
Serial.print(writeAPIKey);
if (node > 0) {
Serial.print("&node=");
Serial.print(node);
}
Serial.print("&json={");
Serial.print(postStr);
Serial.println();
}
delay(1000);
}//end if
sent++;
client.stop();
int count = myPeriodic;
while (count--)
delay(1000);
} // END loop()
void startWifi()
{
client.stop();
Serial.println("Connecting to emoncms.org ...");
Serial.println();
delay(1000);
}