Błędne pomiary dht11

xzihen
Posty: 71
Rejestracja: sob lis 23, 2019 2:21 pm
Lokalizacja: Łódź

Witajcie, używam softu multiboard w opcji inCan autorstwa @Espablo na wemos d1 mini. Wszytsko (przekaźniki, switche) śmiga z wyjątkiem pomiaru temperatury z dht11. Otrzymuję wartości kosmiczne ponad 500°C i wartości odczytane z wilgoci są też bardzo przekłamane. Wszystko pod wemosa podłączyłem według rozpiski z github'a autora, wykonałem również wymagane podciągnięcia na 4,7K ohm do 3.3V. Używam softu w wersji 2.7.2.

Jestem pewien, że czujnik dht11, który zastosowałem jest w 100% sprawny, ponieważ był stosowany do odczytów na sofcie Zybiego.
Pozdrawiam
Awatar użytkownika
Xoggo
Posty: 182
Rejestracja: ndz mar 29, 2020 10:03 pm
Lokalizacja: Zbąszynek

Zmień soft lub przejdź na nową bibliotekę i w 30 sekund na Wemosie wgraj sobie obsługę poszczególnych GPIO w jakiej konfiguracji sobie tylko zechcesz.
xzihen
Posty: 71
Rejestracja: sob lis 23, 2019 2:21 pm
Lokalizacja: Łódź

ok, czy jest kod źródłowy dla inCan do ardurino ide ?
Pozdrawiam
Awatar użytkownika
Xoggo
Posty: 182
Rejestracja: ndz mar 29, 2020 10:03 pm
Lokalizacja: Zbąszynek

xzihen pisze: śr maja 20, 2020 11:43 am
Tu masz kod do Wemosa z DHT22 i przekaźnikiem. Potrenuj sobie na nim.

Kod: Zaznacz cały

#include <ESP8266WiFi.h>
#define SUPLADEVICE_CPP
#include <SuplaDevice.h>
#include <ESP8266WebServer.h>
#include <DNSServer.h>
#include <ESP8266mDNS.h>
#include <ESP8266HTTPUpdateServer.h>
extern "C" {
#include "user_interface.h"
}
// Include the libraries we need


#include <DHT.h>
#define DHTPIN 2
#define DHTTYPE DHT22
 
// Setup a DHT instance
DHT dht(DHTPIN, DHTTYPE);
#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port 2 on the Arduino
#define ONE_WIRE 1
#define TEMPERATURE_PRECISION 10  // rozdzielczość czujnika DS 9 -12 bit

// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);



 


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


WiFiClient client;
const char* host = "supla";
const char* update_path = "/supla";
const char* update_username = "admin";
const char* update_password = "supla";

ESP8266WebServer httpServer(81);
ESP8266HTTPUpdateServer httpUpdater;

// Obsługa czujnika DHT22 lub BME280 itp
void get_temperature_and_humidity(int channelNumber, double *temp, double *humidity) {

    *temp = dht.readTemperature();
    *humidity = dht.readHumidity();

    if ( isnan(*temp) || isnan(*humidity) ) {
      *temp = -275;
      *humidity = -1;
    }
}


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

    double t = -275;
          switch(channelNumber)
         {

            case 1:
         sensors.requestTemperatures();
         t = sensors.getTempCByIndex(0);
        Serial.println(t);
                    break;
            case 2:
         sensors.requestTemperatures();
         t = sensors.getTempCByIndex(0);
        Serial.println(t);
                    break;
            case 3:
         t = WiFi.RSSI();
        Serial.println(t);
                    break;
     
          }
         
    return t;  
}




void setup() {
  Serial.begin(115200);
  delay(10);

  wifi_station_set_hostname("Supla-Sypialnia");  //nazwa w sieci lokalnej
  WiFi.softAPdisconnect(true); // wyłączenie rozgłaszania sieci ESP

  // Inicjalizacja DS18B20
  sensors.begin();
  SuplaDevice.setTemperatureCallback(&get_temperature);


  // Init DHT library 
  dht.begin(); 
  // Set temperature/humidity callback
  SuplaDevice.setTemperatureHumidityCallback(&get_temperature_and_humidity);
  
  // Replace the falowing GUID
  uint8_t mac[WL_MAC_ADDR_LENGTH];
  WiFi.macAddress(mac);
  char GUID[SUPLA_GUID_SIZE] = {0xC1,0x1B,0x91,0x46,0x51,0xB0,0x7B,0xC0,0x82,0xF0,0x6E,0x6A,0x2E,0x70,0xC2,0x8C};
  // with GUID that you can retrieve from https://www.supla.org/arduino/get-guid



 // CHANNEL0 - DHT22
  SuplaDevice.addDHT22();                // DHT22 na GPIO02 (D4) 
  // CHANNEL1,2 DS
  SuplaDevice.addDS18B20Thermometer(); 
  SuplaDevice.addDS18B20Thermometer();// DS na GPIO14 (D5)
  SuplaDevice.addDS18B20Thermometer();  //wifi
  //CHANNEL3 - RELAY                 
  SuplaDevice.addRelay(5); 


  
  


  SuplaDevice.setName("Sypialnia");
  SuplaDevice.begin(GUID,              // Global Unique Identifier 
                    mac,               // Ethernet MAC address
                    "192.168.1.10",  // SUPLA server address
                    1,                 // Location ID 
                    "0000");               // Location Password

  Serial.println();
  Serial.println("Uruchamianie serwera aktualizacji...");
  WiFi.mode(WIFI_STA);

  MDNS.begin(host);
  httpUpdater.setup(&httpServer, update_path, update_username, update_password);
  httpServer.begin();
  MDNS.addService("http", "tcp", 81);
  Serial.printf("HTTPUpdateServer ready! Open http://%s.local%s in your browser and login with username '%s' and password '%s'\n", host, update_path, update_username, update_password);
}

void loop() {

  SuplaDevice.iterate();
  SuplaDevice.setTemperatureCallback(&get_temperature);
  SuplaDevice.setTemperatureHumidityCallback(&get_temperature_and_humidity);
  httpServer.handleClient();

}

// 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;
  return cb;
}
Zawsze też możesz pobawić się w Primary GUI https://github.com/krycha88/Primary_GUI
ODPOWIEDZ

Wróć do „Pomoc”