Cześć wszystkim!
Pamiętacie ten mój post? viewtopic.php?t=18243
Każdy kto doczytał do końca, to zobaczył informację:
No to przyszedł czas, aby się pochwalić i jednocześnie udostępnić projekt kompletnego czujnika CO Zigbee, który zbudowałem i dopracowywałem przez ostatnie dni. Urządzenie działa całkowicie lokalnie, obsługuje IAS Zone, ma zarówno alarm sprzętowy, jak i programowy, a do tego w pełni integruje się z Home Assistant / Zigbee2MQTT / Z2S (Suplą).Za niedługo pokażę, jak zrobić taki czujnik z wykorzystaniem bardziej wiarygodnego sensora elektrochemicznego w wersji niskobudżetowej (koszt całkowity urządzenia <40 zł)
Poniżej opisuję, co to robi, jak jest zrobione i jak możecie to odtworzyć.
Funkcje urządzenia
• Dokładny odczyt CO z modułu elektrochemicznego SC16 CO (ramki 9B -> ppm).
• Aktywne odpytywanie czujnika (polling 0xFF 01 86…) - stałe, stabilne odczyty.
• Autokalibracja offsetu (45s po wygrzaniu sensora).
• Programowy alarm CO (>50 ppm) + histereza + buzzer.
• Sprzętowy alarm SC16 CO (pin 5 HIGH) - natychmiastowa reakcja.
• IAS Zone:
- stan „Open = ALARM”, „Closed = OK”
- automatyczny Enroll i Restore
- wygrzewanie -> pomarańczowy
- autokalibracja -> niebieski
- normalna praca -> gradient zielony-czerwony zależnie od ppm
- alarm (HW lub programowy) -> migający czerwony
- ≥1.5s -> ponowna autokalibracja
- ≥3s -> Zigbee Factory Reset
Platforma: ESP32 C6 z obsługą Zigbee (Zigbee End Device).
Sensor CO: SC16 CO (ramki 9B, jednostka 0x04, CRC two’s complement).
Dodatkowe elementy:
• wbudowana/wyprowadzona dioda RGB,
• buzzer aktywny 3.3V,
• przycisk do GND (pull up),
• opcjonalny rezystor pull down dla pinu alarmowego SC16.
Układ działa na 3.3V, SC16 CO na 5V - logika UART jest na 3.3V.
Jak działa odczyt CO?
SC16 CO wysyła ramki:
FF 18 04 XX HI LO ALH ALL CS
• HI i LO -> 16 bitowy wynik w ppm
• CS -> suma kontrolna: two’s complement sumy bajtów 1..7
• Zapytanie aktywne: FF 01 86 00 00 00 00 00 79
Urządzenie używa pollingu co 250ms, więc nie trzeba polegać na automatycznych transmisjach modułu (które zanikają po użyciu trybu aktywnego).
Integracja Zigbee (HA / Z2M / Z2S)
Tworzę dwa endpointy:
1) Endpoint 10 - CarbonMonoxideSensor
Wysyłane wartości:
ppm_use
czyli Z2M widzi to jako fraction - działa niezawodnie i nie robi konwersji jednostek.
2) Endpoint 11 - IAS Zone:
• Open = alarm,
• Closed = normal.
Automatyczny Enroll działa tak:
• próba restore,
• jeśli brak -> wysyłanie request co 10s,
• powtarzanie do skutku.
Alarmy
Sprzętowy (SC16 pin 5)
Wysoki poziom = alarm od sensora (reakcja natychmiastowa).
Programowy
>= 50 ppm
wyłączenie dopiero po spadku do <= 40 ppm.
Każdy alarm:
• włącza buzzer,
• powoduje czerwone miganie LED,
• ustawia IAS Zone = Open,
• raportuje do Zigbee.
Jak to wykonać - krok po kroku
1. ESP32 C6
2. Podłącz sensor SC16 CO:
- TX modułu -> GPIO5
- RX modułu -> GPIO4
- ALARM -> GPIO1
- 5V + GND
4. Po starcie:
- 1 min wygrzewania (pomarańczowy LED),
- potem 30-90s automatycznej kalibracji (LED niebieski).
6. Gotowe - urządzenie raportuje ppm i alarmy.
7. Jeśli czujnik binarny działa odwrotnie -> odwróć logikę w cloud
Podsumowanie
Urządzenie działa niezawodnie i dobrze integruje się z systemami Zigbee.
Daje:
• szybkie, stabilne odczyty CO,
• alarmy na dwóch poziomach (HW + soft),
• kolorowe LED-y,
• buzzer,
• pełną integrację IAS Zone,
• autokalibrację.
Inne
- Pamiętaj, że to urządzenie dalej nie posiada, żadnych certyfikatów i wszystkie ostrzeżenia zawarte tutaj viewtopic.php?t=18243 dalej obowiązują.
- Testy pokazały, że urządzenie wskazuje prawie dokładnie tak, jak rozwiązania komercyjne (różnice pojedynczych ppm do poziomu stężenia 100 ppm CO.
- Powyższe jest zasługą użytego czujnika elektrochemicznego - tego samego typu co w rozwiązaniach "sklepowych".
- Obiecałem, że gotowe urządzenie można złożyć za mniej niż 40 zł. I tak jest. Przykładowy link do czujnika https://pl.aliexpress.com/item/1005008405473051.html? . Jeśli widzicie go za więcej jak 20-22zł (z wysyłką) to poczekajcie. Po 1.03. powinien stanieć do ok. 16-17 zł, albo poszukajcie w ofertach z monetami (jeśli macie) lub w ofertach łączonych. Mnie kosztował 18,53 zł, ale widziałem też taniej (z monetami).
- Buzzer jest opcjonalny (ale myślę, że warto podłączyć) - koszt 1-2 zł.
- C6 - dowolne - kupcie najtańsze, jakie znajdziecie, albo wykorzystajcie ze starej bramki (np. wersję 4MB) - testowane na modułach N4, N8, N16, SuperMini oraz Xiao 4MB. Generalnie działa na każdym C6 (powinno też na H2).
- Na Xiao jest domyślnie włączona antena zewnętrzna.
- W pełni wykorzystuje diodę RGB w C6 (wygrzewanie, autokalibracja, pomiary, przekroczenie progu alarmowego). W modułach wyposażonych tylko w LED dioda nie jest wykorzystywana do sygnalizacji stanu pracy (pomiarów).
- Obudowa - dowolna. Pamiętajcie tyko, że czujnik powinien mieć zapewniony swobodny przepływ powietrza. Można sobie wydrukować coś z tego, co podałem ostatnio.
- Soft wgrywamy standardowo czymkolwiek, co potrafi wgrać do ESP32-C6. Jeśli jest konieczność podania adresu, to wgrywamy od adresu 0x0.
- Uwaga! Przywrócenie ustawień fabrycznych najlepiej wykonać wgrywając na nowo soft do C6. Można też przytrzymać dłużej (>5s) BOOT. Spowoduje to tzw. Zigbee factory reset.
- Podczas pracy nad softem okazało się, że producent czujnika zmienił w nim firmware - aktualną wersję dokumentacji technicznej możecie pobrać stąd: https://ae01.alicdn.com/kf/S04b132aaaf8 ... b99cP.pdf?
- Problem w tym, że inaczej (w różnych wersjach firmware) konstruowana jest ramka wysyłana przez czujnik.
- Jednak bez obawy. W sofcie zaszyłem automatyczną detekcję wersji ramki i nie ważne z jakim firmware kupicie czujnik - na tym sofcie będzie działać.
- Jak zwykle podziękowania dla @vajera - za wsparcie i testy oprogramowania.
- Soft oparty jest na autorskich klasach - w czym pomogły doświadczenia z wersji wyposażonej w MQ-7.
Soft w wersji 0.7a z 27.02.2029r. - działa z bramką Z2S od wersji 1.4.50-25/02/26
W Supli widoczny tak samo, jak poprzedni czujnik: ZIBI::ESP32C6_CO_Sensor

