Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

ESP8266-12 + Mega2560 + DS18B20 + LED 7-seg TM1637 = wysyłanie pomarów MySQL WWW

szczepulek 26 Oct 2019 08:43 2442 2
Tespol
  • ESP8266-12 + Mega2560 + DS18B20 + LED 7-seg TM1637 = wysyłanie pomarów MySQL WWW
    *

    Witam po dłuższej przerwie, tym razem dział mikro kontrolerów.

    Wymagania dla projektu / założenia:
    Pomiar w pomieszczeniu/obudowie urządzenia/w zbiorniku temperatury powietrza/cieczy na wejściu i wyjściu. Wyświetlenie na żywo aktualnych wartości temperatur na wyświetlaczu LED x2. Wykrywanie przekroczenia ustalonych granic i alarmowanie poprzez przekaźnik sygnalizacją świetlną. Gdy urządzenie zewnętrzne daje sygnał o pracy do układu ESP ten co 5 min wysyła dane z czujników do bazy danych mysql poprzez stronę PHP na serwerze.

    Sprzęt:
    * ESP8266-12E - do komunikacji przez wifi do serwera z bazą danych
    * Arduino Mega2560 - pobranie temp. z czujników, wyświetlanie temperatur, wysyłanie po Serial pomiarów do ESP, i informacji o alarmach, Nr np. linii produkcyjnej/ pomieszczeniu/ urządzeniu monitorowanemu.
    * Arduino UNO r3 - do testów komunikacji po Serial/SoftwareSerial
    * DS18B20 x2 - czujniki temperatur w wersji wodoodpornej.
    * Moduł wyświetlacza czterocyfrowego LED 8 segmentowy na TM1637 x2 - wyświetlanie aktualnych temperatur, i parametrów urządzenia.
    * Kable, przekaźniki, i inne pierdołki.

    Na wstępie, projekt przedstawiłem na innym forum, nie ograniczam się do jednej społeczności forum, bo ludzie szukają rozwiązań w różnych miejscach, i pomocy.

    Początkowe problemy jakie miałem to:

    - Zbyt długi czas pomiaru na DS18B20 (przy 2 czujnikach ponad 1400ms /12bit rozdzielczość)
    + Częściowo rozwiązany poprzez ustawienie rozdzielczości na 9bit, czas pomiaru 1 czujnika około 35ms

    - Obsługa czujników DS na 1-wire i konieczność zaprogramowania na nowo płytki w momencie wymiany uszkodzonego czujnika na przykład
    + Rozwiązano poprzez wpięcie na różnych pinach osobno czujnika wejściowej temp, i wyjściowej. Co do konieczności zmiany indywidualnego znacznika każdego czujnika, ich numer jest na początku pobierany/odczytany dla obu linii komunikacyjnych i zapisywany tymczasowo w tablicy. Działa.

    - Wyświetlanie na dwóch wyświetlaczach/modułach LED z tm1637 (komunikacja po 2 przewodach, brak indywidualnych adresów wyświetlaczy)
    + Podłączenie na osobnych pinach każdego z modułu. Co do czasu na obsługę wyświetlacza około 42ms. sporo...

    - Wymiana informacji o pomiarach i podstawowych parametrach między płytkami pomiaru i wysyłania danych na serwer.
    + Rozwiązano, może nie profesjonalnie, ale działa. Niestety wszelakie poradniki, przykłady w sieci, nie działały.. lub były nie w pełni opisane/napisane. To mi zjadło najwięcej zdrowia. Po oglądnięciu kanału Elektromaniak'a, i zlepku informacji kilku stron o łączności szeregowej, itp. udało się połączyć ze sobą narazie Mega i Uno, ESP potem zajmę się.

    - Ustawienia i zapamiętanie na Mega 2560 wartości dla progu alarmu, wyświetlenie wartości na jednym z wyświetlaczy. A także zmiana nr pomieszczenia/urządzenia monitorowanego.
    + Do rozwiązania ... teraz za to się biorę.

    - Wysyłanie wartości zmierzonych do bazy danych.
    + jeszcze nie napisany kod, nie utworzona baza. W olejnych krokach będzie rozwiązywany ten punkt.

    UWAGI:

    Przede wszystkim na co należy zwrócić uwagę, jak zawsze.. czy prawidłowo podłączone okablowanie, zasilenie układów, modułów, dla komunikacji po serial'u nie zapomnieć połączyć GND obu płytek, a w przypadku ESP8266 linie TX, RX podłączyć przez konwerter stanów logicznych. Aha, do obsługi czujników temperatury użyłem biblioteki DS18B20.h ale w wersji 1 !!!, nowsze biblioteki lub Texas'a nie uwzględniają parametru rozdzielczości pomiarów dla linii kodu
    Code:
    sensor_airout.begin(9);
    wyrzucając błąd. Parametr w nawiasach w dla biblioteki w wersji 1.0 odpowiada rozdzielczości pomiarów. Czyli co 0.5 stopnia C.

    A teraz nieco kodu..
    Pomiar, wyświetlanie, serial TX - Arduino Mega2560
    Code: c
    Log in, to see the code


    Kod dla UNO (dla testów, domyślnie ESP) odbiór parametrów i pomiarów poprzez serial. Wyświetlenie w serial monitor czy wszystko przebiega prawidłowo.
    Oczywiście w materiale źródłowym wykorzystano kilka linii kodu do liczenia sum kontrolnych. Ja to pominąłem. Sprawdzane podczas odbioru są tylko znaki początkowe i końcowe przesyłanych danych, jeśli są poprawne i identyczne to wykonuje się zapis do tablic danych, i przeliczenie ich na wartość temperatur w postaci z ułamkiem.. np 21.50 *C,

    Code: c
    Log in, to see the code


    Jeszcze sporo pracy do wykonania.
    Postaram się na bieżąco informować o postępach.
    Zaznaczam że jestem mocno początkujący.. i osoby siedzące w temacie na pewno znajdą wiele uproszczeń i błędów, będę wdzięczny za sugestia..
    Chcę również podziękować RFM za pomoc i podpowiedzi. Postaram się w niedalekiej przyszłości wykorzystać je.

    Cool? Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    szczepulek
    Level 12  
    Offline 
    pasjonuje się elektroniką i innymi dziedzinami powiązanymi od młodzieńczych lat
    Has specialization in: CVS
    szczepulek wrote 151 posts with rating 24, helped 0 times. Live in city Bielsko-Biała. Been with us since 2006 year.
  • Tespol
  • #2
    kulpen
    Level 11  
    wydaje mi się że w nowszych bibliotekach dallasa rozdzielczość ustawia się komendą:

    #define TEMPERATURE_PRECISION 9
  • #3
    szczepulek
    Level 12  
    ESP8266-12 + Mega2560 + DS18B20 + LED 7-seg TM1637 = wysyłanie pomarów MySQL WWW


    Witam, PROJEKT ostatecznie ukończony :D

    wersja ostateczna programów dla płytek MASTER Arduino Mega2560 i SLAVE ESP8266-12E

    Testowałem urządzenie przez kilka dni, w międzyczasie dokonałem kilku przeróbek, jak w kodzie tak i w połączeniach PIN itp.
    Usunięte zostały wykryte błędy, najważniejsze to obsługa klawiszy i błąd podczas modyfikacji bez zapisu - blokada dodawania wartości ustawień tylko zmniejszanie działało, i drugi błąd to literówka w linii kodu przy komunikatach dla Err1 i 2, dokładnie to pobranie nowych adresów DS18B20 pomieszane było.

    Na WSTĘPIE:
    Spora część kodu zapisanego jest moja, nie kopiowana bezpośrednio z kursów programowania itp., dlatego proszę o zrozumienie. ZASTRZEGAM sobie prawo do całości kodu , bądź jego części napisanej na potrzeby własnego projektu przeze mnie (własność intelektualna ;] ).
    NIE ZEZWALAM na kopiowanie w/w kodu i umieszczanie go/wykorzystanie przez osoby trzecie w celu brania udziału w: konkursach, egzaminach, artykułach publikacjach i tym podobne, bez mojej wyraźnej zgody.
    Jak najbardziej można używać do celów własnych i modyfikowanie, z wyżej wymienionymi zastrzeżeniami. Proszę o uszanowanie mojego czasu i wysiłku :-)

    Odnośnie testów słów kilka, główny problem stanowiły czujniki DS18B20. Nie sama ich obsługa i wyświetlanie, a PODATNOŚĆ NA ŁADUNKI ELEKTROSTATYCZNE.
    Objawiało się to wyświetlaniem Err1 lub Err2 po zamontowaniu na produkcji, duża ilość elementów z tworzyw sztucznych w pobliżu czujnika podczas pocierania i obijania sie o siebie wytwarzała ładunki, które to powodował prawdopodobnie zmianę polaryzacji prądu w czujniku (zamiast minusa występowały tam dodatnie ładunki, a na plusie wtedy niższy potencjał)
    Efektem tego było chwilowe nagrzanie się czujnika do około 80 st.C !!! w internecie sporo informacji znalazłem ,że i owszem grzeją się te układy gdy zamienimy + z -.
    Byłem przez to zmuszony do wymiany czujników na analogowe a dokładnie użyłem Termistory NTC 5k Ohm (-50 +150 *C; beta 3490; 0.5%)
    ESP8266-12 + Mega2560 + DS18B20 + LED 7-seg TM1637 = wysyłanie pomarów MySQL WWW

    Zatem podaję dwa szkice dla Mega2560, dla różnych czujników. Oraz jeden szkic do ESP8266-12E
    Raz jeszcze powtarzam, niektóre PINy pełnią inne funkcje niż wcześniej. Na Mega2560 dodana funkcja RESETU/RESTARTU programowego gdy Err1 lub 2 zbyt długo nie znikają. PIN 9 daje stan niski na PIN Reset

    Do pobrania w ZIP'ach szkice dla Arduini IDE .ino

    Mega2560 MASTER, czujnik cyfrowy DS18B20 :
    PomiarTemp...S18B20.zip Download (9.19 kB)

    Code: c
    Log in, to see the code


    Mega2560 MASTER, czujnik analogowy NTC 5k ohm :
    2PomiarTem..._NCT5k.zip Download (39.18 kB)

    UWAGA ze względu na ograniczenie ilości znaków 65000 w jednym poście, poniższy KOD nie jest pełny, pobierz plik aby mieć całość..
    Code: c
    Log in, to see the code


    ESP8266-12E SLAVE łączący się z bazą danych, zapis poprzez plik PHP [i]wyslijpomiar.php :
    PomiarTemp...nMySQL.zip Download (3.7 kB)

    Code: c
    Log in, to see the code


    Wyświetlanie bazy danych i zapisów też zrealizowałem za pomocą PHP.
    Serwer WWW i baza danych MySQL utworzona za pomocą XAMPP na komputerze w sieci LAN.

    Ostrzegam :) pisane starodawną techniką piętnaście lat wstecz bez CSS wszędzie DIV-ów itp :) strona miała być prosta tylko do szybkiego odczytu danych. Ostatecznie pomiary wyświetlane są w programie pisanym na Windows, w tabelach i prostym wykresie.
    Zawartość pliku[i] wyslijpomiar.php znajdujący się w katalogu strony serwera WWW:
    Code: php
    Log in, to see the code


    Jeśli chcesz wyświetlić dane posegregowane wg. linii (w moim przypadku) i podziałem tabeli wyników na strony.. pobierz pliki PHP.
    esp8266 da...na WWW.zip Download (4.6 kB)

    Oto kilka screen'ów z wyświetlania wyników w tabeli, budowy urządzenia/rejestratora, struktury tabeli 'pomiary' w bazie danych.

    ESP8266-12 + Mega2560 + DS18B20 + LED 7-seg TM1637 = wysyłanie pomarów MySQL WWW
    ESP8266-12 + Mega2560 + DS18B20 + LED 7-seg TM1637 = wysyłanie pomarów MySQL WWW
    ESP8266-12 + Mega2560 + DS18B20 + LED 7-seg TM1637 = wysyłanie pomarów MySQL WWW

    ESP8266-12 + Mega2560 + DS18B20 + LED 7-seg TM1637 = wysyłanie pomarów MySQL WWW ESP8266-12 + Mega2560 + DS18B20 + LED 7-seg TM1637 = wysyłanie pomarów MySQL WWW ESP8266-12 + Mega2560 + DS18B20 + LED 7-seg TM1637 = wysyłanie pomarów MySQL WWW ESP8266-12 + Mega2560 + DS18B20 + LED 7-seg TM1637 = wysyłanie pomarów MySQL WWW