Strona 6 z 15

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: niedziela, 21 cze 2020, 19:22
autor: aakk
Tak się w sumie zastanawiam, w internetach piszą że trzeba stosować rezystor. Ja nie miałem akurat pod ręką więc podłączyłem bez. I wszystko hula, gdzie haczyk? Łączę tylko za pomocą 3 przewodów, nie korzystam z opcji 'pasożytniczej'

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: niedziela, 21 cze 2020, 19:25
autor: george1255
Ja przez długi czas podłączałem pod 3.3V przy podłączeniu "nie pasożytniczym" i hulało. Teraz mam dorzucony rezystor 4k7 ale nie widzę różnicy.

Wysłane z mojego EML-L29 przy użyciu Tapatalka

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: niedziela, 21 cze 2020, 20:21
autor: mienho
Z tego co kiedyś gdzieś wyczytałem i pamiętam to rezystor powoduje stabilniejszą pracę i lepiej rozpoznaje adresy ds-ów. Ale to było dość dawno i mogę się mylić

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: niedziela, 21 cze 2020, 21:17
autor: robert4you
Czy któryś z kolegów którzy kupili mój sterownik stwierdził taki problem u siebie?

Wysłane z mojego SM-G950F przy użyciu Tapatalka

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: środa, 19 sie 2020, 13:50
autor: andras
Witam

Mam pytania , wgrywam kod do esp32 , niby wszystko idzie , ale nie wiem czy się łączy z blynkiem ( lokalny serwer )
zmieniłem w kodzie :
char auth[] = "lC5BDxtnOO8sVM25xxxxxxxxxxxx";
char ssid[] = "SUxxx";
char pass[] = "olenxxx";

oraz na

Blynk.begin(auth, ssid, pass, IPAddress(192,168,1,186), 8442);
czy coś jeszcze trzeba zmienić? i jak sprawdzić czy się łączy z serwerem ?


EDIT
Wszystko już ok, przyczyną był zły port :)

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: środa, 9 wrz 2020, 09:31
autor: Domin_Kielon
Cześć. Jestem laikiem w tym temacie, mój ojciec bardziej ogarnia takie kwestie, więc z jego pomocą chciałbym stworzyć takie cudo.

Mam 2 pytania - ponieważ chciałbym żeby komunikacja między telefonem a sterownikiem odbywała się przez internet, a nie w obrębie danej sieci (głównie ze względu na chęć włączenia kolumny przed powrotem z pracy, żeby już się nagrzewała).
1. Ze względu na umiejscowienie kolumny w piwnicy mam problem z sygnałem w tamtym miejscu. Czy lepiej montować klamoty z dala od kolumny w miejscu gdzie sygnał jest "w miarę", czy postawić router bliżej kolumny i dokupić do niego antenę?
2. Czy do komunikacji sterownika przez internet potrzebuje dodatkowego hardware, czy wystarczy do tego jakiś soft?

Dziękuję z góry za wszystkie odpowiedzi.

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: środa, 9 wrz 2020, 11:46
autor: moszeusz
Postaw serwer blynka na VPSie (wishosting ma za 12 zł na rok) i będzie działać przez internet, ja tak mam.

https://www.elektroda.pl/rtvforum/topic3602108.html

W kwestii sygnału - możesz zrobić repeater z ESP8266 który będzie pomiędzy routerem a kolumną.

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: środa, 9 wrz 2020, 19:45
autor: robert4you
Przecież blynk standardowo działa przez internet, a nie w sieci lokalnej.

Wysłane z mojego SM-G950F przy użyciu Tapatalka

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: środa, 9 wrz 2020, 23:59
autor: Moskit81
Chyba chodziło o postawienie serwera zamiast lokalnie i nie płaceniu, na zewnętrznym serwerze. Ja tak zrozumiałem.

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: czwartek, 10 wrz 2020, 00:12
autor: george1255
Ja zrozumiałem to w ten sposób, że kolega pytał czy aby korzystać z blynka i sterować kolumna musi być tej samej sieci co sterownik.

Jeżeli o to chodziło, to odpowiadam że nie musisz :-)

Wysłane z mojego EML-L29 przy użyciu Tapatalka

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: czwartek, 10 wrz 2020, 09:10
autor: Domin_Kielon
george1255 pisze:Ja zrozumiałem to w ten sposób, że kolega pytał czy aby korzystać z blynka i sterować kolumna musi być tej samej sieci co sterownik.
Tak dokładnie o to chodziło :)
Dzięki wszystkim za odpowiedzi !
Panowie, jeszcze jedno pytanie. Nie rozumiem trochę, jak działa w tym systemie kwestia odbioru. Jeśli EZ do odbioru otwierany jest czasowo, to jak się ustawia przepływ? Teraz przy odbiorze ciągłym na zaworku precyzyjnym ustawiam odpowiedni odbiór.

A jak to wygląda przy tym systemie? Zawór otwiera się na maksa do czasu minimalnej zmiany temperatury, system go zamyka i po stabilizacji znów otwiera na maksa i tak do końca procesu?
Czy może ja musze ustawić przepływ na minutę na elektrozaworze w aplikacji?
Czy odwrotnie - elektrozawór na maksa, a ustawiam przepływ na zaworze kulowym?
A co z EZ do zimnej wody? On chyba nie otwiera się czasowo, tylko jego prace steruje się %otwarciem, prawda?

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: czwartek, 10 wrz 2020, 13:50
autor: czytam
To już zależy od inwencji i zasobności portfela twórcy systemu. Elektrozawory proporcjonalne są zwykle drogie i trudniejsze w sterowaniu ale oczywiście można je stosować.. Dlatego przy odbiorze stosuje się na przykład:
- igłę (windę) z silnikiem krokowym
- zawór regulacyjny z ręcznie ustawianym maksymalnym odbiorem i za nim elektrozawór, który otwiera się okresowo
...
Dla regulacji chłodzenia zwykle zawór ręczny ustawiający minimalny przepływ z jego obejściem przez elektrozawór również sterowany okresowo. Dla odcięcia zcałkowitego następny EZ za nimi.

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: piątek, 11 wrz 2020, 18:33
autor: Domin_Kielon
czytam pisze:To już zależy od inwencji i zasobności portfela twórcy systemu. Elektrozawory proporcjonalne są zwykle drogie i trudniejsze w sterowaniu ale oczywiście można je stosować.. Dlatego przy odbiorze stosuje się na przykład:
- igłę (windę) z silnikiem krokowym
- zawór regulacyjny z ręcznie ustawianym maksymalnym odbiorem i za nim elektrozawór, który otwiera się okresowo
...

Moje pytanie dotyczy konkretnie systemu który stworzył autor tematu. Chce na jego kodzie zrobić sterowanie dla siebie, dlatego pytam o konkretny przypadek. Jako laik nie rozumiem jak działa proces z czasowym działaniem EZ.

@robert4you - Pisales gdzieś o tym że system skraca mocno cały proces. Stąd moje pytanie - czy w tym systemie zawór kulowy i EZ ustawiamy na full i sterownik zamyka EZ gdy kolumna się destabilizuje, po stabilizacji otwiera znów i tak w kółko, czy któryś z zaworów ustawiam na wyliczone RR 1:4 i sterownik tylko zmienia delikatnie parametry odbioru mniej więcej wtedy gdy robi to operator.

Wybaczcie, pytanie może głupie ale kompletnie się na tym nie znam i o systemach z EZ nigdy nie czytałem.

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: piątek, 11 wrz 2020, 20:38
autor: .Gacek
Elektrozawór jest na wyjściu olm, tuż za nim jest zaworek precyzyjny ustawiony już na daną wydajność, przyjmijmy 34-36ml/min przy grzaniu ok 3kW. Jeżeli kolumna się zdestabilizuje tzn ze odbieraliśmy urobek zbyt szybko i musi nastąpić korekta. Wtenczas ez się zamyka i sterownik czeka na powrót temperatury sprzed stabilizacji. Jeżeli temperatura opadnie do pożądanej to elektrozawór będzie sobie cykał o 5 % względem pierwszej korekty, później 10%. Cykl ten można porównać do pracy grupowego regulatora mocy np 100% mocy - grzałka cały czas załączona, 50% mocy - grzałka grzeje 5 sekund i 5 sekund nie grzeje, 30% mocy - grzałka grzeje 3 sekundy i 7 sekund odpoczywa...

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: sobota, 12 wrz 2020, 10:16
autor: Domin_Kielon
I już wszystko wiem :) dziękuję Ci bardzo za odpowiedź!

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: piątek, 25 wrz 2020, 12:08
autor: andras
Działa super, dołożyłem czujnik poziomu cieczy i jestem mega zadowolony, dzięki robert4you za udostępnienie
Obrazek

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: środa, 7 paź 2020, 02:17
autor: robert4you
Brawo ty !!!
Jaki czujnik poziomu zastosowałeś?

Wysłane z mojego SM-G950F przy użyciu Tapatalka

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: środa, 7 paź 2020, 22:18
autor: andras

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: piątek, 23 paź 2020, 22:25
autor: MastaMari
Jak ustalić kolejność termometrów ? Mam rożne długości przewodów i chciałbym aby były w odpowiednim miejscu bez zmiany przypisanego virtualpinu.

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: sobota, 24 paź 2020, 09:30
autor: Slodziaksos
Wsadzaj do gara z gorącą wodą po jednym i sie dowiesz który jest który

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: sobota, 24 paź 2020, 12:43
autor: robert4you
Dokładnie

Wysłane z mojego SM-G950F przy użyciu Tapatalka

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: niedziela, 25 paź 2020, 17:05
autor: MastaMari
Gdybym wiedział to bym zamówił wszystkie z 2m przewodu a tak trzeba będzie przedłużać ;/

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: niedziela, 25 paź 2020, 21:04
autor: robert4you
Nie przedłużać.
Zmień kolejność w kodzie.

Wysłane z mojego SM-G950F przy użyciu Tapatalka

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: poniedziałek, 26 paź 2020, 15:12
autor: stefunk
Próbuję przenieść kawałek kodu na esp8266. W sumie to moje pierwsze podejście do samodzielnego pisania kodu na ESP i mam mały problem.
Chciałbym tylko ustawiać moc grzałki, więc biorę kod Task1code, jest on wywoływany przez xTaskCreatePinnedToCore, którego na esp8266 nie ma. Wrzucam go do loop'a - wywalając niepotrzebne rzeczy i co jakieś 3-4 sekundy na konsoli widzę "Soft WDT reset" - czy ten problem nie występuje na esp32? Na ten moment zrobiłem obejście i kończę pętlę for po sekundzie - ale nie wiem czy nie bedzie problemów później jak będę odczytywał temperaturę z czujników itd.

Druga sprawa to włączanie grzałki. W programie moc jest realizowana poprzez wyłączanie/włączanie w przeciągu 1 sekundy - czy to nie wpływa negatywnie na sam ssr/grzałkę? Posiadam regulator Boleckiego i widzę, że ten czas jest tam dwukrotnie większy, tj 2 sekundy na cykl.

Kod: Zaznacz cały

#define RelayPin D8
int PercentagePower = 50;
int HeaterTimeFrameInSeconds = 2;

unsigned long loopStartTime=0;
unsigned long timePassed=0;

void setup() {
}

void loop() {
  pinMode(RelayPin, OUTPUT);
  digitalWrite(RelayPin, LOW);

  loopStartTime = millis();
  
  for (;;)
  {
    timePassed = millis() - loopStartTime;
    
    if (timePassed > (HeaterTimeFrameInSeconds * 1000))
    {
      break;
    }

    if ((PercentagePower * 10 * HeaterTimeFrameInSeconds) < timePassed)
    {
      digitalWrite(RelayPin, LOW);
    }
    else
    {
      digitalWrite(RelayPin, HIGH);
    }
  }
}

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: poniedziałek, 26 paź 2020, 18:13
autor: jacek.kokot
stefunk - to jest aktywne czekanie, tak się nie robi. Przecież przed wejściem do tego fora wiesz ile czasu masz być w stanie wysokim a ile w niskim. Chyba tam jest jakiś delay na tym sprzęcie? Z jaką częstotliwością chcesz sterować tym wyjściem?

Kod: Zaznacz cały

#define CYCLE_LENGTH_IN_MS 100
#define POWER_RESOLUTION 100

// UWAGA power musi być [0..POWER_RESOLUTION]

for (;;) { // jak szybko chcesz przełączać? 10Hz, czyli jeden obrót 100ms (100msx10 = 1s)
  if (power>0) { // faza wysoka
    digitalWrite(pin, HIGH);
    delay(power * CYCLE_LENGTH_IN_MS / POWER_RESOLUTION);  // najpierw mnożenie później dzielenie - zastanów się dlaczego
  }  
  if (power<100) { // faza niska
    digitalWrite(pin, LOW);
    delay((POWER_RESOLUTION - power) * CYCLE_LENGTH_IN_MS / POWER_RESOLUTION);
  }  
}

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: poniedziałek, 26 paź 2020, 19:55
autor: stefunk
Wziąłem to z przykładu z tego tematu. Twoje podejście wygląda dużo lepiej, udało mi się złożyć wszystko w całość.

Kod: Zaznacz cały

#include <Scheduler.h>

#define RELAY_PIN D8
#define POWER_RESOLUTION 100
#define POWER_PERCENTAGE 50
#define HEATER_TIME_FRAME_IN_SECONDS 2

class HeaterTask : public Task {
public:
    HeaterTask(int relayPin, int powerResolution, int percentagePower, int heaterTimeFrameInSeconds) {
      _relayPin = relayPin;
      UpdateHeaterParameters(powerResolution, percentagePower, heaterTimeFrameInSeconds);
    }
    
    void setup() {
      pinMode(RELAY_PIN, OUTPUT);
      digitalWrite(RELAY_PIN, LOW);
    }

    void loop() {
      if (_percentagePower > 0 ) {
        turnAndWait(_highTimeInMiliseconds, HIGH);
      }
      
      if (_percentagePower < 100) {
        turnAndWait(_lowTimeInMiliseconds, LOW);
      }
    }

    void UpdateHeaterParameters(int powerResolution, int percentagePower, int heaterTimeFrameInSeconds) {
      _powerResolution = powerResolution;
      _percentagePower = percentagePower;
      _heaterTimeFrameInSeconds = heaterTimeFrameInSeconds;
      
      _highTimeInMiliseconds = _percentagePower * _heaterTimeFrameInSeconds * 1000 / _powerResolution;
      _lowTimeInMiliseconds = (_powerResolution - _percentagePower) * _heaterTimeFrameInSeconds * 1000 / _powerResolution;
    }
private:
  int _relayPin, _powerResolution, _percentagePower, _heaterTimeFrameInSeconds, _highTimeInMiliseconds, _lowTimeInMiliseconds;
  
  void turnAndWait(int timeInMiliseconds, int state) {
    digitalWrite(RELAY_PIN, state);
        delay(timeInMiliseconds);
  }
} heater_task(RELAY_PIN, POWER_RESOLUTION, POWER_PERCENTAGE, HEATER_TIME_FRAME_IN_SECONDS);

void setup() {
  //Serial.begin(115200);
  //Serial.println("Setup");

  Scheduler.start(&heater_task);
  Scheduler.begin();
}


void loop() {}

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: poniedziałek, 26 paź 2020, 20:24
autor: jacek.kokot
Nie widziałem tego przykładu nie będę się wypowiadał na jego temat. To jest tak, że każdy orze jak może. Tylko niektórzy powinni poprzestać na oraniu pola ;)

Skoro już się czepiłem, to parę dodatkowych spraw.
1. Rozdziel deklaracje od definicji.
2. Zmienne PercentagePower i HeaterTimeFrameInSeconds są w tym kodzie prywatne dla klasy HeaterTask. Być może tu nie ma całości kodu i gdzieś tam coś je modyfikuje, ale w takim przypadku tak czy siak przydałaby się jakieś przypisanie ich własności do czegoś i dodanie synchronizacji.
3. RELAY_PIN jest naturalnym kandydatem na parametr konstruktora HeaterTask.
4. Inicjalizacja highTimeInMiliseconds i lowTimeInMiliseconds - tego się tak nie robi. To powinno być w konstruktorze.
5. Zamiast wyliczać na pałę highTimeInMiliseconds i lowTimeInMiliseconds lepiej w ogóle nie mieć takich zmiennych i wyliczać je na bieżąco w środku loop. Wtedy można modyfikować PercentagePower i niczym się nie martwić. Generalnie ogólna zasada jest taka, że im mniej przechowujesz stanu tym lepiej.
6. Jak być chciał być purystą, to zwróć uwagę, że highTimeInMiliseconds + lowTimeInMiliseconds wcale nie musi być 1000 * HeaterTimeFrameInSeconds. Jakbyś chciał to zapewnić trzeba by inicjalizować lowTimeInMiliseconds = 1000 * HeaterTimeFrameInSeconds - highTimeInMiliseconds.
7. Deklaracja heater_task jest bardzo błędogenna. Tego nie widać. Tak się nie robi.

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: poniedziałek, 26 paź 2020, 20:44
autor: .Gacek
jacek.kokot pisze:Nie widziałem tego przykładu nie będę się wypowiadał na jego temat. To jest tak, że każdy orze jak może. Tylko niektórzy powinni poprzestać na oraniu pola ;)
Napisz o co Ci chodzi, przecież tutaj nikt w mordę nie przyłoży... Nie pykło Ci coś dzisiaj? Chooojowy dzień był? Kurde... Nie rozumiem takich ludzi i zachowania...

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: poniedziałek, 26 paź 2020, 20:49
autor: stefunk
Gacek, po prostu pracując z zawodzie, jak się widzi totalną prowizorkę, to szkoda słów

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: poniedziałek, 26 paź 2020, 21:16
autor: jacek.kokot
.Gacek pisze:Napisz o co Ci chodzi, przecież tutaj nikt w mordę nie przyłoży... Nie pykło Ci coś dzisiaj? Chooojowy dzień był? Kurde... Nie rozumiem takich ludzi i zachowania...
Ja Cię przepraszam bardzo, ale tak jak napisałem, nie widziałem tego kodu, nie mam pojęcia jaki to jest kod, ani tym bardziej czyj. Napisałem tylko, że czasami jest lepiej jak niektórzy nie zajmują się pewnymi rzeczami, ale to była uwaga ogólna, w oderwaniu od kodu (którego niewidziałem).

Ja nie chcę tu nic sugerować, ale chyba nieco nadinterpretowałeś moją wypowiedź. Chooojowy dzień był?

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: poniedziałek, 26 paź 2020, 21:20
autor: jacek.kokot
stefunk pisze:Gacek, po prostu pracując z zawodzie, jak się widzi totalną prowizorkę, to szkoda słów
Panowie... Ja nie widziałem tego kodu. Nie dyskutuję tu o żadnym konkretnym kodzie. Napisałem uwagę ogólną, że czasami ktoś opublikuje G**wno i następnie niczego nieświadomi ludzie się na tym wzorują i wychodzi jeszcze większe G******wno. To jest taki truizm, który ma zastosowanie w wielu miejscach i nie jest specyficzny z kodowania. Nie nazywam na G żadnego konkretnego kodu, ponieważ go nie widziałem. Proszę nie odbierać tego ad persona.

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: poniedziałek, 26 paź 2020, 22:48
autor: stefunk
Po co właściwie w tym wypadku rozdzielać deklaracje od definicji?

https://pastebin.com/SRzt9k1H

Kolejna porcja kodu ... nie wiem czy to wina esp'a czy coś źle zrobiłem, ale pokazuje mi złą temperature ... w okolicach 66 stopni, po ogrzaniu czujnika temperatura rośnie...

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: wtorek, 27 paź 2020, 08:39
autor: jacek.kokot
stefunk - dlaczego nie działa, nie ma pojęcia, ale tak właściwie Ty korzystasz tam z klasy DallasTemperature, która z tego co rozumiem, jest z zewnątrz. Widzę co najmniej trzy opcje. Klasa działa źle (jeśli to jest zaufana klasa, używana przez wielu, bardzo mało prawdopodobne), używasz tej klasy źle (obstawiałbym tą opcję, może begin trzeba wołać w loop a może pomiędzy requestTemperatures a get trzeba dać delay - nie wiem) lub masz coś źle podłączone. Nie znam tej klasy. Nie powiem Ci konkretnie.

Drobne (naprawdę pierdoły) sugestie do kodu:
0. W rozdzieleniu deklaracji od definicji chodzi o to, że w kodzie trzeba trzeba tworzyć struktury wyższego rzędu, wydzielać elementy, ukrywać szczegóły implementacyjne. Tu masz tego kodu tyle co kto napłakał, więc pewnie, póki co, to będzie przerost formy nad treścią, ale warto mieć taki paradygmat z tyłu głowy, bo wraz z rozwojem projektu podział stanie się nieunikniony.
1. Sądzę, że '_' powinieneś używać do parametrów, aby inne zmienne nie miały '_'. Np.

Kod: Zaznacz cały

HeaterTask(int _relayPin, int _powerResolution, int _percentagePower, int _heaterTimeFrameInSeconds) {
      relayPin = _relayPin;
2. Ja nie znam tej klasy, ale z tego co rozumiem sensors->getTempCByIndex(0); zwraca wynik dla pierwszego termometru z brzegu. Sądzę, że taki kod może w przyszłości ewaluować do getTempCByIndex(i); a wg mojej wiedzy magistrala 1-Wire nie daje żadnej gwarancji, że czujniki zawsze czytają się w tej samej kolejności. Reasumując uważam, że lepiej czytać DS po serialu. Jest tam taka opcja w ogóle?
3. W Twoim kodzie nie alokujesz dynamicznie żadnej klasy, a wskaźniki w C++ stają się coraz bardziej passe, więc zamiast pisać static SensorTask sensor_task(SENSOR_PIN, &sensors, &lcdService); i dalej SensorTask(int sensorPin, DallasTemperature *sensors, LcdService *lcdService) możesz napisać static SensorTask sensor_task(SENSOR_PIN, sensors, lcdService); i dalej SensorTask(int sensorPin, DallasTemperature& sensors, LcdService& lcdService).

Ale generalnie naprawdę ładny kod. Dałbym za niego studentowi 5.

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: wtorek, 27 paź 2020, 10:10
autor: stefunk
1. Wolę jak prywatne parametry mają _ w nazwie
2. To jest dopiero nauka biblioteki, będę się starał robić tak, żeby przyporządkować automatycznie jeden termometr w to samo miejsce
3. Programuje w C# i wskaźniki widzę pierwszy raz, nie licząc okresu studiów wiele lat temu :)

Gdybym nie programował od 13 lat to bym się z tej 5 bardzo ucieszył :D

Przyznam, że trochę mnie temat wciągnął i postanowiłem zrobić bibliotekę z asnychronicznym pobieraniem danych i powiadomieniami (o ile się da) na stronie, serwowanej przez ESP'a, z możliwością ustawienia mocy grzałki i wskazaniami temperatury.

Wszystko robię na licencji MIT, więc można będzie korzystać też komercyjnie - mam nadzieję, że zachęcę też forumowych producentów do wrzucania kodu, albo przynajmniej pomocy w rozwoju.

https://github.com/stefunkk/openstill

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: wtorek, 27 paź 2020, 11:40
autor: george1255
stefunk pisze: 2. To jest dopiero nauka biblioteki, będę się starał robić tak, żeby przyporządkować automatycznie jeden termometr w to samo miejsce
W arduino IDE
"Tutaj możemy się posłużyć programem demo Plik → Przykłady → OneWire → DS18x20, trzeba jednak pamiętać, aby na samym początku zmienić informacje o podłączeniu czujników"
a później w kodzie umieszczasz

Kod: Zaznacz cały

DeviceAddress termometrZewnetrzny = { 0x10, 0x7A, 0x31, 0x99, 0x1, 0x8, 0x0, 0x4A };
Nie wiem, moze Ci to rozjaśni :)

Źródlo: https://forbot.pl/blog/kurs-arduino-ii- ... 20-id18414

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: wtorek, 27 paź 2020, 12:23
autor: stefunk
Raczej nie będę podawał ich adresów, wolałbym przy podmianie czujnika nie kompilować ponownie kodu. Może po prostu sortowanie po adresach, żeby zawsze były w tej samej kolejności

edit.

Odpaliłem przykład oneWire i niestety tam też jest zły odczyt.

ROM = 28 FF 48 9E 83 17 4 E
Chip = DS18B20
Data = 1 19 4 4B 46 7F FF C 10 1 CRC=1
Temperature = 65.56 Celsius, 150.01 Fahrenheit
No more addresses.

edit2

Downgrade biblioteki oneWire do 2.3.0 pomógł

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: wtorek, 27 paź 2020, 13:07
autor: jacek.kokot
stefunk pisze:Raczej nie będę podawał ich adresów, wolałbym przy podmianie czujnika nie kompilować ponownie kodu. Może po prostu sortowanie po adresach, żeby zawsze były w tej samej kolejności
Do testowania - jakkolwiek. Natomiast jak już coś będziesz chciał uruchomić - tylko po serialu. Inaczej nigdy nie będziesz miał pewności co czytasz. Zwróć uwagę, że przy kilku czyjnikach na tej samej magistrali możesz mieć tak, że przy kolejnym odczycie np. 2 z 5 czujników się nie przeczytają (nie bo nie i tyle). Wtedy to już w ogóle będzie miał loterię.

Swoją drogą - jak testujesz czy odczyt w ogóle się udał?

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: wtorek, 27 paź 2020, 17:20
autor: stefunk
No i utknąłem, chciałem za namową zrobić po adresach, ale chyba coś mam nie tak z wskaźnikami, bo mi adresy idą jakieś dziwne, chodzi mi o 1000552E204070 i 000000001 mimo zadeklarowania ich prawidłowo:

const std::map<const char*, const DeviceAddress&> SensorList
{
{"10Polka", { 0x28, 0xFF, 0xB4, 0xCE, 0x70, 0x17, 0x03, 0xBB }},
{"Glowica", { 0x28, 0xFF, 0x4C, 0xDE, 0x83, 0x17, 0x04, 0xF1 }},
{"Zbiornik", { 0x28, 0xFF, 0xE7, 0x7A, 0x83, 0x17, 0x04, 0x15 }},
{"Woda", { 0x28, 0xFF, 0xB7, 0x78, 0x90, 0x17, 0x05, 0x77 }}
};

żeby było jeszcze bardziej dziwnie, dwa ostatnie działają prawidłowo, kod tu: https://github.com/stefunkk/openstill

Devices count:
4
10Polka
-127.00
1000552E204070
Glowica
-127.00
000000001
Zbiornik
21.87
28FFE77A83174150
Woda
21.69
28FFB778901757728

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: wtorek, 27 paź 2020, 18:21
autor: jacek.kokot
DeviceAddress jest typu unit8_t[8]. Czyli teoretycznie od inicjalizacji nikt nie powinien tego modyfikować. Czy mógłbyś zrobić test polegający na wywaleniu czytania w ogóle i zostaw tylko wypisywanie w tym loop element.first i element.second. To że wyniki są z kosmosu - bywa, ale dlaczego wypisując element.second pisze śmieci - dziwne.

Ja bym zrobił zamiast map<char*, Address> => vector< pair<string, Address> >.

Zamień sobie LcdServiceClass* na LcdServiceClass& (i inne analogicznie). Wtedy nigdzie nie bedziesz miał ani * ani ->.

Re: Termometr i sterowanie kolumny przez smartfona po WiFi - nowa wersja

: wtorek, 27 paź 2020, 22:47
autor: stefunk
Udało mi się to zrobić, po zmianie const chara na stringa, adresy zaczeły być prawidłowe, dlaczego ... nie wiem.

Co do zmiany * na & rozumiem, że chodzi Ci o definicje w nagłówku właściwości klasy?

private:
int _sensorPin;
DallasTemperature& _sensors;
LcdServiceClass& _lcdService; ...

tylko wtedy przy konstruktorze rzuca błędem

SensorTaskClass::SensorTaskClass(int sensorPin, DallasTemperature& sensors, LcdServiceClass& lcdService)
{
_sensors = sensors;
_lcdService = lcdService;

SensorTask.cpp: In constructor SensorTaskClass::SensorTaskClass(int, DallasTemperature&, LcdServiceClass&)

SensorTask.cpp: 3:1: error: uninitialized reference member 'SensorTaskClass::_sensors' [-fpermissive]
SensorTaskClass*: SensorTaskClass(int sensorPin, DallasTemperature& sensors, LcdServiceClass& lcdService)

SensorTask.cpp: 3:1: error: uninitialized reference member 'SensorTaskClass::_lcdService' [-fpermissive]
Error compiling project sources
Debug build failed for project 'OpenStill'