#include <Wire.h> //Подключаем библиотеку для использования I2C
#include <ESP8266WiFi.h>
#include <OneWire.h> //Подключаем библиотеку для температурного датчика DS18B20
#include <Adafruit_BMP085.h> //Подключаем библиотеку для маленького барометра (темп., абс.высота и атм.давление)
#include <DHT.h> //Use just if use real sensor not for random
//=====Termo_Sensor ds18b20*
int tempPin=12; //Определяем порт шины OneWire (IC) для температурного датчика DS18B20, Gpio12
OneWire ds(tempPin); //Создаем объект для работы с термометром
//byte flagDallas=0; //Флаг для обработки показаний с датчиков Dallas
byte data[12];
byte addr1[8]={0x28,0xFF,0x9C,0x20,0x54,0x14,0x01,0xC2}; //адрес датчика DS18B20_уличного
unsigned int raw; //Если экранированный кабель, можно подключать до 32 термо-датчиков DS18B20
float temp; //Температура на уличке с точностью 0,06 градС
//=====Pressure*
Adafruit_BMP085 bmp;
float pres,tempB;
//=====Humidity*
#define DHTTYPE DHT11
#define DHTPIN 14 //Gpio14
DHT dht(DHTPIN, DHTTYPE, 11); //Initialize DHT sensor, 11 works fine for ESP8266
float hmdt,tempC;
const char* ssid="***";
const char* password="***";
IPAddress device_ip (10,32,10,33);
IPAddress dns_ip (8,8,8,8);
IPAddress gateway_ip (10,32,10,3);
IPAddress subnet_mask (255,255,255,0);
//byte arduino_mac[]={0xDE,0xED,0xBA,0xFE,0xFE,0xED}; //8266-03_deepnet 18:FE:34:9C:4E:BD
//long rssi=WiFi.RSSI(); //Wi-Fi signal strength (RSSI), мощность сигнала
WiFiClient client;
String apiKey="***"; //ThingSpeak API key, DeepNet_street
const char* serverTS="api.thingspeak.com";
//=====Delays*
const int sleepTimeS=20; //Время перехода в "глубокий сон", Секунд....
//=====Wi-Fi setup*
void setup(){
Wire.begin(13,2); //13 as SDA and 2 as SCL
bmp.begin(); //Initialize Pressure sensor
dht.begin(); //Initialize Humidity sensor
// Serial.begin(115200); //Serial connection from ESP-01 via 3.3v console cable
delay(10);
WiFi.begin(ssid, password); //Connect to WiFi network
WiFi.config(device_ip, gateway_ip, subnet_mask); //Setup WiFi network
// Serial.print("\n\r \n\rWorking to connect");
while (WiFi.status() != WL_CONNECTED){ // Wait for connection
delay(500);}
// Serial.print(".");}
// Serial.println("");
// Serial.println("esp8266-03");
// Serial.print("Connected to: ");
// Serial.println(ssid);
// Serial.print("IP address: ");
// Serial.println(WiFi.localIP());
// Serial.print("signal strength (RSSI):");
// Serial.print(rssi);
// Serial.println(" dBm");
// Serial.print("MAC address: ");
// Serial.println(WiFi.macAddress());
}
//=========== Считывание температур
void dallas(){
ds.reset();
ds.write(0xCC); //Команда инициации
ds.write(0x44); //Start conversion, with parasite power on at the end
// ds.write(0xCC);
// ds.write(0x4E);
// ds.write(0x7F); // верх и низ для аварийных температур
// ds.write(0xFF);
// ds.write(0x60);
// ds.write(0x48);
}
//=========== Обработка температур
void tempDallas(){
temp=DS18B20(addr1);
// Serial.print("tempDs: ");
// Serial.println(temp);
// Serial.println("***");
}
float DS18B20(byte*adres){
ds.reset();
ds.select(adres);
ds.write(0xBE); //Read Scratchpad
for (byte i=0;i<12;i++)data[i]=ds.read(); //We need 9 bytes (разрядность)
int raw=(data[1]<<8)|data[0]; //Переводим в температуру
float celsius=(float)raw/16.0; //Для ds18b20 делим на "16", для ds18s20 на "2"
return celsius;
}
//========== Считывание Влажности воздуха
void hmdtDht(){ //Reads the temp and humidity from the DHT sensor and sets the global variables for both
hmdt = (dht.readHumidity()+13); //Read humidity (percent)
tempC = (dht.readTemperature(false)-6); // Read temperature as Fahrenheit\Celsius (true)
// Serial.print("tempDht: ");
// Serial.println(tempC);
// Serial.print("hmdtDht: ");
// Serial.println(hmdt);
// Serial.println("...");
}
//========== Считывание Давления
void bar(){
tempB=bmp.readTemperature(); //-0.5 для bmp180 3.3v
pres=(bmp.readPressure()/133.3);
// alt=bmp.readAltitude();
// bmp.readSealevelPressure();
// bmp.readAltitude(101500);
// Serial.print("tempBmp: ");
// Serial.println(tempB);
// Serial.print("presBmp: ");
// Serial.println(pres);
// Serial.print("Alt: ");
// Serial.println(alt);
// Serial.println("+++");
}
//========== Проверяем интервал для отправки в ThingSpeak
void thingspeak(){
dallas();
tempDallas();
bar();
hmdtDht();
if (client.connect(serverTS,80)){ //Dns "184.106.153.149" or api.thingspeak.com:"80" or port
String postStr = apiKey;
postStr +="&field1=";
postStr += String(tempB);
postStr +="&field2=";
postStr += String(hmdt);
postStr +="&field3=";
postStr += String(pres);
postStr +="&field4=";
postStr += String(WiFi.RSSI());
postStr += "\r\n\r\n";
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
// Serial.println("Parametrs send to ThingSpeak");
}
client.stop();
// Serial.println ("Closing WiFi connection...");
WiFi.disconnect();
delay(100);
// Serial.print ("Entering deep sleep mode for... ");
// Serial.println (sleepTimeS); //mode - WAKE_RF_DEFAULT, WAKE_RFCAL, WAKE_NO_RFCAL, WAKE_RF_DISABLED
ESP.deepSleep(sleepTimeS * 1000000, WAKE_RF_DEFAULT); //Переходим в DeepSleep, (WAKE_NO_RFCAL);
delay(400); //Wait for deep sleep to happen
}
void loop(){
thingspeak();
}