BME280 + DS18B20 + LCD20x4

piomar2
Posty: 237
Rejestracja: pt kwie 26, 2019 5:32 pm
Lokalizacja: Bukowice

czw sty 30, 2020 9:38 am

Hej!

@BlackAdder
Tak tą wartość zmieniaj (-190) aż skorygujesz ciśnienie do swojego miejsca...

@Slawek77 miał problem z OLED-em... ;)
Baza jest - można sobie poukładać po swojemu.
IMG_20200130_102011.jpg
IMG_20200130_102011.jpg (1.7 MiB) Przejrzano 159 razy

Kod: Zaznacz cały

/* 
 * BME 280 + DS18B20 + OLED 1,3
 * D1 - SCL
 * D2 - SDA
 * D4 - DS18B20
 * OLED 1,3
*/

#include <OneWire.h>
#include <DallasTemperature.h>
#include "SH1106Wire.h" //----- 1.3 Oled ---
SH1106Wire display(0x3c,4,5);  // D2-SDA  D1-SCL ----- 1.3 Oled ---

#include <srpc.h>
#include <log.h>
#include <eh.h>
#include <proto.h>
#include <IEEE754tools.h>
// We define our own ethernet layer
#define SUPLADEVICE_CPP
#include <SuplaDevice.h>
#include <lck.h>

#include <WiFiClient.h>
#include <ESP8266WiFiType.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiScan.h>
#include <ESP8266WiFiMulti.h>
#include <WiFiServer.h>
#include <ESP8266WiFiGeneric.h>
#include <WiFiClientSecure.h>
#include <ESP8266WiFiAP.h>
#include <ESP8266WiFiSTA.h>
#include <WiFiUdp.h>

#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Adafruit_BME280 bme; // I2C
#include <DHT.h>
#define DHTPIN 0 
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

OneWire oneWire(2);
DallasTemperature sensors(&oneWire);

WiFiClient client;

// Setup Supla connection
const char* ssid     = "xxxxxx";
const char* password = "xxxxxx";

float t1;// Temp DS18B20
float t2;// Temp z BME
float wilg; // Wilg z BME
int cisn; // Cisn z BME

double get_pressure(int channelNumber, double pressure) {
   
// pressure = bme.readPressure() / 100.0F;
pressure = (bme.readPressure()-200) / 100.0F;//korekcja ciśnienia
cisn = pressure;
 
    Serial.print("Pressure = ");
    Serial.print(bme.readPressure()/100);
    Serial.println(" hPa");
    Serial.println(cisn);
    return  pressure;   
  }
  
void get_temperature_and_humidity(int channelNumber, double *temp, double *humidity) {

  *temp = bme.readTemperature();
  t2 = *temp;
     t2=(t2-1.7);//korekta temperatury BME - taka jak w cloudzie
   *humidity = bme.readHumidity();
  wilg = *humidity;
   if ( isnan(*temp) || isnan(*humidity) ) {
    *temp = -275;
    *humidity = -1;
  }
}

// DS18B20 Sensor read implementation
double get_temperature(int channelNumber, double last_val) {

    double t = -275;
      if ( sensors.getDeviceCount() > 0 )
      {
       sensors.requestTemperatures();
       t = sensors.getTempCByIndex(0);
       t1=t;
       return t;     
      }
}
void setup() {
  
  Serial.begin(115200);  delay(10);
  display.init();
  display.flipScreenVertically();
  display.setContrast(255);
  display.clear();
  display.setContrast(100, 241, 64);
  display.setTextAlignment(TEXT_ALIGN_LEFT); 
  display.setFont(ArialMT_Plain_10);
      
  Wire.begin(4,5);
  bme.begin(0x76);

  // Replace the falowing GUID
  char GUID[SUPLA_GUID_SIZE] = {0x9A,0x20,0xD3,0x03,0x9D,0xDE,0x86,0xE8,0x57,0xCA,0x42,0x75,0xB8,0x0C,0xD4,0x7E};
 
  // with GUID that you can retrieve from https://www.supla.org/arduino/get-guid

  // Ethernet MAC address
  uint8_t mac[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

 // Init DS18B20 library
  sensors.begin();
   sensors.setResolution(10);//rozdzielczosc DS-a    
    
 //SuplaDevice **************************************
   SuplaDevice.addDS18B20Thermometer();
   SuplaDevice.addDHT22();
   SuplaDevice.addPressureSensor();  // cisnienie
  
  //************************************************

  SuplaDevice.setName("BME280+DS18B20+OLED");
  SuplaDevice.begin(GUID,              // Global Unique Identifier 
                    mac,               // Ethernet MAC address
                    "svrx.supla.org",  // SUPLA server address
                    xxxx,                 // Location ID 
                    "xxxx");               // Location Password
}

void loop() {

  SuplaDevice.iterate();

          display.clear();
          display.drawString(1, 1, "Cisn bmp:");
          display.drawString(90, 1, "hPa");
          display.drawString(1, 16, "Temp bmp:");
          display.drawString(90, 16, "ºC"); 
          display.drawString(1, 31, "Wilg bmp:"); 
          display.drawString(90, 31, "%"); 
          display.drawString(1, 47, "Temp ds :"); 
          display.drawString(90, 47, "ºC"); 
          display.drawString(60, 1, String(cisn));
          display.drawString(60, 16, String(t2,1)); 
          display.drawString(60, 31, String(wilg,1));
          display.drawString(60, 47, String(t1,1));  
          display.display();   
}

// Supla.org ethernet layer
    int supla_arduino_tcp_read(void *buf, int count) {
        _supla_int_t size = client.available();
       
        if ( size > 0 ) {
            if ( size > count ) size = count;
            return client.read((uint8_t *)buf, size);
        };
    
        return -1;
    };
    
    int supla_arduino_tcp_write(void *buf, int count) {
        return client.write((const uint8_t *)buf, count);
    };
    
    bool supla_arduino_svr_connect(const char *server, int port) {
          return client.connect(server, 2015);
    }
    
    bool supla_arduino_svr_connected(void) {
          return client.connected();
    }
    
    void supla_arduino_svr_disconnect(void) {
         client.stop();
    }
    
    void supla_arduino_eth_setup(uint8_t mac[6], IPAddress *ip) {

       // Serial.println("WiFi init");
        WiFi.begin(ssid, password);

        while (WiFi.status() != WL_CONNECTED) {
            delay(500);
        //    Serial.print(".");
        }

       // Serial.print("\nlocalIP: ");
       // Serial.println(WiFi.localIP());
       // Serial.print("subnetMask: ");
       // Serial.println(WiFi.subnetMask());
       // Serial.print("gatewayIP: ");
       // Serial.println(WiFi.gatewayIP());
    }

SuplaDeviceCallbacks supla_arduino_get_callbacks(void) {
          SuplaDeviceCallbacks cb;
          
          cb.tcp_read = &supla_arduino_tcp_read;
          cb.tcp_write = &supla_arduino_tcp_write;
          cb.eth_setup = &supla_arduino_eth_setup;
          cb.svr_connected = &supla_arduino_svr_connected;
          cb.svr_connect = &supla_arduino_svr_connect;
          cb.svr_disconnect = &supla_arduino_svr_disconnect;
          cb.get_temperature = &get_temperature;
          cb.get_temperature_and_humidity = &get_temperature_and_humidity; 
          cb.get_rgbw_value = NULL;
          cb.set_rgbw_value = NULL;
          cb.get_pressure = get_pressure; 
          
          return cb;
}

Ostatnio zmieniony ndz lut 02, 2020 7:08 pm przez piomar2, łącznie zmieniany 2 razy.
Awatar użytkownika
Dawid84
Posty: 125
Rejestracja: pn sty 14, 2019 12:45 pm
Lokalizacja: Piekary Śląskie

pt sty 31, 2020 3:31 pm

Jest jakiś łopatologiczny schemat jak to pospinac zeby dzialalo z oled-em.
Pozdrawiam
Dawid
piomar2
Posty: 237
Rejestracja: pt kwie 26, 2019 5:32 pm
Lokalizacja: Bukowice

pt sty 31, 2020 3:55 pm

/*
* BME 280 + DS18B20 + OLED 1,3
* D1 - SCL - BME i OLED
* D2 - SDA - BME i OLED
* Zasilanie BME i OLEDA - 3V3
* D4 - DS18B20
* OLED 1,3
*/
piomar2
Posty: 237
Rejestracja: pt kwie 26, 2019 5:32 pm
Lokalizacja: Bukowice

pt sty 31, 2020 6:35 pm

A tutaj wersja z oledem 0,96 cala i włączaniem wyświetlania na 15 sek
;)



Kod: Zaznacz cały

/* 
 * BME 280 + DS18B20 + OLED 0,96
 * D1 - SCL - BME i OLED
 * D2 - SDA - BME i OLED
 * Zasilanie BME i OLEDA - 3V3
 * D4 - DS18B20
 * OLED 0,96
 * D6 (do masy)- załączenie wyświetlania OLED-a na 15 sek
*/

#include <OneWire.h>
#include <DallasTemperature.h>

#include "SSD1306Wire.h" 
SSD1306Wire display(0x3c,4,5);  // D2-SDA  D1-SCL ----- OLED 0,96 ---

#include <srpc.h>
#include <log.h>
#include <eh.h>
#include <proto.h>
#include <IEEE754tools.h>
// We define our own ethernet layer
#define SUPLADEVICE_CPP
#include <SuplaDevice.h>
#include <lck.h>

#include <WiFiClient.h>
#include <ESP8266WiFiType.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiScan.h>
#include <ESP8266WiFiMulti.h>
#include <WiFiServer.h>
#include <ESP8266WiFiGeneric.h>
#include <WiFiClientSecure.h>
#include <ESP8266WiFiAP.h>
#include <ESP8266WiFiSTA.h>
#include <WiFiUdp.h>

#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Adafruit_BME280 bme; // I2C
#include <DHT.h>
#define DHTPIN 0 
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);

OneWire oneWire(2);
DallasTemperature sensors(&oneWire);

WiFiClient client;

// Setup Supla connection
const char* ssid     = "xxxx";
const char* password = "xxxx";

float t1;// Temp DS18B20
float t2;// Temp z BME
float wilg; // Wilg z BME
int cisn; // Cisn z BME

double get_pressure(int channelNumber, double pressure) {
   
// pressure = bme.readPressure() / 100.0F;
pressure = (bme.readPressure()-200) / 100.0F;//korekcja ciśnienia
cisn = pressure;
 
    Serial.print("Pressure = ");
    Serial.print(bme.readPressure()/100);
    Serial.println(" hPa");
    Serial.println(cisn);
    return  pressure;   
  }
  
void get_temperature_and_humidity(int channelNumber, double *temp, double *humidity) {

  *temp = bme.readTemperature();
  t2 = *temp;
     t2=(t2-1.7);//korekta temperatury BME - taka jak w cloudzie
   *humidity = bme.readHumidity();
  wilg = *humidity;
   if ( isnan(*temp) || isnan(*humidity) ) {
    *temp = -275;
    *humidity = -1;
  }
}

// DS18B20 Sensor read implementation
double get_temperature(int channelNumber, double last_val) {

    double t = -275;
      if ( sensors.getDeviceCount() > 0 )
      {
       sensors.requestTemperatures();
       t = sensors.getTempCByIndex(0);
       t1=t;
       return t;     
      }
}
void setup() {
   pinMode(12, INPUT_PULLUP);
  Serial.begin(115200);  delay(10);
  display.init();
  display.flipScreenVertically();
  display.setContrast(255);
  display.clear();
  display.setContrast(100, 241, 64);
  display.setTextAlignment(TEXT_ALIGN_LEFT); 
  display.setFont(ArialMT_Plain_10);
      
  Wire.begin(4,5);
  bme.begin(0x76);

  // Replace the falowing GUID
  char GUID[SUPLA_GUID_SIZE] = {0xD8,0x0A,0x14,0xC8,0x4C,0xAB,0x10,0xFD,0x18,0x98,0x59,0xDD,0x8D,0x40,0x9E,0x5A};
 
  // with GUID that you can retrieve from https://www.supla.org/arduino/get-guid

  // Ethernet MAC address
  uint8_t mac[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

 // Init DS18B20 library
  sensors.begin();
   sensors.setResolution(10);//rozdzielczosc DS-a    
    
 //SuplaDevice **************************************
   SuplaDevice.addDS18B20Thermometer();
   SuplaDevice.addDHT22();
   SuplaDevice.addPressureSensor();  // cisnienie
  
  //************************************************

  SuplaDevice.setName("BME280+DS18B20+OLED");
  SuplaDevice.begin(GUID,              // Global Unique Identifier 
                    mac,               // Ethernet MAC address
                    "svr?.supla.org",  // SUPLA server address
                    xxxx,                 // Location ID 
                    "xxxx");               // Location Password

//WiFi.softAPdisconnect(true);//wył rozgłaszania wifi                    
}

void loop() {

  SuplaDevice.iterate();

      if (digitalRead(12)==LOW){
          display.clear();
          display.drawString(52, 1, "AIRLY");
          display.drawString(52, 4, "_____");
          
          display.drawString(11, 17, "Cisn bmp:");
          display.drawString(100, 17, "hPa");
          display.drawString(70, 17, String(cisn));
          
          display.drawString(11, 28, "Temp bmp:");
          display.drawString(100, 28, "ºC");
          display.drawString(70, 28, String(t2,1)); 
          
          display.drawString(11, 39, "Wilg bmp:"); 
          display.drawString(100, 39, "%"); 
          display.drawString(70, 39, String(wilg,1));
          
          display.drawString(11, 50, "Temp ds :"); 
          display.drawString(100, 50, "ºC"); 
          display.drawString(70, 50, String(t1,1));
           
          display.display();   
 delay(15000);
 display.clear();
 display.display();  
      }
}

// Supla.org ethernet layer
    int supla_arduino_tcp_read(void *buf, int count) {
        _supla_int_t size = client.available();
       
        if ( size > 0 ) {
            if ( size > count ) size = count;
            return client.read((uint8_t *)buf, size);
        };
    
        return -1;
    };
    
    int supla_arduino_tcp_write(void *buf, int count) {
        return client.write((const uint8_t *)buf, count);
    };
    
    bool supla_arduino_svr_connect(const char *server, int port) {
          return client.connect(server, 2015);
    }
    
    bool supla_arduino_svr_connected(void) {
          return client.connected();
    }
    
    void supla_arduino_svr_disconnect(void) {
         client.stop();
    }
    
    void supla_arduino_eth_setup(uint8_t mac[6], IPAddress *ip) {

       // Serial.println("WiFi init");
        WiFi.begin(ssid, password);

        while (WiFi.status() != WL_CONNECTED) {
            delay(500);
        //    Serial.print(".");
        }

       // Serial.print("\nlocalIP: ");
       // Serial.println(WiFi.localIP());
       // Serial.print("subnetMask: ");
       // Serial.println(WiFi.subnetMask());
       // Serial.print("gatewayIP: ");
       // Serial.println(WiFi.gatewayIP());
    }

SuplaDeviceCallbacks supla_arduino_get_callbacks(void) {
          SuplaDeviceCallbacks cb;
          
          cb.tcp_read = &supla_arduino_tcp_read;
          cb.tcp_write = &supla_arduino_tcp_write;
          cb.eth_setup = &supla_arduino_eth_setup;
          cb.svr_connected = &supla_arduino_svr_connected;
          cb.svr_connect = &supla_arduino_svr_connect;
          cb.svr_disconnect = &supla_arduino_svr_disconnect;
          cb.get_temperature = &get_temperature;
          cb.get_temperature_and_humidity = &get_temperature_and_humidity; 
          cb.get_rgbw_value = NULL;
          cb.set_rgbw_value = NULL;
          cb.get_pressure = get_pressure; 
          
          return cb;
}

IMG_20200201_173811.jpg
IMG_20200201_173811.jpg (1.07 MiB) Przejrzano 157 razy
Ostatnio zmieniony ndz lut 02, 2020 7:11 pm przez piomar2, łącznie zmieniany 2 razy.
elmaya
Posty: 661
Rejestracja: śr cze 27, 2018 5:48 pm
Lokalizacja: Sevilla

pt sty 31, 2020 7:06 pm

masz także Oled 0,96
Widać tylko za pomocą lupy takiej jak ja. :lol:
świetny przyjaciel pracy
piomar2
Posty: 237
Rejestracja: pt kwie 26, 2019 5:32 pm
Lokalizacja: Bukowice

pt sty 31, 2020 7:11 pm

If I see an eyeglass old man, young people can do it too ... hi, hi :lol:
Awatar użytkownika
Dawid84
Posty: 125
Rejestracja: pn sty 14, 2019 12:45 pm
Lokalizacja: Piekary Śląskie

pt sty 31, 2020 7:17 pm

piomar2 wylaczenie po 15 sec a kak go potem włączyć? ewentualnie zeby swiecil sie stale,
Pozdrawiam
Dawid
piomar2
Posty: 237
Rejestracja: pt kwie 26, 2019 5:32 pm
Lokalizacja: Bukowice

pt sty 31, 2020 7:30 pm

A po co ma się oled wypalać? :D żarty
W tej wersji nie ma takiej opcji...ale można coś zrobić...
elmaya
Posty: 661
Rejestracja: śr cze 27, 2018 5:48 pm
Lokalizacja: Sevilla

pt sty 31, 2020 8:22 pm

zgodnie z kodem, Gpio 12 - D6 do uziemienia, aby pozostało włączone
piomar2
Posty: 237
Rejestracja: pt kwie 26, 2019 5:32 pm
Lokalizacja: Bukowice

pt sty 31, 2020 8:54 pm

Oczywista oczywistość. Tylko trzeba zamiast przycisku mono dać przełącznik. ;)
ODPOWIEDZ