//
#include <DallasTemperature.h>
#include <OneWire.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
// ,
unsigned long pauseTime = 60000;
//
unsigned long currentTime;
unsigned long previousTime = 0;
// D10 D18B20
// ONE WIRE
#define ONE_WIRE_BUS 10
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
// WiFi
#define SSID «»
#define PASS «»
// IP thingspeak.com
#define IP «184.106.153.149»
// GET API thingspeak.com
String GET = «GET /update?key=API&field1=»;
// ESP8266
// AT- ;
// ( AT- v0.21 SDK 0.9.5
//
esp8266.ru/esp8266-sdk-0-9-5-v0-21 )
SoftwareSerial esp(11, 12); // RX, TX
// LCD-
LiquidCrystal lcd(A1, A2, A3, 2, 4, 7);
void setup()
{
// :
esp.begin(9600); // - ESP8266 9600
Serial.begin(9600); // - COM- ( )
sensors.begin(); //
lcd.begin(16, 2); // LCD-
lcd.clear();
// ESP8266 AT
Send(«AT»);
delay(1000);
// OK,
if(esp.find(«OK»)){
Serial.println(«ESP8266 Ready: OK»);
connectWiFi();
previousTime = millis() + 2*pauseTime;
}
}
void loop(){
currentTime = millis();
if(currentTime — previousTime > pauseTime) {
//
sensors.requestTemperatures();
float tempC = sensors.getTempCByIndex(0);
//
char buffer[10];
String temp = dtostrf(tempC, 4, 1, buffer);
// thingspeak.com
updateData(temp);
lcd.setCursor(0,0);
lcd.print(temp);
lcd.print("\xDF"«C»); // \xDF —
previousTime = currentTime;
}
}
// ESP8266 thingspeak.com
void updateData(String data){
// thingspeak.com
String cmd = «AT+CIPSTART=\»TCP\",\"";
cmd += IP;
cmd += "\",80";
Send(cmd);
delay(3000);
if(esp.find(«OK»))
Serial.println(«CONNECT TO IP: OK»);
else
Serial.println(«CONNECT TO IP: Error»);
//
cmd = GET;
cmd += data;
cmd += "\r\n";
esp.print(«AT+CIPSEND=»);
esp.println(cmd.length());
// ESP8266
if(esp.find(">")){
Serial.print(">");
//
esp.print(cmd);
Serial.print(cmd);
if(esp.find(«OK»)) Serial.println(«DATA SEND: OK»);
else Serial.println(«DATA SEND: Error»);
}
else{
Send(«AT+CIPCLOSE»);
if(esp.find(«OK»)) Serial.println(«CONNECTION FOR IP CLOSE: OK»);
else Serial.println(«CONNECTION FOR IP CLOSE: Error»);
}
Serial.println();
}
// ESP8266
void Send(String cmd){
Serial.print(«SEND TO ESP8266: „);
esp.println(cmd);
Serial.println(cmd);
}
// WiFi
boolean connectWiFi(){
esp.println(“AT+CWMODE=1»);
delay(2000);
String cmd=«AT+CWJAP=\»";
cmd+=SSID;
cmd+="\",\"";
cmd+=PASS;
cmd+="\"";
Send(cmd);
delay(5000);
if(esp.find(«OK»)){
Serial.println(«CONNECT TO WIFI: OK»);
return true;
}
else{
Serial.println(«CONNECT TO WIFI: Error»);
return false;
}
}