Czujniki w bibliotece SuplaDevice

lukfud
Posty: 441
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

pn lut 24, 2020 11:19 am

klew pisze:
pn lut 24, 2020 11:06 am
W bibliotece https://github.com/SUPLA/arduino/tree/develop pojawił się niedawno ultradźwiękowy sensor odległości HC-SR04. Obsługę sensora dostarczył @elmaya. Dorzuciłem też do niego obsługę błędów oraz zwiększyłem częstototliwość odczytów (teraz jest co pół sekundy - w przyszłości będzie można to sobie parametrem ustawić). Trzy błędne odczyty są ignorowane, następnie pojawią się w aplikacji "---" do czasu poprawnego odczytu.
Przykład jest dostępny tutaj:
https://github.com/SUPLA/arduino/blob/d ... sensor.ino

Poza tym od niedawna jest też dostępny następca "addSensorNO" - czyli sensor wykrywający stan wysoki/niski na danym GPIO. Do obsługi służy klasa Supla::Sensor::Binary oraz Supla::Sensor::NormallyOpen (można ich używać zamiennie w zależności od tego, która nazwa Wam bardziej pasuje).

Wkrótce zrobię BME*. Jeśli ktoś na coś bardzo czeka, to piszcie :)
Tak, BME :) zostało mi ostatnie urządzenie na "starej" bibliotece.
Duch__
Posty: 708
Rejestracja: śr sie 24, 2016 7:26 pm
Lokalizacja: Opole

pn lut 24, 2020 11:27 am

VEML6075
Aktualnie w domu: 8xSRW-01, 1xROW-02, SUPLA BUTTON V3.4, 16xDS na ESP (GUI), Sonoff S20 jako kontroler CWU

Przydatne linki:
viewtopic.php?f=9&t=4160
search.php?keywords=
Awatar użytkownika
Robert Błaszczak
Posty: 1324
Rejestracja: sob gru 22, 2018 8:55 pm
Lokalizacja: Zielona Góra
Kontaktowanie:

pn lut 24, 2020 11:53 am

Ciekawy ten czujnik. Nie znałem go wcześniej. Trzeba będzie pomyśleć i zastosować go w swojej stacji meteo.
Dzięki @Duch__ :)
Pozdrawiam
Robert Błaszczak

Strona prywatna: https://www.blaszczak.pl
Jakość powietrza: https://robert.aqi.eco
lukfud
Posty: 441
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

pn mar 02, 2020 8:44 pm

forumowicze,

Potrzebuję wstawić analogowy odczyt z czujnika gazu. Jak utworzyć klasę dla takiego odczytu?
krycha88
Posty: 776
Rejestracja: pt lis 16, 2018 7:25 am

pn mar 02, 2020 9:05 pm

lukfud pisze:
pn mar 02, 2020 8:44 pm
forumowicze,

Potrzebuję wstawić analogowy odczyt z czujnika gazu. Jak utworzyć klasę dla takiego odczytu?
Tu masz przykład, resztę musisz już dopisać :)

viewtopic.php?p=60917#p60917
lukfud
Posty: 441
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

pn mar 02, 2020 9:22 pm

krycha88 pisze:
pn mar 02, 2020 9:05 pm
lukfud pisze:
pn mar 02, 2020 8:44 pm
forumowicze,

Potrzebuję wstawić analogowy odczyt z czujnika gazu. Jak utworzyć klasę dla takiego odczytu?
Tu masz przykład, resztę musisz już dopisać :)

viewtopic.php?p=60917#p60917
Próbuję na podstawie:

Kod: Zaznacz cały

class RssiChannel : public Supla::Sensor::Thermometer {
  public: RssiChannel() {}
  void onInit() { channel.setNewValue(getValue()); }
  double getValue() { return WiFi.RSSI(); }
};
ale niestety mi nie wychodzi. Chciałbym użyć ThermHygroMeter.
krycha88
Posty: 776
Rejestracja: pt lis 16, 2018 7:25 am

pn mar 02, 2020 9:55 pm

lukfud pisze:
pn mar 02, 2020 9:22 pm
Próbuję na podstawie:

Kod: Zaznacz cały

class RssiChannel : public Supla::Sensor::Thermometer {
  public: RssiChannel() {}
  void onInit() { channel.setNewValue(getValue()); }
  double getValue() { return WiFi.RSSI(); }
};
ale niestety mi nie wychodzi. Chciałbym użyć ThermHygroMeter.
To zamień Supla::Sensor::Thermometer na Supla::Sensor::ThermHygroMeter

I do pobierania wartości wykorzystaj metody getTemp() oraz getHumi()
lukfud
Posty: 441
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

pn mar 02, 2020 10:09 pm

krycha88 pisze:
pn mar 02, 2020 9:55 pm

To zamień Supla::Sensor::Thermometer na Supla::Sensor::ThermHygroMeter

I do pobierania wartości wykorzystaj metody getTemp() oraz getHumi()
Dzięki za podpowiedzi.
Kombinowałem z Supla::Sensor::ThermHygroMeter, ale baran jestem i nie doczytałem ze zrozumieniem. Sypało błędami bo nie wstawiłem

Kod: Zaznacz cały

#include <supla/sensor/therm_hygro_meter.h>
Udało się, działa :)

Kod: Zaznacz cały

class GasSensor : public Supla::Sensor::ThermHygroMeter {
  public: GasSensor() {}
  void onInit() { 
  	channel.setNewValue(getValue()); 
  }
  double getHumi() { 
  	return map(analogRead(A0), 0 ,1024, 0, 100);
  }
};
Kolejną zagadką jest wstawienie odczytu z DS'a do tej klasy..
Awatar użytkownika
klew
Posty: 1133
Rejestracja: czw cze 27, 2019 12:16 pm

pn mar 02, 2020 10:59 pm

lukfud pisze:
pn mar 02, 2020 10:09 pm

Udało się, działa :)

Kod: Zaznacz cały

class GasSensor : public Supla::Sensor::ThermHygroMeter {
  public: GasSensor() {}
  void onInit() { 
  	channel.setNewValue(getValue()); 
  }
  double getHumi() { 
  	return map(analogRead(A0), 0 ,1024, 0, 100);
  }
};
Kolejną zagadką jest wstawienie odczytu z DS'a do tej klasy..
Czemu chcesz aby "Gas Sensor" czytał temperaturę z DSa?

We wstawionym przez Ciebie kodzie jest błąd. W "onInit" powinieneś używać "getHumi" a nie "getValue".
W tym typie sensora (temperatura + wilgotność) powinieneś używać metody setNewValue z dwoma argumentami:

Kod: Zaznacz cały

        channel.setNewValue(getTemp(), getHumi());
Także jeśli getHumi używasz do odczytu wyjścia analogowego, to getTemp możesz wykorzystać na odczyt drugiej wartości. Tylko czytanie tam DSa będzie bardzo nielogiczne ;). Do tego odczyt DSa nie jest rzeczą trywialną.
W onInit powinieneś też wstawić kod inicjalizujący GPIO do odczytu analogowego, a konstruktor powienien przyjmować nr GPIO do odczytu gazu - tak aby to A0 nie pojawiało się bezpośrednio w kodzie GasSensor'a.
lukfud
Posty: 441
Rejestracja: czw lis 23, 2017 11:33 pm
Lokalizacja: Warszawa

pn mar 02, 2020 11:33 pm

klew pisze:
pn mar 02, 2020 10:59 pm
Czemu chcesz aby "Gas Sensor" czytał temperaturę z DSa?

We wstawionym przez Ciebie kodzie jest błąd. W "onInit" powinieneś używać "getHumi" a nie "getValue".
W tym typie sensora (temperatura + wilgotność) powinieneś używać metody setNewValue z dwoma argumentami:
Jak już używam kanału z dwiema wartościami to czemu nie, przy okazji będzie czujnik temperatury w kuchni.
Ok, widzę błąd, ale odczyt jest poprawny. Zmienię
lukfud pisze:
pn mar 02, 2020 10:09 pm
W onInit powinieneś też wstawić kod inicjalizujący GPIO do odczytu analogowego, a konstruktor powienien przyjmować nr GPIO do odczytu gazu - tak aby to A0 nie pojawiało się bezpośrednio w kodzie GasSensor'a.
No dobrze, tylko nie wiem jak ;) mógłbyś podać przykład?
ODPOWIEDZ

Wróć do „Arduino IDE”