Hi i have Arduino Duemilanove and ESP8266 and 18B20 dallas tempeture.
And i need send data to thingspek.com but this code no sending data.
But why?
#include <TextFinder.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SoftwareSerial.h>
//ESP 8266 je na portu 2,3 - připomínám, že je potřeba mít flashlou verzi, která podporuje rychlost 9600b/s - SoftwareSerial nelze použít s vyšší rychlostí, než 19200!!!
SoftwareSerial espSerial(2,3); // RX, TX
//#define DEBUG
//Dále inicializujeme komponenty pro zacházení s 1Wire rozhraním a teploměry DS18B20
//pro teploměr
#define ONE_WIRE_BUS 6
#define TEMPERATURE_PRECISION 9
#define IP "184.106.153.149" // thingspeak.com
String GET = "GET /update?key=8O2BV9V8YJ3WQSDY&field1=";
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer, outsideThermometer;
float teplota;
//Definujeme SSID a Heslo pro Wifi a pár dalších nezbytností ...
//pro WiFi
#define SSID "kuwifi"
#define PASS "arakaina"
#define RESET 5
#define LED 13 //ledka na Arduinu
bool wifiConnected;
uint8_t cnt;
String addr;
char channel;
TextFinder finder(espSerial);
void setup()
{
wifiConnected = false;
pinMode(LED, OUTPUT);
digitalWrite(LED,LOW);
pinMode(RESET,OUTPUT);
delay(500);
reset();
Serial.begin(115200); // Serial monitor
espSerial.begin(9600); // ESP8266
//espSerial.println("AT+RST");
//Po zapnutí napájení si počkáme, až se nám ESP8266 ohlásí ...
Serial.println(F("ESP8266 & DS18B20 Web."));
for (int i = 0; i < 5; i++)
{
delay(1000);
if (espSerial.find("ready")) break;
clearSerialBuffer();
}
Serial.print("AT : ");
Serial.println(ATCommandSend("AT",500) );
clearSerialBuffer();
wifiInit();
//ESP8266 je od této chvíle viditelný na síti
Serial.println(F("Webserver bezi"));
digitalWrite(LED,HIGH);
sensors.begin();
Serial.println("***************************************************");
Serial.print("Pocet teplomeru: ");
Serial.println(sensors.getDeviceCount(), DEC);
//zjisti adresy
oneWire.reset_search();
if (!oneWire.search(insideThermometer)) Serial.println("Vnitrni teplomer nenalezen!");
if (!oneWire.search(outsideThermometer)) Serial.println("Vnejsi teplomer nenalezen!");
Serial.print("Adresa teplomeru 1: ");
printAddress(insideThermometer);
Serial.println();
Serial.print("Adresa teplomeru 2: ");
printAddress(outsideThermometer);
Serial.println();
sensors.setResolution(insideThermometer, TEMPERATURE_PRECISION);
sensors.setResolution(outsideThermometer, TEMPERATURE_PRECISION);
sensors.requestTemperatures();
printData(insideThermometer);
printData(outsideThermometer);
if (Serial.available()>0) Serial.flush();
clearSerialBuffer();
cnt = 0;
}
void loop()
{
if (espSerial.available()>0)
{
if( finder.find("+IPD,") )
{
delay(20);
channel=espSerial.read();
homepage(channel-'0');
homepage(channel-'0'+1);
delay(20);
clearSerialBuffer();
#ifdef DEBUG
Serial.println("WEB! "+String(channel));
Serial.print(F("AT+CIPMUX=1 : "));
Serial.println( ATCommandSend("AT+CIPMUX=1", 100) );
Serial.print(F("AT+CIPSERVER=1,8888 : "));
Serial.println( ATCommandSend("AT+CIPSERVER=1,8888", 100) );
delay(20);
clearSerialBuffer();
#endif // DEBUG
}
}
keepAlive();
}
void keepAlive()
{
delay(100);
cnt++;
if (cnt>50)
{
cnt = 0;
espSerial.println("AT");
delay(50);
if (!finder.find("OK"))
{
#ifdef DEBUG
Serial.println("ESP8266 ERROR!");
#endif // DEBUG
wifiInit();
}
espSerial.println("AT+CIPSERVER=1,8888");
delay(50);
if (!finder.find("nochange")) wifiInit();
}
}
void homepage(int ch_id)
{
sensors.requestTemperatures();
teplota = sensors.getTempC(insideThermometer);
String term = String(teplota,2);
clearSerialBuffer();
String Header;
Header = "HTTP/1.1 200 OK\r\n";
Header += "Content-Type: text/html\r\n";
Header += "Connection: close\r\n";
String Content;
Content = "<h1>Teplota = ";
Content += term;
char degree = 176;
Content += String(degree);
Content += "C</h1>";
Header += "Content-Length: ";
Header += (int)(Content.length());
Header += "\r\n\r\n";
espSerial.print("AT+CIPSEND=");
espSerial.print(String(ch_id));
#ifdef DEBUG
Serial.println("Kanal: "+String(ch_id));
#endif // DEBUG
espSerial.print(",");
espSerial.println(Header.length()+Content.length());
delay(1000);
if (espSerial.find(">"))
{
espSerial.print(Header);
espSerial.print(Content);
delay(20);
clearSerialBuffer();
//espSerial.println("AT+CIPCLOSE");
//delay(50);
//clearSerialBuffer();
}
}
String ATCommandSend(String AT_Command, int wait)
{
String tmpData = "";
espSerial.println(AT_Command);
delay(wait);
while (espSerial.available() >0 ) {
char c = espSerial.read();
tmpData += c;
if ( tmpData.indexOf(AT_Command) > -1 )
tmpData = "";
else
tmpData.trim();
}
return tmpData;
}
//restart modulu ESP8266
void reset()
{
digitalWrite(RESET,LOW);
delay(100);
digitalWrite(RESET,HIGH);
}
void wifiInit()
{
wifiConnected = false;
digitalWrite(LED,LOW);
//ověř asociaci na AP dle zvoleného SSID
for (int i = 0; i < 10; i++)
{
espSerial.println("AT+CWJAP?");
if (finder.find(SSID))
{
delay(20);
clearSerialBuffer();
digitalWrite(LED,HIGH);
wifiConnected = true;
break;
}
delay(100);
}
delay(1000);
//není asociace, pokus se připojit na AP
if (wifiConnected == false)
{
//Serial.print("Timeout: ");
//Serial.println(ATCommandSend("AT+CIPSTO=60",100));
Serial.print("Mode 1: ");
Serial.println(ATCommandSend("AT+CWMODE=1",100));
for (int i = 0; i < 5; i++)
{
if (connectWiFi() == true)
{
wifiConnected = true;
clearSerialBuffer();
digitalWrite(LED,HIGH);
break;
}
delay(400);
}
}
//wifiConnected = true;
if (wifiConnected == true)
{
Serial.println("Pripojeno!");
clearSerialBuffer();
//set the server of port 8888 check "no change" or "OK"
Serial.print(F("AT+CIPMUX=1 : "));
Serial.println( ATCommandSend("AT+CIPMUX=1", 100) );
Serial.print(F("AT+CIPSERVER=1,8888 : "));
Serial.println( ATCommandSend("AT+CIPSERVER=1,8888", 100) );
//set time out
//Serial.print("AT+CIPSTO=15 : ");
//Serial.println( ATCommandSend("AT+CIPSTO=15",10) );
//print the ip addr
Serial.print(F("IP addresa : "));
addr = ATCommandSend("AT+CIFSR", 1000);
addr = addr.substring(0,(addr.length()-2));
Serial.println(addr);
delay(200);
}
else
{
Serial.println("WiFi ERROR!");
digitalWrite(LED,LOW);
while (true);
}
}
void clearSerialBuffer(void) {
while ( espSerial.available() > 0 )
{
delay(20);
espSerial.flush();
}
}
boolean connectWiFi()
{
String cmd="AT+CWJAP=\"";
cmd+=SSID;
cmd+="\",\"";
cmd+=PASS;
cmd+="\"";
espSerial.println(cmd);
delay(2000);
if(finder.find("OK"))
{
clearSerialBuffer();
return true;
}
else
{
return false;
}
return true;
}
void printAddress(DeviceAddress deviceAddress)
{
for (uint8_t i = 0; i < 8; i++)
{
// zero pad the address if necessary
if (deviceAddress[i] < 16) Serial.print("0");
Serial.print(deviceAddress[i], HEX);
}
}
void printData(DeviceAddress deviceAddress)
{
Serial.print("Adresa teplomeru ");
printAddress(deviceAddress);
Serial.print(":");
printTemperature(deviceAddress);
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
Serial.print("Teplota: ");
Serial.print(tempC);
Serial.write(176);
Serial.println("C");
}