Untitled
unknown
plain_text
4 years ago
7.9 kB
25
Indexable
#include "DHT.h"
#include <SFE_BMP180.h>
#include <Wire.h>
#include <ESP8266WiFi.h>
#define DHTTYPE DHT22
#define DHTPIN 2
#define ALTITUDE 62.0 // Altitude of Gubin
DHT dht(DHTPIN, DHTTYPE);
SFE_BMP180 pressure;
string apiKey = "JUSTAPLACEHOLDER";
const char* ssid = "ssid";
const char* password = "haslo";
const char* host = "184.106.153.149";
void setup() {
pinMode(12, OUTPUT); // G LED
pinMode(15, OUTPUT); // R LED
pinMode(13, OUTPUT); // B LED
Serial.begin(115200); // <-- inicjalizacja konsoli szeregowej
dht.begin(); // <-- inicjalizacja czujnika DHT
if (pressure.begin()) // <-- inicjalizacja czujnika BMP
Serial.println("BMP180 init success");
else
{
Serial.println("BMP180 init fail\n\n");
}
// polaczenie z wifi
WiFi.mode(WIFI_STA);
Serial.print("WiFi mode: ");
Serial.println(WiFiMode());
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
// pomiary
char status;
double T,P,p0,a;
float t = dht.readTemperature(); // odczyt temperatury
float h = dht.readHumidity(); // odczyt wilgotności powietrza
// Loop here getting pressure readings every 10 seconds.
// If you want sea-level-compensated pressure, as used in weather reports,
// you will need to know the altitude at which your measurements are taken.
// We're using a constant called ALTITUDE in this sketch:
Serial.println("BMP180:");
Serial.print("provided altitude: ");
Serial.print(ALTITUDE,0);
Serial.print(" meters, ");
Serial.print(ALTITUDE*3.28084,0);
Serial.println(" feet");
// If you want to measure altitude, and not pressure, you will instead need
// to provide a known baseline pressure. This is shown at the end of the sketch.
// You must first get a temperature measurement to perform a pressure reading.
// Start a temperature measurement:
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.
status = pressure.startTemperature();
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
// Retrieve the completed temperature measurement:
// Note that the measurement is stored in the variable T.
// Function returns 1 if successful, 0 if failure.
status = pressure.getTemperature(T);
if (status != 0)
{
// Print out the measurement:
Serial.print("temperature: ");
Serial.print(T,2);
Serial.print(" deg C, ");
Serial.print((9.0/5.0)*T+32.0,2);
Serial.println(" deg F");
// Start a pressure measurement:
// The parameter is the oversampling setting, from 0 to 3 (highest res, longest wait).
// If request is successful, the number of ms to wait is returned.
// If request is unsuccessful, 0 is returned.
status = pressure.startPressure(3);
if (status != 0)
{
// Wait for the measurement to complete:
delay(status);
// Retrieve the completed pressure measurement:
// Note that the measurement is stored in the variable P.
// Note also that the function requires the previous temperature measurement (T).
// (If temperature is stable, you can do one temperature measurement for a number of pressure measurements.)
// Function returns 1 if successful, 0 if failure.
status = pressure.getPressure(P,T);
if (status != 0)
{
// Print out the measurement:
Serial.print("absolute pressure: ");
Serial.print(P,2);
Serial.print(" mb, ");
Serial.print(P*0.0295333727,2);
Serial.println(" inHg");
// The pressure sensor returns abolute pressure, which varies with altitude.
// To remove the effects of altitude, use the sealevel function and your current altitude.
// This number is commonly used in weather reports.
// Parameters: P = absolute pressure in mb, ALTITUDE = current altitude in m.
// Result: p0 = sea-level compensated pressure in mb
p0 = pressure.sealevel(P,ALTITUDE); // we're at 1655 meters (Boulder, CO)
Serial.print("relative (sea-level) pressure: ");
Serial.print(p0,2);
Serial.print(" mb, ");
Serial.print(p0*0.0295333727,2);
Serial.println(" inHg");
// On the other hand, if you want to determine your altitude from the pressure reading,
// use the altitude function along with a baseline pressure (sea-level or other).
// Parameters: P = absolute pressure in mb, p0 = baseline pressure in mb.
// Result: a = altitude in m.
a = pressure.altitude(P,p0);
Serial.print("computed altitude: ");
Serial.print(a,0);
Serial.print(" meters, ");
Serial.print(a*3.28084,0);
Serial.println(" feet");
}
else Serial.println("error retrieving pressure measurement\n");
}
else Serial.println("error starting pressure measurement\n");
}
else Serial.println("error retrieving temperature measurement\n");
}
else Serial.println("error starting temperature measurement\n");
// czy odczytano wartości DHT11?
if (isnan(t) || isnan(h))
{
// NIE -> informacja o błędzie
Serial.println(">>>>>>>>>>>>>>>>>>>>Blad odczytu danych z czujnika!");
}
else
{
// TAK -> wysyłamy wyniki przez port szeregowy
Serial.print("DHT22: Wilgotnosc: ");
Serial.print(h);
Serial.print(" % ");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.println(" *C");
}
Serial.println();
int f = 10*analogRead(A0);
// koniec pomiarów
//przygotowanie danych do wysłania na serwer Thingspeak
// convert T to string
char bufT[16];
String strT = dtostrf(T, 4, 1, bufT);
// convert h to string
char bufh[16];
String strh = dtostrf(h, 4, 1, bufh);
// convert P to string
char bufP[16];
String strP = dtostrf(P, 4, 1, bufP);
// convert t to string
char buft[16];
String strt = dtostrf(t, 4, 1, buft);
// convert f to string
char buff[16];
String strf = dtostrf(f, 4, 1, buff);
// prepare GET string
String getStr = "GET /update?api_key=";
getStr += apiKey;
getStr +="&field1=";
getStr += String(strT);
getStr +="&field2=";
getStr += String(strP);
getStr +="&field3=";
getStr += String(strt);
getStr +="&field4=";
getStr += String(strh);
getStr +="&field5=";
getStr += String(strf);
getStr += "\r\n\r\n";
// TCP connection
Serial.print("connecting to ");
Serial.println(host);
// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = 80;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
Serial.print("do wyslania:");
Serial.println(getStr);
// This will send the request to the server
client.print(getStr);
digitalWrite(12, HIGH);
delay(100);
digitalWrite(12, LOW);
/*
// Read all the lines of the reply from server and print them to Serial
while(client.available()){
String line = client.readStringUntil('\r');
Serial.print(line);
}
*/
Serial.println("closing connection");
Serial.println();
// thingspeak needs 15 sec delay between updates
delay(15000);
//delay(600000);
}
Editor is loading...