Spisu treści:
- Krok 1: Jak to zrobimy
- Krok 2: Potrzebny sprzęt
- Krok 3: Protokół Jury
- Krok 4: Demontaż
- Krok 5: Unieważnienie gwarancji
- Krok 6: Okablowanie strony logicznej
- Krok 7: Programowanie modułu
- Krok 8: Spraw, aby to robiło…
- Krok 9: Udoskonalenia/Todo
Wideo: Ekspres do kawy z obsługą IoT: 9 kroków (ze zdjęciami)
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:31
Ta instrukcja została zgłoszona do konkursu IoT - jeśli Ci się spodoba, zagłosuj na nią
AKTUALIZACJA: Teraz obsługuje dwukierunkową komunikację i aktualizacje OTA
Od jakiegoś czasu mam ekspres do kawy Jura i zawsze chciałem go jakoś zautomatyzować.
Od kilku lat prowadzę podstawowy system automatyki domowej, ale ekspres do kawy nie był czymś łatwym do zmodyfikowania (a przynajmniej tak mi się wydawało). Ekspresy do kawy Jura zazwyczaj mają „port diagnostyczny” i/lub port służący do dodawania systemu płatności do maszyny, jednak nie mogłem znaleźć żadnych informacji o tym, jak można go wykorzystać. Niedawno protokół został poddany inżynierii wstecznej przez niektóre osoby i upubliczniony. Problem polegał na tym, że większość odniesień do dostępnych funkcji dotyczyła znacznie większych maszyn niż moja (Ena 7).
Co więcej, moja maszyna nie ma stałego zasilania w trybie czuwania, jak większe maszyny, zamiast tego ma przełącznik HV, który sprawia, że zasilanie się „zatrzaskuje”. Fizyczny przycisk na urządzeniu faktycznie aktywuje 2 przełączniki - jeden niski wolt (strona logiczna, wyłącz) i jeden wysoki wolt (włączanie). Oba przełączniki są chwilowe.
Musiałem również upewnić się, że maszyna nadal działa w 100% niezależnie od jakiegokolwiek mechanizmu sterującego, tj. Maszyna nadal działa normalnie, jakby nie była włączona IoT.
Automatyzacja urządzenia wymaga dwóch rzeczy: 1) Aby móc kontrolować zasilanie urządzenia 2) Aby móc komunikować się z urządzeniem w celu aktywacji funkcji parzenia kawy, płukania itp.
Krok 1: Jak to zrobimy
Użyjemy modułu ESP8266 'ESP-01', aby połączyć się z domowym Wi-Fi i zasubskrybować serwer/temat MQTT nasłuchujący poleceń. „Front End”, którego użyłem, to OpenHAB2, ale nie ma powodu, dla którego nie można było dodać interfejsu sieciowego na urządzeniu i sterować bezpośrednio, jeśli chcesz, lub za pomocą poleceń HTTP Get.
ESP8266 będzie obsługiwał sterowanie 2 przekaźnikami związanymi z przyciskiem zasilania, a także przetwarzał polecenia szeregowe do/z ekspresu do kawy.
OSTRZEŻENIE - Ta instrukcja opisuje procedurę, której użyłem do zmodyfikowania mojego ekspresu do kawy Jura Ena7, który ma być sterowany za pomocą automatyki domowej. Zajmuje się modyfikacją urządzenia sieciowego, które może być niebezpieczne, jeśli zostanie wykonane nieprawidłowo. Informacje tutaj mogą być niekompletne, niedokładne i niebezpieczne. Postępuj ostrożnie. Nie przyjmujemy żadnej odpowiedzialności.
Krok 2: Potrzebny sprzęt
Części
- Moduł ESP-01 i sposób jego programowania (Arduino IDE i fizyczny adapter do programowania)
- 2-drożny moduł przekaźnikowy EBAY
- Regulator 5v -> 3.3v EBAY
- Mała ładowarka do telefonu zasilana z sieci 5 V
- Konwerter poziomów logicznych* Freetronics
- Różne przewody, nagłówki pinów, termokurczliwe itp. do połączenia tego wszystkiego.
Narzędzia
- Lutownica z drobną końcówką
- Lutować
- Narzędzia do ściągania izolacji są przydatne
- Sterownik Torx T15
- Owalne narzędzie zabezpieczające (lub zrób je, zajmuje tylko kilka minut)
*Początkowo używałem arduino UNO w moich testach wszystkich poleceń szeregowych do maszyny i działał bezbłędnie, jednak moduł ESP odmówił pracy. Trzykrotnie sprawdziłem kod i byłem pewien, że polecenia wychodzące z modułu ESP są takie same jak w arduino, jednak nie było to możliwe. Sprowadzam to do modułu ESP pracującego tylko na logice 3.3v a nie 5V. Po włożeniu konwertera logiki działał dobrze. Może to być, ale nie musi być wymagane w innych maszynach.
Idealnie byłoby mieć istniejący system automatyki domowej, który obsługuje protokół MQTT (taki jak openhab), ponieważ jest to cel projektu. Jeśli chcesz sterować nim tylko za pomocą przycisków na stronie internetowej bez żadnych systemów wspierających, będziesz musiał wprowadzić pewne zmiany w osadzonym kodzie strony internetowej. Nie jest to zbyt skomplikowane do osiągnięcia (może rev2..)
Krok 3: Protokół Jury
Dane do/z maszyny są po prostu seryjne @ 9600, ale Jura też ma w zanadrzu kilka sztuczek. Protokół używa tego do dodatkowego ECC i/lub do zaciemniania komunikacji. Mówiąc najprościej, każdy bajt danych (znak) jest podzielony na bity 2 i 5 z 4 standardowych bajtów szeregowych zakończonych 8ms pauzą. Jeśli chcesz dowiedzieć się, jak to działa, w linkach tutaj znajdziesz mnóstwo informacji.
Informacje o protokole pobrane z:
Kod arduino upraszcza to, umożliwiając przesyłanie standardowych, czytelnych dla człowieka poleceń, które następnie transponuje do protokołu Jura.
Mój kod jest kombinacją kodu z:
Polecenia wymienione w powyższych witrynach nie były dokładne dla mojego komputera, ale dzięki metodzie prób i błędów udało mi się wymyślić poniższe:
FA:01 – Wyłącza się (ale nie spłukuje, nawet w razie potrzeby) FA:02 – Odpowiada „w porządku”, ale nie jest pewien, co robi. FA:03 - Komunikat płukania (Wymusza komunikat „płukanie” na ekranie, naciśnięcie zmywarki rotacyjnej) FA:04 - Działanie płukania - Płukanie po wyświetleniu komunikatu „Naciśnij przycisk obrotowy”, w przeciwnym razie nic nie robi FA:05 - Silne na ekranie (Przypuszczalnie połącz to z zrobieniem mocnej kawy) FA:06 – Mocna na ekranie (Przypuszczalnie połącz to z zrobieniem mocnej kawy) FA:07 – „Specjalne” na ekranie, ale w rzeczywistości nic nie robi, nie jestem pewien, do czego to służy FA:08 – Para FA:09 – Mała kawa FA:0A – Duża kawa
Są inne polecenia, ale to dla mnie dużo…
Zachowaj ostrożność podczas wydawania nieznanych poleceń, na przykład najwyraźniej AN:0A wyczyści pamięć EEPROM komputera.
Krok 4: Demontaż
Samo otwarcie maszyny nie jest zbyt łatwe, ponieważ potrzebujesz trochę specjalnych narzędzi, ale zapalona osoba znajdzie sposób - potrzebujesz bitu Torx T15 i "klucza owalnego" na 2 śruby. Torx, który już miałem, owalne narzędzie, które zrobiłem z 4mm śruby z łbem gniazdowym, wywiercone i spłaszczone trochę młotkiem.
Instrukcje tutaj są dość dobrze przedstawione -
Krok 5: Unieważnienie gwarancji
Po wejściu do maszyny zobaczysz główne komponenty. Główne gniazdo zasilania ma pod nim ładne miejsce do podłączenia ładowarki 5V.
Dodałem przewody (ocena sieciowa) do listwy zaciskowej przy wejściu do maszyny i przylutowałem / obkurczyłem je do pinów sieciowych ładowarki 5V. Mój konkretny model nie był typem portu USB, ale takim, który miał podłączony na stałe przewód. Możesz nie mieć wystarczająco dużo miejsca na port USB, aby móc użyć rzeczywistego kabla USB, ale jeśli otworzysz ładowarkę, możesz usunąć port USB i zastąpić go standardowym przewodem do punktów 5V i Gnd.
Możesz zastąpić inny zasilacz sieciowy 5 V, jeśli chcesz. 500mA powinno wystarczyć.
W pobliżu szlifierki jest dużo miejsca na moduł przekaźnika. Musimy okablować oba przekaźniki, aby działały równolegle z głównymi wyłącznikami zasilania. Po prostu przeciąłem istniejące przewody, odizolowałem, ocynowałem, dodałem dodatkowy przewód i ponownie zlutowałem (nie zapomnij o termokurczliwych). Aby to zrobić, było wystarczająco dużo luzu na przewodach.
Moduł przekaźnika mocowany jest za pomocą dobrej jakości taśmy dwustronnej. Przy podłączonych przewodach i ograniczonej przestrzeni na ruch, nawet jeśli taśma straci przyczepność, moduł nie posunie się za daleko i nie będzie mógł zetknąć się z żadnymi metalowymi przedmiotami.
Zbadałem również wstecznie port diagnostyczny na moim komputerze, aby określić lokalizację połączeń wewnętrznych, aby uzyskać całkowicie ukrytą integrację. Używane są tylko przewody tx, rx i Gnd.
Jeśli masz bardziej komercyjną maszynę, która obsługuje napięcie w trybie czuwania i/lub nie chcesz unieważnić gwarancji na swoją maszynę, możesz zamiast tego podłączyć ją bezpośrednio do portu diagnostycznego, ale możesz nie być w stanie włączyć urządzenia za pomocą tego urządzenia.
Moja maszyna używa 7-stykowego złącza. Od lewej do prawej jest to:
NC Tx G Rx NC 5 V NC
Odpowiednie piny na płycie głównej: Czerwony = Gnd Pomarańczowy = Rx Czarny = Tx
Więcej informacji można znaleźć na pinoutach tutaj:
Krok 6: Okablowanie strony logicznej
Przejrzyj diagram - wygląda na zbyt skomplikowany, ale tak naprawdę nie jest.
Zamontowałem konwerter poziomu z tyłu (zdepinanego) regulatora napięcia za pomocą taśmy dwustronnej. Następnie użyłem kilku nóżek komponentów do przylutowania pinów zasilania i uziemienia po obu stronach konwertera poziomu do odpowiednich pinów modułu mocy. Cały ten moduł działa wtedy jak „przejście” dla całej logiki i zasilania dla ESP-01.
Użyłem dwóch środkowych konwerterów do danych szeregowych i dwóch zewnętrznych do sygnałów sterujących przekaźnikiem, ale nie ma znaczenia, którego używasz.
W przypadku tych modułów przekaźnikowych nie jest konieczne uruchamianie logiki 5V, ponieważ są one aktywne na niskim poziomie, ale po prostu działały ładnie, więc i tak to zrobiłem.
Do podłączenia do modułu ESP użyłem żeńskiego złącza 4x2. Pozwala to na łatwe wgranie kodu lub wymianę modułu.
Na schemacie nie pokazane jest wejście 5V - swoje podłączyłem bezpośrednio do modułu przekaźnika (patrz drugie zdjęcie). Czarny przewód w lewym dolnym rogu obrazu to szeregowe dane do płyty głównej. Użyłem części ekranowanego przedłużacza słuchawkowego 3,5 mm, aby zmniejszyć ryzyko zakłóceń w linii danych.
Kod 12f używa oprogramowania SoftwareSerial zamiast sprzętowego serialu - umożliwia to modułowi raportowanie stanu w celu debugowania z powrotem przez normalny serial. Połączenia są realizowane przez piny 4 i 5. Zaadaptowałem ten sam nagłówek, aby ESP12F stał się wtyczką do wymiany dla ESP-01, po prostu zamieniając te piny szeregowe
Krok 7: Programowanie modułu
Kod został skompilowany pod Arduino 1.8.1 z dodatkiem płyty ESP8266 i PubSubClient 2.6.0 (która jest biblioteką MQTT)
Zmodyfikuj kod zgodnie z własnymi wymaganiami i prześlij kod do modułu ESP-01 i połącz się z maszyną. Uważaj na orientację kołków!
Konfiguracja
Opcja 1)
Tylko na kodzie podstawowym w zip. Kiedy moduł ESP uruchamia się po raz pierwszy, przechodzi w tryb AP i ustawia swój adres IP na 192.168.4.1. Następnie możesz połączyć się z modułem i zmienić IP oraz połączyć się z własnym punktem dostępowym. Będziesz także musiał ustawić adres IP dla swojej maszyny w tym zakresie, ponieważ w module nie ma DHCP.
Domyślny SSID AP to „ESPSwitch”, a hasło to „12345678”
Domyślnie pozostaje w trybie AP przez 2 minuty. Możesz zmienić to ustawienie w 'global.h' - nazywa się 'adminTimeout' i jest podane w milisekundach. Zalecam zmianę tego na coś niskiego, gdy masz poprawną konfigurację w EEPROM, ponieważ w przeciwnym razie spowoduje to niepotrzebne opóźnienia w rozruchu urządzenia.
Opcja 2)
Jest to domyślny tryb dla nowszego kodu, który obsługuje komunikację dwukierunkową, opcja 1 jest niedostępna. Możesz również zmienić domyślne ustawienia SSID/hasła w głównym pliku ino (poszukaj '// DEFAULT CONFIG'), aby załadować te ustawienia do EEPROM przy pierwszym uruchomieniu i zmień opóźnienie trybu administratora na coś niskiego w 'global.h'. Pozwala to uniknąć kłopotów z łączeniem się z tymczasowym AP.
Urządzenie automatycznie ustawi swój identyfikator MQTT (i ścieżkę subskrypcji) na 4 ostatnie cyfry numeru seryjnego modułu. Ścieżka domyślna to ha/mod//#, zmień według własnego uznania, ale przeczytaj komentarze w kodzie, aby upewnić się, że odpowiednia tablica ma prawidłową długość.
Robię to, ponieważ oznacza to, że nie muszę generować unikalnego identyfikatora dla każdego modułu w mojej sieci.
Identyfikator urządzenia jest widoczny, a serwer MQTT można ustawić za pośrednictwem strony serwera MQTT na wewnętrznym serwerze WWW
Krok 8: Spraw, aby to robiło…
Polecenia MQTT to
ha/mod/xxxx/ 0 lub 1 = Przełącz moc
Każdy inny ciąg zostanie potraktowany jako polecenie i wysłany przez port szeregowy. Status jest zgłaszany do /ha/kawa w HEX
Z OpenHAB
coffeemachine.items
Number Coffee_Machine_Power "Moc" { mqtt=">[control:ha/mod/8002/:command:*:default]" }Ciąg Coffee_Machine_Status { mqtt="<[control:ha/coffee:state:default]" }
Mapa strony
Group item="Ekspres do kawy" { Switch item=Coffee_Machine_Power label="Power" mappings=[1="Przełącz"] Switch item=Coffee_Machine_Cmd mappings=["FA:09"="Mały"] Switch item= Coffee_Machine_Cmd mappings=["FA:0A"="Duże"] Przełącz item=Coffee_Machine_Cmd mappings=["FA:04"="Płukanie"] Tekst item=Coffee_Status label="Stan [%s]" }
sterowanie głosowe.zasady
import org.openhab.model.script.actions.*import org.openhab.core.library.types.* import java.util.*
reguła „Zasady poleceń głosowych”
gdy element VoiceCommand otrzymał polecenie, to var String command = VoiceCommand.state.toString.toLowerCase logInfo("Voice. Rec", "VoiceCommand otrzymał "+command)
if (command.contains("włącz ekspres") || command.contains("wyłącz ekspres")) {
sendCommand(Coffee_Machine_Power, 1) } if (command.contains("zrób mi małą kawę")) { sendCommand(Coffee_Machine_Cmd, "FA:09") } if (polecenie.contains("zrób mi dużą kawę")) { sendCommand(Coffee_Machine_Cmd, "FA:0A") } if (command.contains("opłucz ekspres do kawy")) { sendCommand(Coffee_Machine_Cmd, "FA:04") } } end
Reguły (do interpretacji odpowiedzi HEX na „rzeczywiste” wartości):
reguła „Stan automatu do kawy” po otrzymaniu aktualizacji elementu Coffee_Machine_Status var String response = Coffee_Machine_Status.state.toString() if (response.indexOf("ic:") > -1) { var String hexString = response.substring(3, 5)
var int num = (Integer.parseInt(hexString, 16));
var String binaryString = String.format("%8s", Integer.toBinaryString(num)).replace(' ', '0')
var int trayBit = binaryString.substring(0, 1)
var int tankBit = binaryString.substring(2, 3) var int heatBit = binaryString.substring(7, 8) var int cleanerBit = binaryString.substring(6, 7)
if (trayBit == "0") {
postUpdate(Coffee_Status, "Brak tacy") } if (tankBit == "1") { postUpdate(Coffee_Status, "Napełnij zbiornik") } if (rinseBit == "1") { postUpdate(Coffee_Status, "Wciśnij Rotary") } if (trayBit == "1" && tankBit == "0" && płukanieBit == "0") { postUpdate(Coffee_Status, "Gotowy") }
}
if (response == "Off"){ postUpdate(Coffee_Status, "Off") } end
Krok 9: Udoskonalenia/Todo
Uprość początkową konfigurację łączenia z Wi-Fi - gotowe. Porzucił ideę „trybu administratora”, ponieważ był denerwujący. Teraz wystarczy wpisać SSID i hasło w kodzie. Zapisuje w pamięci EEPROM w przypadku aktualizacji/zmiany przez interfejs sieciowy.
Nowszy kod obsługuje również aktualizacje OTA, ale będziesz musiał zaktualizować EEPROM w module ESP-01, aby to zadziałało lub zakomentowało odpowiednie elementy OTA
Dodaj kod do przetwarzania odpowiedzi z maszyny i odczytaj status, taki jak brak tacy, opróżnij fusy i napełnij zbiornik - gotowe. Dodałem kod, aby odczytać status z powrotem i opublikować na ha/coffee. To tylko surowe odpowiedzi i wciąż pracuję nad ich interpretacją, ale jak dotąd brakuje mi Tray i pustego zbiornika. Po włączeniu odpytuje maszynę co 9 sekund i publikuje odpowiedź do MQTT
Odpowiedź jest w postaci HEX, ale poszczególne bity wskazują czujniki
Dodaj kod do stron internetowych, aby uzyskać bezpośrednią kontrolę za pomocą poleceń HTTP GET.
I nagroda w Konkursie Internetu Rzeczy 2017
Zalecana:
Wyświetlacz STONE + STM32 + Ekspres do kawy: 6 kroków
STONE Display +STM32 +Kawiarka: Jestem inżynierem oprogramowania MCU, ostatnio otrzymałem projekt ma być ekspresem do kawy, wymagania domowe z obsługą ekranu dotykowego, funkcja jest dobra, jest powyżej ekranu wybór może nie być zbyt dobry, na szczęście ten projekt mogę dec
Inteligentny ekspres do kawy - część ekosystemu SmartHome: 4 kroki
Inteligentny ekspres do kawy - część ekosystemu SmartHome: Zhakowany ekspres do kawy, uczyniłem go częścią ekosystemu SmartHome Posiadam stary dobry ekspres do kawy Delonghi (DCM) (nie jest to promocja i chcę, aby był „inteligentny”. Zhakowałem go, instalując ESP8266 moduł z interfejsem do jego mózgu/mikrokontrolera za pomocą
Ekspres do kawy WiFi: 9 kroków
Ekspres do kawy WiFi: Ekspres do kawy Wifi wykorzystuje Arduino, NODE MCU i części z recyklingu, aby bezpiecznie i zdalnie zaparzyć filiżankę kawy
JavaStation (samouzupełniający się, w pełni automatyczny ekspres do kawy IoT): 9 kroków (ze zdjęciami)
JavaStation (samouzupełniający się, w pełni automatyczny ekspres do kawy IoT): Celem tego projektu było stworzenie w pełni automatycznego ekspresu do kawy sterowanego głosem, który samoczynnie napełnia się wodą, a wszystko, co naprawdę musisz zrobić, to wymienić klientów i wypić kawę; )
Ekspres do kawy IOT (UFEE): 7 kroków (ze zdjęciami)
IOT Coffeemaker (UFEE): Jako dowód naszej wiedzy, musieliśmy stworzyć urządzenie IOT, którym można sterować za pomocą samodzielnie wykonanego interfejsu internetowego. Ponieważ uwielbiam kawę i na co dzień spożywam jej dużo, postanowiłem zrobić swój własny ekspres do kawy IOT. Ekspres do kawy UFEE: „ko