ESP8266 - Paweł Szabaciuk

Paweł Szabaciuk

Software Developer

Tag: ESP8266

SystemAIR Modbus RTU

W pracy trafił się temat gadania po protokole Modbus. Przy użyciu standardowego Modbusa RTU. W dość znacznej prędkości 9600 🙂 A co najlepsze, to wyjście z urządzenia jest RS232, do tego przejście na RS485 i w takiej postaci mam się podłączyć 🙂

Poczytałem, poszukałem i co nieco się dowiedziałem od strony praktycznej.

Na początek mamy zdefiniowanych kilka bytów, określających rodzaje danych.
Rodzaje rejestrów zdefiniowanych przez protokół Modbus:

  • Coil – jest to 1 bitowy rejestr, wykorzystywany do kontroli wyjścia. Może być do odczytu i/lub do zapisu
  • Discrete Input – jest to 1 bitowy rejestr, używany jako wejście. Może być tylko do odczytu
  • Input Register – 16 bitowy rejestry, używany jako wejście. Może być tylko do odczytu
  • Holding registers – najbardziej uniwersalne 16 bitowe rejestry. Mogą być do odczytu i do zapisu. Może być używany np. do wejść, wyjść, danych konfiguracyjnych lub dowolnych danych wymagających przechowania

Jak widać, wielkiej filozofii nie ma, o ile mamy dokumentację techniczną producenta co gdzie pod jakim adresem siedzi.

Ponieważ nie mogę nic mówić o projekcie z pracy, postanowiłem podłączyć się do centrali wentylacyjnej, która to gada sobie po RS485 i Modbus z dowolnym urządzeniem master.
Ogólno dostępna dokumentacja do central wentylacyjnych firmy SystemAir.

Mamy tutaj rozpisane dokładnie jakie są rejestry, pod jakimi adresami, czy można je zapisywać czy odczytywać i jakiego są rodzaju.
Drugą istotną informacją jest adres i prędkość transmisji. Każde urządzenie slave w Modbus musi mieć swój unikalny adres. I tak na przykładzie centrali, mamy domyślnie adres 1. Pod taki adres się dobijamy, żeby np. odczytać informację o prędkości wentylacji, która to jest dostępna pod adresem 101 (czyli 101 – 1, zgodnie z dokumentacją).

W dokumentacji widzimy też, że rejestr ten może być zapisany nową wartością, i tak możemy odczytać i zmienić szybkość działania wentylatorów w centrali.

Na tej podstawie powstał prosty sterownik, oparty na starej płytce, pół-uniwersalnej na ESP8266.

Płytka jest identyczna z postem: Sterowanie pompą obiegową od cyrkulacji. Wlutowany został tylko transceiver MAX3485 do komunikacji po RS485 z centralą.

W wyniku pół dnia siedzenia nad kodem, mamy prostą aplikację do monitorowania danych i konfiguracji centrali przez stronę www.

W planach połączenie centrali z czujnikami środowiskowymi i sterowanie bardziej automatyczne siłą wentylacji z automatu.

Sterowanie pompą obiegową od cyrkulacji

Dzisiaj temat dość prozaiczny. Recyrkulacja wody w instalacji domowej, żeby po odkręceniu kranu leciał z niego Johny Walk… wróć! ciepła woda. I żeby nie trzeba było na tę ciepłą wodę czekać. Tylko żeby od razu była ciepła.

Problem jest w tym, że zimą woda jest ogrzewana przez piec, a piec ma możliwość sterowania pompą. Nawet potrafi ją włączać cyklicznie, co by ciepło w zasobniku oszczędzać. Tylko trzeba było sobie instrukcję doczytać. Bo pan serwisant, który uruchamiał instalację o takiej rzeczy nie wiedział. Albo nie pomyślał.

Inaczej jest latem, kiedy to woda ciepła jest pozyskiwana z innych źródeł. Na przykład kolektory słoneczne, pompa ciepła etc. Wtedy nie za bardzo ma co sterować pompką.

Samo sterowanie jest banalnie proste, raz na jakiś czas, mieszamy wodę w instalacji przez załączenie napięcia na pompie. W piecu można ustawić to mieszanie od 1x na godzine na 5 minut do 6x na godzinę na 5 minut. Lektura elektrody zaś głosi, że trzeba to robić raz na 5 minut przez minutę. Zimą miałem 5×5, latem mam 10×1 i nie widzę różnicy.

Do tej pory miałem prosty układ na ATMega328. Nie posiadał on jednak RTC, wobec czego, całość działała całą dobę.
Całą dobę ciepłej wody jednak nie używamy. W nocy zazwyczaj śpimy, więc żeby oszczędzić trochę ciepła w zasobniku, nie ma sensu odpalać pompki w godzinach nocnych.

Powstał więc układ na ESP8266. Pilnuje on sobie czasu na liczniku, natomiast aktualny czas pozyskuje sobie z internetu. Przez NTP. Jak zabraknie prądu i nie będzie internetu, to do czasu pozyskania aktualnego czasu i tak będzie mieszać wodę, tyle, że całą dobę.

Używam WebSocketów do prezentacji real-time czy pompka aktualnie jest włączona, czy też nie. No i można sobie skonfigurować godziny pracy oraz zakresy czasowe dla stanów ON i OFF.

Schemat jest banalny. Typowa implementacja ESP12E z automatycznym programowaniem przy użyciu RTS i DTR. Pamiętajcie tylko o wyprowadzeniu masy do konwertera USB< ->UART. Ja zapomniałem (schemat już poprawiony). Przez co straciłem trochę czasu na walkę z komunikacją.
Brakuje przekaźnika, ponieważ mam już płytkę z przekaźnikiem, do której jest podłączona pompa obiegowa, potrzebuję tylko podać sygnał z zakresu 3 – 5V żeby przekaźnik załączył pompę.

Sterownik wygląda tak:

Płytka jest „uniwersalna”, to znaczy ma obsłużyć jeszcze dwie inne sytuacje, dlatego ma dodatkowe elementy, i miejsce na kolejne. Może kiedyś to też opiszę 🙂

Tradycyjnie też, kilka screenów z aplikacji:

© 2018 Paweł Szabaciuk

Theme by Anders NorenUp ↑