Dwa Czujniki DS18B20 każdy na innym GPIO

elektronik9
Posty: 23
Rejestracja: wt paź 13, 2020 11:01 am

Witam Wszystkich.
Jestem początkującym na ESP8266 - SUPLA.
Proszę o pomoc nie mogę dojść do tego żeby 2x ds18b20 były każdy na innym GPIO i bez wpisywania adresów czujników ds18b20. A dlatego tak chcę zrobić że co sezon bym przełączał na inne ds18b20 które by mierzyły w innym miejscu i wtedy bym musiał wczytywać nowe adresy a tego nie chcę gdyż to będzie zainstalowane poza moim miejscem zamieszkania.
Chciałbym dodać że programuję przez programator Arduino.
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

elektronik9 pisze: wt paź 20, 2020 10:31 am Witam Wszystkich.
Jestem początkującym na ESP8266 - SUPLA.
Proszę o pomoc nie mogę dojść do tego żeby 2x ds18b20 były każdy na innym GPIO i bez wpisywania adresów czujników ds18b20. A dlatego tak chcę zrobić że co sezon bym przełączał na inne ds18b20 które by mierzyły w innym miejscu i wtedy bym musiał wczytywać nowe adresy a tego nie chcę gdyż to będzie zainstalowane poza moim miejscem zamieszkania.
Chciałbym dodać że programuję przez programator Arduino.
Jeśli weźmiesz przykład "DallasTemperature" z SuplaDevice, to wystarczy wyrzucić kod od tej lini:
https://github.com/klew/arduino/blob/ad ... re.ino#L66
do
https://github.com/klew/arduino/blob/ad ... re.ino#L74

i wstawić:

Kod: Zaznacz cały

new Supla::Sensor::DS18B20(PIN_1);
new Supla::Sensor::DS18B20(PIN_2);
Widzimy się na Supla Offline Party vol. 2 :!:
elektronik9
Posty: 23
Rejestracja: wt paź 13, 2020 11:01 am

Bardzo dziękuję spróbuję to wypróbować tylko nie wiem będzie działać bo tu są adresy wpisane poszczególnych DS18B20 a mi chodzi żeby działało bez adresów bo jak jeden wpiszę to mi działa Ok. a chciałbym żeby było tak bez adresu na dwóch niezależnych GPIO.
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

elektronik9 pisze: wt paź 20, 2020 1:21 pm Bardzo dziękuję spróbuję to wypróbować tylko nie wiem będzie działać bo tu są adresy wpisane poszczególnych DS18B20 a mi chodzi żeby działało bez adresów bo jak jeden wpiszę to mi działa Ok. a chciałbym żeby było tak bez adresu na dwóch niezależnych GPIO.
Powyżej podałem przykład na dwa różne GPIO (PIN_1 i PIN_2) bez podawania adresów.
Widzimy się na Supla Offline Party vol. 2 :!:
elektronik9
Posty: 23
Rejestracja: wt paź 13, 2020 11:01 am

Wyświetla mi błąd : expected type-specifier before 'Supla'.
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

elektronik9 pisze: wt paź 20, 2020 2:18 pm Wyświetla mi błąd : expected type-specifier before 'Supla'.
Pokaż cały kod
Widzimy się na Supla Offline Party vol. 2 :!:
elektronik9
Posty: 23
Rejestracja: wt paź 13, 2020 11:01 am

Wyświetla mi błąd : expected type-specifier before 'Supla'.

Ja mam napisane Tak i nie ma błędu ale dalej jest coś nie tak bo wyświetla na obu to samo i coś ta led bardzo szybko miga.

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

OneWire oneWire_in(2); //(D4)
DallasTemperature sensors_in(&oneWire_in);

//------------------------------------------------
OneWire oneWire_out(4); //(D2)
DallasTemperature sensors_out(&oneWire_out);

Kod: Zaznacz cały


//==== WSZYSTKO DOBRZE DZILA NA SUPLA DOPISANE CZUJNIKI I PRZEKAZNIKI ============================


#include <srpc.h>
#include <log.h>
#include <eh.h>
#include <proto.h>
#include <IEEE754tools.h>

// Definiujemy własną warstwę ethernetową
#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>
//-------------------------------------------------

/*
 * This example requires Dallas Temperature Control library installed. 
 * https://github.com/milesburton/Arduino-Temperature-Control-Library
 */
// Add include to DS sensor
//#include <supla/sensor/DS18B20.h>   //Dopisane
//----------------------------------------------------

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

 //new Supla::Sensor::DS18B20(2);  //Dopisane
 //new Supla::Sensor::DS18B20(4);  //Dopisane

OneWire oneWire_in(2);   //(D4) //dodane K-7
DallasTemperature sensors_in(&oneWire_in);  //dodane

//------------------------------------------------
OneWire oneWire_out(4);   //(D2) //dodane 
DallasTemperature sensors_out(&oneWire_out);  //dodane

//****************************************************************************************

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

  
   
    double t = -275;
    
    if ( sensors_in.getDeviceCount() > 0 )
      {
         sensors_in.requestTemperatures();
         t = sensors_in.getTempCByIndex(0);  };
     
       
       return t; 
//};

//********************************************************************          
  //double get_temperature(int channelNumber, double last_val) {

    
 
     //double t = -275;
    
    if ( sensors_out.getDeviceCount() > 0 )
      {
         sensors_out.requestTemperatures();
         t = sensors_out.getTempCByIndex(0);  };        
 
        
        return t;  
        
 };
//******************************************************************************

#define Pin_D1 5    //senor styk 
//#define Pin_D3 0   //Wyjscie Nie dzila w SUPLA-> przeznaczony do instalowania softu
#define Pin_D5 14  //senor styk 
#define Pin_D6 12  //senor styk 
#define Pin_D7 13   //senor styk 
#define Pin_D8 15    //Przekaznik Dziala Zal(HIGH)tak ustawilem
#define Pin_D0 16   //Przekaznik Dziala Zal(HIGH)tak ustawilem 
//Pin_A0             //senor styk     Nie dziala

WiFiClient client;

// Setup Supla connection
 const char* ssid     = "***********"; //nazwa sieci WiFi
 const char* password = "***********"; //hasło do sieci
//=================================================================

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

 digitalWrite(Pin_D8, LOW);  //Przekaznik -> nie sprawdzone DOPISANE - K-5
 digitalWrite(Pin_D0, LOW);  //Przekaznik -> nie sprawdzone DOPISANE - K-6
 
  sensors_in.begin();  
  sensors_out.begin();  
  
  // Ustawianie wywołania zwrotnego w temperaturze
  //SuplaDevice.setTemperatureCallback(&get_temperature_in);  //dodane
  //SuplaDevice.setTemperatureCallback(&get_temperature_out);  //dodane

//**************** Do Nowej Plytki ******************************

//char GUID[SUPLA_GUID_SIZE] = {moj guid};
  char GUID[SUPLA_GUID_SIZE] = {0x16,0x2F,0xD1,0x0D,0x99,0x3E,0x54,0xDA,0x55,0xB3,0x55,0xB5,0x53,0xBF,0x4F,0x5B};
// z identyfikatorem GUID, który można pobrać z https://www.supla.org/arduino/get-guid

//MAC adres urządzenia //TRZEBA SPRAWDZIC PO POLACZENIU.W RUTERZE

  uint8_t mac[6] = {0x54, 0x5F, 0xBA, 0x52, 0xDA, 0x2C};

//******************************************************************

  // * Posiadanie urządzenia już zarejestrowanego w cloud.supla.org,
  // * chcesz zmienić sekwencję KANAŁU lub usunąć którykolwiek z nich,
  // * następnie należy również usunąć samo urządzenie z cloud.supla.org.
  // * W przeciwnym razie pojawi się błąd "Konflikt kanału!".
  
    
  // CHANNEL0 - Opening sensor (Normal Open)   
  SuplaDevice.addSensorNO(Pin_D1, true);   


  // CHANNEL1 - Opening sensor (Normal Open)   
 //SuplaDevice.addSensorNO(Pin_D2, true);            

    // CHANNEL1 - Opening sensor (Normal Open)  
 SuplaDevice.addSensorNO(Pin_D5, true);  
   
   // CHANNEL2 - Opening sensor (Normal Open)   
 SuplaDevice.addSensorNO(Pin_D6, true);          

   // CHANNEL3 - Opening sensor (Normal Open)    
 SuplaDevice.addSensorNO(Pin_D7, true);           

    // CHANNEL4 - RELAY
 SuplaDevice.addRelay(Pin_D8);   //(15) PRZEKAZNIK Ster(HIGH)

   // CHANNEL5 - RELAY
 SuplaDevice.addRelay(Pin_D0);   //(16) PRZEKAZNIK Ster(HIGH) 

    // CHANNEL5 - RELAY
 //SuplaDevice.addRelay(Pin_D3);    //(0) Nie dziala Jest uzyty w SUPLA do Softu

   // CHANNEL6 - Opening sensor (Normal Open)
  //SuplaDevice.addSensorNO(A0);  //A0 - Numer pinu, pod którym podłączony jest czujnik
                               //Wywołanie SuplaDevice.addSensorNO(A0, true) z dodatkowym parametrem "true"
                               //aby włączyć wewnętrzny rezystor podciągania

//**************************************************
   // CHANNEL6 - Thermometer DS18B20
  SuplaDevice.addDS18B20Thermometer();
 
//**************************************************  
//**************************************************
   // CHANNEL7 - Thermometer DS18B20
  SuplaDevice.addDS18B20Thermometer();
  
//**************************************************  

   //CHANNEL8 - Opening sensor (Normal Open)
   //SuplaDevice.addSensorNO(A0);


 SuplaDevice.begin(GUID,              // Global Unique Identifier 
                    mac,               // Ethernet MAC address
                    "svr43.supla.org",  // SUPLA server address
                    747,                // Location ID 
                    "83b6");           // Location Password  

}  //Koniec void setup()
//================================================================

void loop() {
  
  SuplaDevice.iterate();
  Serial.println(sensors_in.getTempCByIndex(0));  //dopisane
  Serial.println(sensors_out.getTempCByIndex(0));  //dopisane

//*********************************************************
 }  //Koniec void loop()
//=========================================================

// 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 = NULL;
          cb.get_temperature_and_humidity = NULL;
          cb.get_rgbw_value = NULL;
          cb.set_rgbw_value = NULL;
          
          return cb;
}
//======== KONIEC PROGRAMU ======================================

Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

Pobierz sobie bibliotekę SuplaDevice z brancha develop z oficjalnego githuba Supli, albo ode mnie z github.com/klew/arduino
Następnie wybierz w arduino przykład dallastemperature i zrób taką zmianę jak pisałem.

Twój aktualny kod to w większości od napisany na starą wersję biblioteki
Widzimy się na Supla Offline Party vol. 2 :!:
elektronik9
Posty: 23
Rejestracja: wt paź 13, 2020 11:01 am

Supla Device jak instalowałem pisze że już jest a tą drugą develop jest nie zgodne.
Mam prośbę czy do tego co mam nie można dopisać drugiego czujnika DS18B20 z innego Pinu bez adresu ?
Mam dużo układów które mi działają poprawnie i za bardzo się nie znam i nie chciałbym sobie namieszać bo później i w innych mógłbym mieć problemy.
Awatar użytkownika
klew
Posty: 8184
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

Wszystko się da.
Tylko to trzeba zrobić zupełnie inaczej, niż pisałem wcześniej.

Powinieneś przepisać metodę "get_temperature" w taki sposób, aby w zależności od zmiennej channel czytała albo z jednego GPIO, albo z drugiego.

Ogólnie to mimo wszystko polecam przesiąść się na nową wersję biblioteki. Było usunięte kilka błędów, a także pojawiają się tam nowe funkcjonalności (np. ikonka (i) przy kanale, z której można odczytać siłę sygnału WiFi, czy też lokalny adres IP modułu)
Widzimy się na Supla Offline Party vol. 2 :!:
ODPOWIEDZ

Wróć do „Pomoc”