Witajcie moi drodzy.
Opiszę tutaj krok po kroku proces wymiany modułu WiFi z urządzenia smart. Wymiany tej dokonujemy najczęściej wtedy, gdy chcemy usunąć ze środka moduł WiFi którego nie jesteśmy w stanie programować i zastąpić go czymś popularniejszym, np. modułem opartym na ESP. Pozwala to nam docelowo użyć wybranego firmware open source (np. Tasmoty) i poszerzyć w ten sposób możliwości naszego urządzenia, jak również uniezależnić je od serwerów producenta.
Opisany tutaj proces nazywa się potocznie "ESP8266 brain transplant" i pod tym hasłem znajdziecie w sieci informacje na jego temat.
UWAGA: Do procesu przyda się hot air i może to niektórych odstraszyć, choć ja sam uważam, że to jest dość proste, mi się udało za pierwszym razem a dużego doświadczenia z gorącym powietrzem nie mam.
Plan działania
Przygoda zaczyna się gdy kupimy urządzenie Smart które w środku niestety nie ma ESP, ma np. WB2S czy tam XR3, a mimo to chcemy wgrać mu Tasmotę lub podobny wsad ESP. Wtedy musimy wykonać następujące kroki:
1. porównać pinout modułu ze środka i sprawdzić czy dany ESP (np. ESP12F) może go zastąpić
2. jeśli pinout się zgadza, wylutować moduł ze środka
3. zaprogramować moduł ESP (luzem, ew. po wlutowaniu)
4. wlutować moduł ESP na miejsce modułu
5. dokonać ewentualnych korekt układu (dolutowanie rezystorów niezbędnych dla ESP, ew. przeniesienie funkcji na inne piny)
6. konfiguracja ESP z nowym firmware (tutaj zrobię to na przykładzie Tasmoty)
UWAGA: Opis procesu postaram się zrobić tak, by był uniwersalny, więc nawet jeśli macie inne urządzenie niż ja w temacie to informacje zawarte tu powinny być pomocne.
Zakup czujnika otwarcia drzwi
Czujnik znalazłem w internecie pod hasłem "Smart Wifi Door Window Sensor Burglar Security Alarm For Alexa Google Tuya" za niecałe 10$, czyli 40 zł:
W momencie zakupu nie wiedziałem, że siedzi tam XR809/XR3 a nie ESP.
Czujnikowi temu poświęciłem osobny temat:
Czujnik otwarcia drzwi/okna WiFi - test, wnętrze, integracja z resztą urządzeń
Udało mi się również dla niego zrobić własny firmware kompatybilny z Home Assistant, ale ten temat opisuje proces wymiany modułu, a nie tworzenia firmware, więc założymy, że tego firmware nie mamy (bądź z jakiegoś powodu chcemy konkretnie wgrać mu ESP):
Własny otwarty firmware dla XR809 kompatybilny z Tasmota HTTP/Home Assistant
Po otwarciu tego czujnika zorientowałem się, że w środku jest XR3:
Informacje o XR3:
https://developer.tuya.com/en/docs/iot/xr3-datasheet?id=K98s9168qi49g
Wyprowadzenia XR3 przypominają mi ESP12F. Jest kandydat do podmianki.
XR3 vs ESP12F
Mamy już urządzenie smart z modułem XR3/XR809 i mamy jego potencjalny zamiennik, ESP12F. Warto jeszcze porównać dokładnie ich wyprowadzenia, czy role pinów się zgadzają.
Porównanie:
W XR3 mamy dodatkowy pin GND, który zewrze nam GPIO9 do masy. W XR3 mamy NC (niepodłączony, not connect) pin, w ESP12F jest tam RST. Lokalizacja TXD/RXD jest nieco inna ale to nie problem. Dodatkowo ESP12F pewnie będzie potrzebować dolutowania rezystorów których XR nie wymagał:
Będziemy bootować z SPI Flash, więc już widać gdzie trzeba będzie dolutować rezystory dla tego ESP12F...
Jeśli zamienimy nieznany moduł w urządzeniu Smart na ESP i ten ESP się nie włącza to nie warto się zrażać, tylko trzeba sprawdzić w nocie katalogowej czy wszystkie wymagania są spełnione.
Zakup ESP12F
ESP12F jest bardzo popularny w Internecie i można go kupić w wielu sklepach. Swojego ESP12F kupowałem chyba tutaj:
Z tego co wiem to w obrocie są i oryginalne takie moduły, i ich podróbki, ale na ten moment nie wiem czy mają jakąś znaczącą różnicę do tego zastosowania z tematu.
Wylut modułu XR3
Najpierw musimy wylutować niepożądany moduł WiFi z urządzenia. W tym przypadku będzie to XR3/XR809, chociaż często też zdarzają się WB3S, WB2S i inne (TYWE2S, TYWE3S nie musimy wylutowywać, gdyż one bazują na ESP).
Raczej nie da się tego łatwo zrobić zwykłą lutownicą, chociaż słyszałem o metodach robienia z nagrzanego drutu kształtu pasującego do pinów... ale nie komplikujmy.
Do odlutowanie użyłem taniego hot air z dość słabą regulacją temperatury i dość dużej ilości topnika. Wybrałem końcówkę o małej średnicy i stopniowo nagrzewałem po kolei rzędy padów.
Bardzo ważne jest, by w trakcie odlutowywania nie używać siły. Moduł ma "pływać", nie może być tak że my go ciągniemy do góry, bo wtedy pewnie prędzej oderwiemy pady i będzie problem z przylutowaniem zamiennika.
Oczywiście ważne jest też, by nie przegrać modułu, ale moje subiektywne wrażenie jest takie, że o wiele łatwiej uszkodzić pady niż coś przegrzać.
Wylutowane:
Płytka bez modułu, dość niecodzienny widok. Wszystkie pady całe:
Na tym etapie polecam Wam prześledzić wszystkie ścieżki i zrobić dobrej jakości zdjęcia, bo potem jak się wlutuje moduł ESP na miejsce to już będzie ciężko.
Porównanie obu modułów
Skorzystamy z okazji i porównamy oba moduły wizualnie. Nie widziałem jeszcze XR3 od spodu. Oba mają podpisane pady. Na pierwszy rzut oka wyprowadzenia są zgodne.
Programowanie ESP12F luzem
Teraz mamy dwie możliwości. Możemy:
- albo od razu wlutować moduł z ESP do naszego urządzenia Smart, a potem go programować (potem podpiąć się z UART)
- albo zaprogramować ESP najpierw, a potem wlutować do urządzenia Smart
Wybrałem tą drugą opcję, gdyż chciałem mieć pewność, że wszystko działa przed wlutowaniem modułu do płytki.
Programowanie ESP opisywałem już kilkukrotnie, m. in. tutaj:
- https://www.elektroda.pl/rtvforum/topic3749207.html
- https://www.elektroda.pl/rtvforum/topic3736876.html
- https://www.elektroda.pl/rtvforum/topic3760371.html
Tym razem użyłem nieco innego konwertera USB-UART:
Z niego wykorzystałem tylko RX, TX, +3.3V i GND. Resztę połączeń zrobiłem sam:
To samo zdjęcie ale z naniesionymi rolami pinów:
Do wgrania wsadu po stronie komputera użyłem esptool.py które zainstalowałem wraz ze wsparciem ESP8266 dla Arduino IDE. Poniżej przykład użycia, najpierw komenda chip_id do sprawdzenia czy ESP jest widziany, a potem już programowanie.
Progr:
Następnie odłączyłem zasilanie i podpiąłem GPIO0 do VCC by ESP uruchomił się już nie w trybie programowania, lecz zwykłej pracy i utworzył punkt dostepu Tasmoty potwierdzający to, że wszystko działa:
Czyli ESP na pewno działa, pora go wlutować.
Pierwsze uruchomienie po zamianie XR809 na ESP12F
Przed wlutowaniem oczyściłem pady i posmarowałem topnikiem oraz pobieliłem. Próbowałem najpierw wlutować moduł gorącym powietrzem, ale ostatecznie jednak po prostu każdy jego lut poprawiłem ręcznie lutownicą grotową.
Niestety sieć się nie pojawiała. Musiałem sprawdzić każdy pin multimetrem. Moje podejrzenia się potwierdziły. Trzeba było dodać rezystor 10k pull up dla EN i GPIO0 oraz pull down dla GPIO15. Dodatkowo musiałem usunąć diodę z GPIO15 (niefortunnie akurat tam ją dali i ta dioda wymuszała wysoki stan na tym pinie i uruchamiała bootowanie ESP z karty SD...).
Tyle starczyło, by ESP ożył.
Uruchamiamy diodę LED z pokładu i przycisk
Diodę LED z pokładu przeniosłem na wybrany przez siebie pin, dodałem po prostu zworkę.
Przycisk był na pinie GPIO13.
Tyle starczyło by sterować diodą LED przez WWW:
Sposób na czujnik czyli Tasmota i pin digital input
Obsługa czujnika magnetycznego otwarcia/zamknięcia drzwi sprowadza się do wykonania odczytu z pinu w trybie digital input. Z pozoru powinno być łatwo, ale mamy tu dwa małe problemy do pokonania.
Po pierwsze, Tasmota nie posiada trybu "Digital input" dla pinu, mamy tylko Switch lub Button a dodatkowo stan ich nie jest pokazywany na GUI Tasmoty. Da się to rozwiązać poprzez dodanie dodatkowego pinu udającego Relay i nadanie mu tego samego numeru co nasz Switch. Ten pin w rzeczywistości nie będzie nigdzie podłączony, ale wtedy GUI Tasmoty będzie wyświetlać ten niby-Relay i w ten sposób nam pokaże stan Switcha (bo Switch i Relay o tym samym indeksie są automatycznie połączone w Tasmocie).
Czyli taka konfiguracja:
Po drugie, to jednak nie wszystko. W przypadku tego czujnika drzwi XR809 trzeba wykonać jeszcze poprawkę na PCB, inaczej Switch będzie mieć ciągle stan wysoki.
Krótka analiza układu pokazuje, że czujnik magnetyczny ma rezystor pull up (do zasilania) 10k oraz pull down (do masy) 3M. GPIO jest podłączone do pull down. W stanie "otwartym" jest tam 2.2V a w stanie "zamkniętym" 3.3V. Czyli ciągle stan wysoki.
Moim zdaniem w XR3 to działało dlatego, że XR3 może pracować na napięciach do 5.5V, a ESP z kolei tylko na 3.3V.
Trzeba więc zamienić ten rezystor pull down na jakieś 10k, albo po prostu zamienić albo dolutować do niego drugi tak by rezystancja wypadkowa była w tej okolicy.
Szkic/schemat sytuacji:
Dolutowany 10k:
Po tej operacji poziomy logiczne są w normie. Od razu wykrywana jest zmiana stanu:
Pierwsze ON/OFF to przycisk tymczasowo przypisany do diody LED, a drugie ON/OFF to stan drzwi (czujnik magnetyczny).
Dodawanie do Home Assistant
Warto jeszcze pokazać co możemy zrobić z tak przygotowanym czujnikiem drzwi w praktyce.
Dodamy go do Home Assistant, który u mnie chodzi na moim własnym małym domowym serwerze.
Wszystko szczegółowo opisałem tutaj:
https://www.elektroda.pl/rtvforum/topic3777098.html
Czujnik drzwi dodamy poprzez MQTT. Konfiguracja MQTT (ale np. Wasze hasło z pewnością będzie inne):
Czujnik od razu jest wykrywany, choć nie wiem czemu jako "Nieznane urządzenie":
Można wejść w informacje o tym urządzeniu. Tu widać mały problem - Home Assistant wykrywa tylko jeden relay (jeden stan) z dwóch, zaraz to naprawimy.
Power 2 nie jest widoczny, ale w MQTT jest (okno poniżej dostępne jest pod przyciskiem "MQTT INFO"):
Czyli MQTT przesyła niezbędne informacje do HA, po stronie HA tylko musimy coś poprawić.
Z pomocą przychodzi dokumentacja Tasmoty:
https://tasmota.github.io/docs/Home-Assistant/
Akapit "Multiple switches" mówi jak musimy zmodyfikować konfigurację:
Mój zmodyfikowany configuration.yaml (dodałem to co w czerwonej ramce):
Ważne jest, by pamiętać o ustawieniu nazwy urządzenia. Tutaj to tasmota_7C4541. Nazwa ta dostępna jest dla nas od początku, nawet otwarty access point Tasmoty ją zawiera, warto ją sobie zanotować.
Kod: text
W ten sposób od razu mam na panelu oba relay z Tasmoty (zarówno ten który rzeczywiście jest diodą LED oraz ten który odczytuje tylko stan drzwi):
Można wejść w ich ustawienia:
Zmienić im nazwę na coś sensownego:
I przede wszystkim można je wykorzystać w automatyzacjach.
Home Assistant - automatyzacja stanu drzwi
Na tym etapie mamy wszystko gotowe do wykonywania automatyzacji. Opisywałem je kilka razy, więc odsyłam do powiązanych tematów:
- Tutorial Home Assistant - konfiguracja, WiFi, MQTT, Zigbee, Tasmota
- Sterownik przekaźników kompatybilny z Home Assistant/Tasmota HTTP + obudowa
Bez problemu możemy teraz wyzwalać zdarzenia w momencie np. otwarcia drzwi i zapalać wtedy automatycznie światło w pokoju bądź wysyłać powiadomienie. A Home Assistant zapewnia nam kompatybilność z naprawdę duża ilością sprzętu różnych producentów.
Co jeszcze trzeba by zrobić?
Zasadniczo zostało jeszcze zrobić jedno, by moduł był 100% przekształcony na ESP. Brakuje jeszcze odczytu stanu baterii, który wykonywany był na XR3 przez wejście ADC. Można by spróbować przeportować tą funkcjonalność do Tasmoty, ale na ten moment tu się zatrzymam i tymczasowo polecę po prostu odłączenie/odcięcie odpowiedniej ścieżki.
Podsumowanie
Zamiana modułu XR3 na ESP12F udała się bez większych problemów. Co prawda trzeba było dolutować kilka rezystorów, ale po sprawdzeniu noty katalogowej ESP powinno być jasne gdzie się je dodaje i w jakim celu.
Musiałem również przenieść diodę LED z GPIO15, bo tam akurat wadziła (wymuszała stan wysoki na tym pinie a to blokowało uruchomienie ESP).
Operacja zwana w społeczeństwach ESP jako "esp brain transplant" wcale nie jest taka trudna, choć trzeba mieć te gorące powietrze by w miarę wygodnie odlutować moduł.
Oczywiście nie tylko XR3/XR809 można tak wymienić. Jest wiele innych modułów o zgodnych wyprowadzeniach, trzeba tylko poszukać. Co więcej, też moduły Zigbee mają podobne wyprowadzenia więc zamiana urządzenia z Zigbee na ESP też jest możliwa.
Zostaje jeszcze aspekt ekonomiczny całej wymiany. W przypadku wielu urządzeń się to zdecydowanie nie opłaca. Nie oznacza jednak, że jest tak zawsze. Droższe urządzenia smart mogą nie mieć w środku ESP oraz nie posiadać identycznych odpowiedników z ESP. Na przykład w kolejce do przeróbki mam filtr powietrza Alfawise P2 Hepa, wkrótce będę do niego zaglądać i jeśli nie będzie tam ESP to pewnie dokonam przeróbki.
Czy przerabialiście jakieś urządzenia Smart tak by korzystały z modułu z ESP i jakie macie z tym doświadczenia?
Fajne? Ranking DIY Pomogłem? Kup mi kawę.
