Skocz do zawartości

Połączenie dwóch esp8266 do pomiaru temperatur


jaro44

Pomocna odpowiedź

(edytowany)

Napisałem, bo to już miałem opanowane, wyświetlacz wersji autora termika dodałem i działał jak chciałem.

Pewnie tradycyjnie znów jakąś pierdółką przeoczyłem, zaraz to sprawdzam i poprawiam.

delay mogę użyć, czy też kombinować z millis?

Edytowano przez jaro44
Link do komentarza
Share on other sites

Chodzi o to, że kod autora termika będzie działał... ale nie do końca. Tymczasem my tu mamy wszystko przygotowane i wystarczy w odpowiedzi na pakiet wysłać mu dane które mamy w tablicy termometr. Zero opóźnień, jakichś obliczeń, noże działać na tym samym porcie co termometry zdalne.

Zrobiłem tak u siebie (tyle że nie ESP a RPi, ale to żadna różnica, pakiet to pakiet).

Link do komentarza
Share on other sites

(edytowany)

Działa

  display.clearDisplay();
  char bufor[16];
  sprintf(bufor,"%6.2f", termometr[0] / 100.0);
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("Temperatura w salonie");
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(10,12);
  display.print(bufor);
  display.println(" C");
  display.display();
  display.clearDisplay();

Na razie tylko salon, dopasuje jeszcze zewnętrzną, aby się wyświetlała naprzemiennie

ale docelowo muszę pomyśleć o większym wyświetlaczu (może nawet dotykowym jesli to mozliwe).

Na chwilę obecną ten wystarczy.

Mam nadzieję, że to tak miało w zamierzeniu wyglądać.

A soją drogą to jeden DS18b20 mam chyba uszkodzony, mierzy temperatury tylko co 0,5 C

1950 2000 2050 2100 itd.

Edytowano przez jaro44
  • Lubię! 1
Link do komentarza
Share on other sites

35 minut temu, jaro44 napisał:

A soją drogą to jeden DS18b20 mam chyba uszkodzony, mierzy temperatury tylko co 0,5 C

A ustawiłeś rozdzielczość?

w setup():
 

DS18B20.setResolution(12); // 12 bitów czyli 1/16 stopnia
DS18B20.waitForConversion(false); // request nie ma czekać na koniec konwersji

(czy jakoś tak)

 

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

A kto powiedział, że DS ma startować od razu z rozdzielczością 12 bitów? Po to są te funkcje żeby z nich korzystać, a nie po to żeby miejsce we flashu zajmowały...

Termik jest prosty:

Dopisujesz kawałeczek:

if (packetBuffer[0] == 'T' && packetBuffer[0] >='1' && packetBuffer[1] <= '2')
  {
    int indeks = packetBuffer[1] - '1' + 2;
    termometr[indeks] = atoi(packetBuffer+2);
    czas_przyjscia_pakietu[indeks] = millis();
  }
  // i tutaj:
  else // jak to nie termometr, to pewnie pakiet od termika
  {
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    int len=sprintf(packetBuffer,"n1%.2fxn2%.2fxn3%.2fxn4%.2fx",
            termometr[0] / 100.0,
            termometr[1] / 100.0,
            termometr[2] / 100.0,
            termometr[3] / 100.0);
    Udp.write(packetBuffer, len);
    Udp.endPacket();
  }
  // koniec dopisanego fragmentu


    

 

W sumie ważna jest ta jedna linijka ze sprintfem 🙂

Daj znać czy działa (u mnie na RPi działa).

Edytowano przez ethanak
  • Lubię! 1
Link do komentarza
Share on other sites

Przepraszam, mój błąd - tak to jest jak się próbuje robić trzy rzeczy na raz (swoją drogą nieprawidłowy pakiet nie powinien wywalać aplikacji, ale pewnie autor tak chciał).

"n1=%.2fxn2=%.2fxn3=%.2fxn4=%.2fx"

To powinno zadziałać - podmień string formatujcy w sprintf.

 

Link do komentarza
Share on other sites

właśnie przeglądałem float  z oryginału i też mi się wydawało że brakuje tego "=",

ale nie do końca rozumiałem tę konstrukcję:

3 minuty temu, ethanak napisał:

 


"n1=%.2fxn2=%.2fxn3=%.2fxn4=%.2fx"

 

muszę się tego douczyć 😉

niestety dalej go wywala

Link do komentarza
Share on other sites

12 minut temu, jaro44 napisał:

niestety dalej go wywala

Sprawdzę później - teraz mam zajętego kompa.

13 minut temu, jaro44 napisał:

muszę się tego douczyć 😉

Jeśli siedzisz na linuksie wpisz w konsolę "man printf", jeśli nie to wpisz to w google.

Poza tym podawałem taki ładny łink do wikibooks...

 

Link do komentarza
Share on other sites

1 minutę temu, ethanak napisał:

Jeśli siedzisz na linuksie wpisz w konsolę "man printf"

Wszystko ładnie, pięknie, ale ja pochodzę z czasów kiedy jedyny słuszny język obcy to był rosyjski,

więc takie manuale po angielsku to dla mnie męczarnia i nie zawsze zrozumiałe, ale jakoś to strawię.

 

Link do komentarza
Share on other sites

Hm... właśnie wrzuciłem ten program na ESP - działa (termometry mam niepodłączone, ale -127.00 pokazuje bardzo ładnie), nie wywala termika.

Krytyczny fragment:

if (packetBuffer[0] == 'T' && packetBuffer[0] >='1' && packetBuffer[1] <= '2')
  {
    int indeks = packetBuffer[1] - '1' + 2;
    termometr[indeks] = atoi(packetBuffer+2);
    czas_przyjscia_pakietu[indeks] = millis();
  }
  else // jak to nie termometr, to pewnie pakiet od termika
  {
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    int len=sprintf(packetBuffer,"n1=%.2fxn2=%.2fxn3=%.2fxn4=%.2fx",
            termometr[0] / 100.0,
            termometr[1] / 100.0,
            termometr[2] / 100.0,
            termometr[3] / 100.0);
    Udp.write(packetBuffer, len);
    Udp.endPacket();
  }

 

Link do komentarza
Share on other sites

Tak, tak  wszystko działa jak należy. brakowało mi udp.write (nie wiem czy Ty zapomniałeś na początku dodać, czy ja gdzieś zgubiłem).

Najważniejsze, że wszystko pięknie działa, ogromnie dziękuję za cierpliwość i nieocenioną pomoc.

Przetestuje dokładnie i wrzucę tutaj ostateczną wersję.

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.