Zależało mi na prostej rzeczy: jednym, fizycznym przycisku, który po prostu robi zdjęcie. Żadnych dedykowanych apek, zakładania kont czy łączenia z chmurą. Chciałem małego gadżetu, który wrzucam do torby, w razie potrzeby łączę z iPhonem i wciskam spust migawki.
Tak narodził się ClickNova Shutter – autorskie oprogramowanie dla LilyGO TTGO T-Display (niewielkiej płytki ESP32 z dwoma przyciskami i ekranem 1,14 cala). Samo urządzenie jest celowo minimalistyczne, ale droga do jego pełnej niezawodności wcale nie była taka prosta.
Prosty i skuteczny trik
Natywna aplikacja aparatu w iOS ma wbudowaną świetną funkcję: traktuje przycisk zwiększania głośności jak spust migawki. Ponieważ klawiatury i piloty Bluetooth wysyłają dokładnie tę samą komendę, ClickNova po prostu udaje przed systemem urządzenie wejściowe Bluetooth LE.
To bardzo elegancki trik, z którego wynika jednak twarda zasada: aparat musi działać na pierwszym planie.
- Pilot nie uruchomi aplikacji.
- Nie zmieni trybu na wideo.
- Nie sprawdzi, czy plik faktycznie się zapisał.
Uwielbiam narzędzia, które szczerze pokazują swoje ograniczenia. ClickNova nie udaje, że steruje całym telefonem – ma jedno konkretne zadanie.
Złota zasada: jedno kliknięcie to jedno zdjęcie
Samo wysłanie komendy to pestka. Schody zaczynają się, gdy chcesz to zrobić tylko raz i wyłącznie wtedy, gdy połączenie jest naprawdę stabilne. W prawdziwym świecie bywa różnie:
- Fizyczny przycisk potrafi „drgać” na stykach.
- Bluetooth czasem udaje połączenie, zanim faktycznie zaszyfruje dane.
- Telefon może na ułamek sekundy zgubić zasięg.
Każda z tych sytuacji to ryzyko straconego kadru albo serii zdjęć wnętrza kieszeni. Dlatego u mnie reguła jest bezwzględna: jedno pełne naciśnięcie to jedna akcja. Kliknąłeś bez połączenia? Trudno, akcja przepada, nic nie ustawia się w kolejce na później. Większość kodu istnieje właśnie po to, by dotrzymać tej prostej obietnicy.
Detale, które robią różnicę
Ekranik urządzenia jest malutki (240x135 pikseli), ale to wystarcza, by odpowiedzieć na najważniejsze pytania: Czy sprzęt się paruje? Jaki jest stan baterii? Czy komenda przeszła?
Drugi przycisk służy do zadań specjalnych i obsługuje m.in.:
- Szybkie odświeżenie: Krótkie kliknięcie rozjaśnia ekran i podaje stan baterii.
- Interwałometr: Dłuższe przytrzymanie odpala tryb do timelapse’ów (ekran robi się wtedy czerwony i przygasa do 10%, żeby nie oślepiać w nocy).
- Twardy reset: 10 sekund przytrzymania wymusza celowo niewygodny reset parowania.
Sprzęt ma też swoje mechanizmy obronne: usypia się po 11 minutach bezczynności, a w razie skrajnie niskiego poziomu energii wyłącza się, by chronić ogniwo. To właśnie te „ciche” detale odróżniają luźny prototyp na biurku od sprzętu, któremu ufam w terenie.
Vibecoding i zderzenie z rzeczywistością
ClickNova powstawała w dużej mierze podczas moich sesji z agentami AI. Tłumaczyłem, jak sprzęt ma się zachowywać, zamieniałem przypadki brzegowe na konkretne wytyczne i na bieżąco weryfikowałem to, co wygenerował model. Sztuczna inteligencja napisała sporo kodu, a moja rola sprowadziła się do dyrygowania i testowania.
Ale to wcale nie zdjęło ze mnie odpowiedzialności. Logikę oddzieliłem od sprzętu, co pozwoliło mi napisać ponad 120 automatycznych testów. Najważniejsze jednak działo się potem: brałem płytkę, baterię, iPhone'a i... liczyłem. Sprawdzałem fizycznie w galerii, czy dziesięć kliknięć daje równe dziesięć zdjęć. Agent AI potrafi zaproponować świetną architekturę oprogramowania, ale nie naciśnie za Ciebie przycisku, żeby sprawdzić, jak to „czuje się” w dłoni.
Ostatecznie ten mały projekt nauczył mnie, że wąski zakres funkcji bardzo ułatwia podejmowanie decyzji, a ClickNova robi dokładnie to, o czym marzyłem na początku. Jedno naciśnięcie. Jeden kadr.