esp8266-01s + LCD1602A + DS18B20 + SUPLA

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

Ponownie: polecam przesiąść się na nową bibliotekę. Tam masz obsługę DSa i przycisków prawie za darmo.
Obsługę LCD trzeba sobie dołożyć.

Co do Twojego kodu, to masz tam dużo delay. Ogólnie nie należy używać delay bo blokuje wykonanie całego programu.
Można zamiast delay używać millis, ale wymaga to przebudowania tych funkcji.
Poszukaj sobie w google opisów jak używać millis zamiast delay
Widzimy się na Supla Offline Party vol. 2 :!:
NEW
Posty: 28
Rejestracja: czw kwie 15, 2021 5:28 pm

klew pisze: ndz kwie 18, 2021 10:18 am Ponownie: polecam przesiąść się na nową bibliotekę. Tam masz obsługę DSa i przycisków prawie za darmo.
Obsługę LCD trzeba sobie dołożyć.

Co do Twojego kodu, to masz tam dużo delay. Ogólnie nie należy używać delay bo blokuje wykonanie całego programu.
Można zamiast delay używać millis, ale wymaga to przebudowania tych funkcji.
Poszukaj sobie w google opisów jak używać millis zamiast delay
klew, jestem za zielony by sobie z tym sam poradzić tak od razu ale zainstalowałem bibliotekę jak radziłeś i wyskoczył błąd:

DallasTemperature:9:2: error: #elif without #if
#elif defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32)
^
DallasTemperature:12:2: error: #endif without #if
#endif
^
Znaleziono wiele bibliotek w "Ethernet.h"
Wykorzystane: C:\Users\Lenovo V110\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\Ethernet
Niewykorzystane: C:\Program Files (x86)\Arduino\libraries\Ethernet
exit status 1
#elif without #if

poczytałem ale nie wiem co dalej i jak to ogarnąć:

Jeśli chcecie to na ESP skompilować, to trzeba define'y w proto.h i srpc.h przerzucić do sekcji dla ESP:
w proto:
#define SPROTO_WITHOUT_OUT_BUFFER
w srpc:
#define SRPC_WITHOUT_OUT_QUEUE
#define SRPC_WITHOUT_IN_QUEUE
Awatar użytkownika
klew
Posty: 8178
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

Ciężko odgadnąć co się dzieje patrząc na fragment komunikatów bez kodu.
Wygląda jakby brakowało ifdefa na początku. Jeśli wziąłeś jakiś gotowy przykład z biblioteki, to mogłeś coś przypadkiem na początku pliku usunąć.

Weź zwykły przykład z biblioteki, nic tam nie usuwaj, tylko uzupełnij dane zgodnie z komentarzami i zobacz czy działa
Widzimy się na Supla Offline Party vol. 2 :!:
NEW
Posty: 28
Rejestracja: czw kwie 15, 2021 5:28 pm

klew pisze: ndz kwie 18, 2021 6:56 pm Ciężko odgadnąć co się dzieje patrząc na fragment komunikatów bez kodu.
Wygląda jakby brakowało ifdefa na początku. Jeśli wziąłeś jakiś gotowy przykład z biblioteki, to mogłeś coś przypadkiem na początku pliku usunąć.

Weź zwykły przykład z biblioteki, nic tam nie usuwaj, tylko uzupełnij dane zgodnie z komentarzami i zobacz czy działa
ok, więc mam taki kod ale nie czyta mi temperatury co i gdzie powinienem dopisać?
czy możesz mi pomóc dopisać // CHANNEL4 - Czujnik, // CHANNEL5 - Przycisk i wytłumaczyć co mogę z tym zrobić ciekawego // CHANNEL5 - Virtualny Przekaźnik ?

#include <SuplaDevice.h>
#include <supla/network/esp_wifi.h>
#include <supla/sensor/DS18B20.h>
#include <supla/control/relay.h>
#include <supla/control/virtual_relay.h>
#include <supla/control/button.h>

#ifdef ARDUINO_ARCH_AVR
#include <supla/network/ethernet_shield.h>

uint8_t mac[6] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05};
Supla::EthernetShield ethernet(mac);

#elif defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32)

Supla::ESPWifi wifi("******", "********");
#endif

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

char GUID[SUPLA_GUID_SIZE] = {***}; //https://www.supla.org/arduino/get-guid
char AUTHKEY[SUPLA_AUTHKEY_SIZE] = {***}; //https://www.supla.org/arduino/get-authkey
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------

// CHANNEL0-3 - Thermometer DS18B20 - 4 termometry DS18B20 na pinie 2. Adres DS można pominąć, gdy na pinie jest tylko jedno urządzenie
DeviceAddress ds1addr = {0x28, 0xFF, 0xC8, 0xAB, 0x6E, 0x18, 0x01, 0xFC};
//DeviceAddress ds2addr = {0x28, 0xFF, 0x54, 0x73, 0x6E, 0x18, 0x01, 0x77};
//DeviceAddress ds3addr = {0x28, 0xFF, 0x55, 0xCA, 0x6B, 0x18, 0x01, 0x8D};
//DeviceAddress ds4addr = {0x28, 0xFF, 0x4F, 0xAB, 0x6E, 0x18, 0x01, 0x66};

new Supla::Sensor::DS18B20(2, ds1addr);
//new Supla::Sensor::DS18B20(2, ds2addr);
//new Supla::Sensor::DS18B20(2, ds3addr);
//new Supla::Sensor::DS18B20(2, ds4addr);

// CHANNEL4 - Przekaźnik
auto r1 = new Supla::Control::Relay(3); //przekaźnik na pin1 sterowany stanem wysokim
//auto r2 = new Supla::Control::Relay(3);
//auto r3 = new Supla::Control::Relay(3);
//auto r4 = new Supla::Control::Relay(3, false); //przekaźnik na pin2 sterowany stanem niskim

// CHANNEL4 - Czujnik

// CHANNEL5 - Przycisk

// CHANNEL5 - Virtualny Przekaźnik
//new Supla::Control::VirtualRelay();


//----------------------------------------------------------------------------------------------------

SuplaDevice.begin(GUID, // Global Unique Identifier
"svr**.supla.org", // SUPLA server address
"*************@gmail.com", // Email address used to login to Supla Cloud
"**********"); // Authorization key

}

void loop() {
SuplaDevice.iterate();
}
Awatar użytkownika
klew
Posty: 8178
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

Jeśli używasz tylko jednego DSa, to nie trzeba podawać jego adresu "ds1addr". Dodaj go taką komendą: "new Supla::Sensor::DS18B20(2);"
Adres DSów jest konieczny, gdy chcesz na jednym GPIO podpiąć kilka termometrów DS. Wtedy będąc pod kompem możesz sobie w logach zobaczyć wszystkie adresy wykrytych DSów i odpowiednio je ustawić w tym zmiennych "ds1addr", "ds2addr" itd.
Zakładam, że adresu ds1addr nie zmieniałeś na swój, tylko zostawiłeś to co było podane w przykładzie - z tego powodu on nie działa, bo Twój DS na 99,999% ma inny adres :)

Co do przycisku, czujnika, wirtualnego przekaźnika - ja nie wymyślę do czego możesz tego potrzebować ;).
Przyciski służą z reguły do sterowania kanałami przekaźnika, oświetlenia, i jeszcze kilka innych opcji.
Czunik/sensor binarny - tam z reguły podłącza się coś co daje sygnał 0 lub 1 i to jest przekazywane do Supli. W cloud możesz sobie konfigurować, że np. ten sygnał oznacza "zamknięte drzwi", albo "masz pocztę", albo jeszcze coś innego.
Writualny przekaźnik, to taki hak na braki zmiennych w Supli i w skryptach fracza. Pozwala na ustawianie stanu przekaźnika, który w rzeczywistości jest ustawiany tylko w pamięci układu. Więc można to traktować jako zmienna typu bool, której możesz używać w niektórych zastosowaniach.
Widzimy się na Supla Offline Party vol. 2 :!:
NEW
Posty: 28
Rejestracja: czw kwie 15, 2021 5:28 pm

klew pisze: śr kwie 21, 2021 8:19 am Jeśli używasz tylko jednego DSa, to nie trzeba podawać jego adresu "ds1addr". Dodaj go taką komendą: "new Supla::Sensor::DS18B20(2);"
Adres DSów jest konieczny, gdy chcesz na jednym GPIO podpiąć kilka termometrów DS. Wtedy będąc pod kompem możesz sobie w logach zobaczyć wszystkie adresy wykrytych DSów i odpowiednio je ustawić w tym zmiennych "ds1addr", "ds2addr" itd.
Zakładam, że adresu ds1addr nie zmieniałeś na swój, tylko zostawiłeś to co było podane w przykładzie - z tego powodu on nie działa, bo Twój DS na 99,999% ma inny adres :)

Co do przycisku, czujnika, wirtualnego przekaźnika - ja nie wymyślę do czego możesz tego potrzebować ;).
Przyciski służą z reguły do sterowania kanałami przekaźnika, oświetlenia, i jeszcze kilka innych opcji.
Czunik/sensor binarny - tam z reguły podłącza się coś co daje sygnał 0 lub 1 i to jest przekazywane do Supli. W cloud możesz sobie konfigurować, że np. ten sygnał oznacza "zamknięte drzwi", albo "masz pocztę", albo jeszcze coś innego.
Writualny przekaźnik, to taki hak na braki zmiennych w Supli i w skryptach fracza. Pozwala na ustawianie stanu przekaźnika, który w rzeczywistości jest ustawiany tylko w pamięci układu. Więc można to traktować jako zmienna typu bool, której możesz używać w niektórych zastosowaniach.
dzięki z wskazówki, mam pytanie jak się sprawdza i gdzie logi na kompie i jak urzywać funkcji: //new Supla::Control::DimmerLeds(1);
//new Supla::Control::RGBLeds(2);
NEW
Posty: 28
Rejestracja: czw kwie 15, 2021 5:28 pm

Mam jeszcze jedno pytanie czy można i ewentualnie jak i gdzie do kodu by ustawić statyczny adres ip i nazwę urządzenia?
krycha88
Posty: 5175
Rejestracja: pt lis 16, 2018 7:25 am
Kontakt:

NEW pisze: śr kwie 21, 2021 8:09 pm Mam jeszcze jedno pytanie czy można i ewentualnie jak i gdzie do kodu by ustawić statyczny adres ip i nazwę urządzenia?
A nie lepiej przypisać stały IP po stronie routera?
https://gui-generic-builder.supla.io/
Awatar użytkownika
klew
Posty: 8178
Rejestracja: czw cze 27, 2019 12:16 pm
Lokalizacja: Wrocław

NEW pisze: śr kwie 21, 2021 8:09 pm Mam jeszcze jedno pytanie czy można i ewentualnie jak i gdzie do kodu by ustawić statyczny adres ip i nazwę urządzenia?
Aktualnie nie ma opcji ustawiania stałego adresu IP. Najlepszą praktyką jest zarządzanie adresami IP po stronie routera/serwera DHCP.

Co masz na myśli przez "nazwę urządzenia"?

Odnośnie RGB i Dimmera, to tu masz stary artykuł na ten temat: https://majsterkowo.pl/arduino-i-smartf ... -led-rgbw/
Tylko on był robiony na starej bibliotece. W nowej używamy jeden mosfet mniej - czyli dajesz bezpośrednio po jednym mosfecie dla R, G, B, W.
Widzimy się na Supla Offline Party vol. 2 :!:
Awatar użytkownika
Robert Błaszczak
Posty: 3944
Rejestracja: sob gru 22, 2018 8:55 pm
Lokalizacja: Zielona Góra
Kontakt:

Nazwa urządzenia:

Kod: Zaznacz cały

SuplaDevice.setName("xxxxx")
Odnośnie adresu IP to zdecydowanie sensowniej zarezerwować sobie w DHCP.
Pozdrawiam
Robert Błaszczak


Moja prywatna strona: www.blaszczak.pl
ODPOWIEDZ

Wróć do „Pomoc”