Odczyt danych temperatury z DHT11 w Ardurino IDE

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

pt maja 22, 2020 2:51 pm

a co to za przekaźniki?
xzihen
Posty: 20
Rejestracja: sob lis 23, 2019 2:21 pm
Lokalizacja: Łódź

pt maja 22, 2020 3:11 pm

dobrze, jak znajdę chwilkę czasu aby to sprawdzić to odrazu się odezwę. Pozdrawiam
Pozdrawiam
xzihen
Posty: 20
Rejestracja: sob lis 23, 2019 2:21 pm
Lokalizacja: Łódź

sob maja 23, 2020 10:38 pm

@piomar2, w sprawie przekaźników to są to takie:
Załączniki
Screenshot_20200524-003736_Allegro.jpg
Screenshot_20200524-003736_Allegro.jpg (420.49 KiB) Przejrzano 75 razy
Pozdrawiam
piomar2
Posty: 350
Rejestracja: pt kwie 26, 2019 5:32 pm
Lokalizacja: Bukowice

ndz maja 24, 2020 5:02 am

Przełącz zasilanie przekaźnika na 3V3 i zadziała. Ten po lewej działa na 5V
Pu.jpg
Pu.jpg (719.14 KiB) Przejrzano 51 razy
xzihen
Posty: 20
Rejestracja: sob lis 23, 2019 2:21 pm
Lokalizacja: Łódź

ndz maja 24, 2020 5:04 pm

Dobrze, działa. Dziękuję za cenną podpowiedź @piomar2 :D teraz zaczynają się schodki w mojej głowie. Zależy mi teraz na dodaniu możliwości sterowania stanem przekaźników poprzez przyciski podpięte do któryś gpio, tak aby móc sterować przekaźnikiem na przemiennie z przełącznika na ścianie z suplą :D
Pozdrawiam
piomar2
Posty: 350
Rejestracja: pt kwie 26, 2019 5:32 pm
Lokalizacja: Bukowice

ndz maja 24, 2020 5:29 pm

Kod: Zaznacz cały

 //----------------------------------------------------------
  // podanie "0" na 12 (D6) wlacza 13 (D7), "1" gasi 13
  SuplaDevice.addRelayButton(13, 12, INPUT_TYPE_BTN_BISTABLE);
  //---------------------------------------------------------- 
Może to Tobie pomoże...oczywiście musisz dopasować sobie gpio.
xzihen
Posty: 20
Rejestracja: sob lis 23, 2019 2:21 pm
Lokalizacja: Łódź

ndz maja 24, 2020 6:21 pm

Dodam jeszcze, że muszę to wykonać na przyciskach zwykłych (nie tych dzwonkowych). Nie wiem jak rozwiązać problem, który powstał mi w głowie odnośnie dodania tych fizycznych przełączników. Chyba wiem jak to wykonać z użyciem tych przełączników dzwonkowych, lecz nie wiem jak to wykonać z użyciem tradycyjnych wyłączników. W oparciu o wątek o nauce tworzenia własnych firmwaerów na forum powstało u mnie tak coś:

Kod: Zaznacz cały

//arduino 1.8.3, wemos mini
//DHT11 na pinie D4 GPIO2


#include <srpc.h>
#include <log.h>
#include <eh.h>
#include <IEEE754tools.h>
#define SUPLADEVICE_CPP
#include <SuplaDevice.h>
#include <lck.h>

#include <WiFiClient.h>
#include <ESP8266WiFi.h>
#include <WiFiServer.h>

#include <Wire.h>

#include <DHT.h>
#define DHTPIN 2 //pin pod którym jest nasz czujnik DHT11
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);

WiFiClient client;

const char* ssid     = "wlan-g";
const char* password = "Aligator1";

int button1 = 0; //wartosc początkowa dla przycisku 1
int button2 = 0; //wartosc początkowa dla przycisku 1

//----------------- DHT11 ---------------------------------------
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;
    }
}
//--------------------------------------------------------
void setup() {

  pinMode (16, INPUT_PULLUP); //ustawiamy Pin 16 (D0) na przycisk
  
  Serial.begin(115200);

  dht.begin();
  
  delay(10);
  
  SuplaDevice.setTemperatureHumidityCallback(&get_temperature_and_humidity);
  
 // with GUID that you can retrieve from https://www.supla.org/arduino/get-guid

  // Replace the falowing GUID
 char GUID[SUPLA_GUID_SIZE] = {0x8C,0xB1,0xEF,0x66,0x3B,0xEB,0x50,0x0F,0x9F,0x8F,0xE3,0xF5,0xD8,0x71,0x78,0x6F};

  // Ethernet MAC address
  uint8_t mac[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  
  // CHANNEL0 - DHT11 
  SuplaDevice.addDHT11();

  // CHANNEL1 - Kontraktron 
  SuplaDevice.addSensorNO(4);

  // CHANNEL2 - RELAY
  SuplaDevice.addRelay(12, true); // d6

  // CHANNEL3 - RELAY
  SuplaDevice.addRelay(13, true); // d7


  SuplaDevice.setName("testowe");
  SuplaDevice.begin(GUID,              // Global Unique Identifier 
                    mac,               // Ethernet MAC address
                    "svr14.supla.org",  // SUPLA server address
                    #####,                 // Location ID 
                    "####");               // Location Password
}

//--------------------------------------------------------
void loop() {
      
  SuplaDevice.iterate();

//osługa przełączników

  //przełącznik 1

  TSD_SuplaChannelNewValue przycisk1; //ustaw nazwe dla przycisku
  przycisk1.SenderID = 1; // Powiadom clouda, że załączasz recznie. W przypadku siłowników ma być 0
  przycisk1.ChannelNumber = 2; // nr kanału przekaźnika
  przycisk1.DurationMS = 0; //czas wlaczenia

  button1 = digitalRead(16); 
    if(digitalRead(16)==LOW){ 
      delay(100);
    
    if(digitalRead(16)==LOW){

      if(button1 == 0) { //jesli wylaczony to wlacz
        przycisk1.value[1] = !przycisk1.value[0]; 
        SuplaDevice.channelSetValue(&przycisk1);
        button1 = 1;
        while(digitalRead(16)==LOW);
        delay(20);
     }

      if(button1 == 1) { //jesli wlaczaony to wlacz
        przycisk1.value[0] = !przycisk1.value[0]; 
        SuplaDevice.channelSetValue(&przycisk1);
        button1 = 0;
        while(digitalRead(16)==LOW);
        delay(20);
     }
      
    }   
   }

  //przełącznik 2

  TSD_SuplaChannelNewValue przycisk2;
  przycisk2.SenderID = 1; 
  przycisk2.ChannelNumber = 3;
  przycisk2.DurationMS = 0; 

  button1 = digitalRead(14); 
    if(digitalRead(14)==LOW){ 
      delay(100);
    
    if(digitalRead(14)==LOW){
      przycisk2.value[0] = !przycisk2.value[0]; 
      SuplaDevice.channelSetValue(&przycisk2);
      while(digitalRead(14)==LOW);
      delay(20);
    }   
   }  

}

//-------------------------------------------------------- 
// 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) {

  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
            delay(500);
  }
}

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 = NULL;
  cb.get_temperature_and_humidity = &get_temperature_and_humidity; 
  cb.get_rgbw_value = NULL;
  cb.set_rgbw_value = NULL;

  return cb;
}
  
Mój zamysł nie działa do końca, ponieważ po podaniu LOW fizycznym przyciskiem na gpio16 zostaje zablokowana możliwość zmianu stanu przekaźnika poprzez suple... Występują również duże opóźnienia w raportowaniu stanu przekaźnika do supli spowodowane przez delay, ale nie byłem pewien jakie wartości będą odpowiednie.
Pozdrawiam
xzihen
Posty: 20
Rejestracja: sob lis 23, 2019 2:21 pm
Lokalizacja: Łódź

ndz maja 24, 2020 6:23 pm

@piomar2 niestety podczas pisania i testowania moich "wypocin" nie zauważyłem twojej odpowiedzi to tematu, czy mógłbyś sprawdzić to co napisałem, ponieważ wydaje mi się, że jestem na dobrej drodze :D
Pozdrawiam
piomar2
Posty: 350
Rejestracja: pt kwie 26, 2019 5:32 pm
Lokalizacja: Bukowice

ndz maja 24, 2020 6:40 pm

Jeżeli dobrze zrozumiałem to chcesz wykorzystać zwykłe włączniki. Jeżeli tak, to raczej trudno będzie je wyłączyć z clouda. Co innego przyciski mono (dzwonkowe). No ale kombinuj...
xzihen
Posty: 20
Rejestracja: sob lis 23, 2019 2:21 pm
Lokalizacja: Łódź

ndz maja 24, 2020 9:08 pm

sprawdziłem tą opcję:

Kod: Zaznacz cały

 //----------------------------------------------------------
  // podanie "0" na 12 (D6) wlacza 13 (D7), "1" gasi 13
  SuplaDevice.addRelayButton(13, 12, INPUT_TYPE_BTN_BISTABLE);
  //--------
Niestety w bilblio SuplaDevice nie ma addRelayButton i dostaje błąd kompilacji...
Załączniki
Screenshot_1.jpg
Screenshot_1.jpg (34.76 KiB) Przejrzano 23 razy
Pozdrawiam
ODPOWIEDZ