Programujeme chytré hodinky v Arduinu. Oživíme displej, akcelerometr a časový čip

T-Watch 2020 v1
T-Watch 2020 v1 pohání mezi kutily oblíhbený dvoujdárový mikrokontroler s Wi-Fi ESP32, které můžete snadno programovat v prostředí Arduino
O práci se stará Wi-Fi čip ESP32 a nechybí základní výbavička čidel
Komplexnější prostředí napsané v Arduinu s vykrelsováním bitmap
22
Fotogalerie
  • Jak složitý je návrh vlastního OS pro chytré hodinky?
  • Dnes si to vyzkoušíme v praxi
  • T-Watch 2020 naprogramujeme v běžném Arduinu

Na chytrých hodinkách si už mnozí výrobci vylámali zuby, u drtivé většiny modelů totiž musíte vzhledem k současnému stavu technologie zkousnout nějaký ten kompromis.

Mohou mít skvělý OLED hýřící živými barvami, špičkový výkon a dokonalé funkce pokročilého operačního systému, nicméně to vše za cenu relativně nízké výdrže baterie v řádu dnů.

Anebo to bude naopak skutečný outdoorový mistr, který s vámi na jedno nabití podnikne expedici na Mendelovu polární stanici, ovšem za cenu vizuálně horšího paměťového LCD a jednoduššího UX jako třeba v případě hodinek řady Garmin Fenix.

Nelze rozsoudit, který přístup je lepší, a co je zdaleka nejhorší, co Čech, to často univerzální expert prakticky na cokoliv, takže by se asi fanoušci obou táborů naživo utloukli silikonovými řemínky. Naštěstí existuje jedno elegantní řešení.

Skutečný srdcař si s trochou nadsázky nepořídí hotové hodinky od Applu, Samsungu nebo třeba Garminu, ale hrubý polotovar, který si poté sám naprogramuje!

Programovatelné hodinky a náramek

Počkat, počkat, to je opravdu možné? Ano, jistě, pokud se tedy smíříte s tím, že tím, polotovarem nebude špičkový hardware od některého z výše jmenovaných producentů, ale laciný čínský krám zhruba za tisícovku a s nepříjemně hladovým TFT/IPS LCD displejem.

Zdrojové kódy dnešního článku najdete na GitHubu

Přesně to před lety udělalo známé asijské studio LilyGO a dalo kutilům řady T-Watch a T-Wristband. Jak už názvy napovídají, jedná se o několik modelů chytrých hodinek a náramků, které v sobě mají vše potřebné k běhu včetně lithiové baterie. Kouzlo ale spočívá v tom, že když takové hodinky skrze USB připojíte k počítači, můžete si pro ně naprogramovat vlastní firmware v prostředí Arduino.

Chovají se úplně stejně jako každá jiná prototypovací destička, takže když do Arduino IDE doinstalujete podporu pro mikrokontrolery ESP32, v seznamu cílových desek najdete i položku TTGO T-Watch. Stačí jen hodinky připojit k PC, zvolit adekvátní sériový port a klidně napsat ten nejjednodušší program, který bude do počítače skrze USB vypisovat třeba jen zprávičku: „Ahoj, to jsme my, tvoje chytré hodinky!“

T-Watch 2020

Hodinky T-Watch dnes existují v hromadě verzí, přičemž ta nejnovější a z hlediska konstrukce i nejpraktičtější je T-Watch 2020barevným 1,54“ LCD displejem s rozlišením 240×240 pixelů a samozřejmě i dotykovou vrstvou.

97fb92a6-30a7-40ba-9b26-6f92a8ece9bc
Hodinky T-Watch 2020 naprogramujete v prostředí Arduino

Ano, samozřejmě že by byl mnohem lepší e-ink nebo paměťový LCD od Sharpu, se kterými by T-Watch strčily velkou konkurenci hravě do kapsy, ale jako prototyp pro hrátky, jak se vlastně vyvíjejí chytré hodinky, to je docela zábavná platforma.

T-Watch 2020 pohání je k dispozici ve třech revizích V1, V2 a V3. Základní výbava je stejná, modifikace se ale navzájem liší třeba v tom, že V2 disponuje GNSS přijímačem Quectel L76K a V3 zase digitálním MEMS mikrofonem Knowles SPM1423HM4H-B.

Tím pádem se liší i cena v oficiálním obchodu LilyGO na AliExpressu. Zatímco V1 seženete zhruba za 900 korun, V2 je k mání za 1 100 korun a V3 dle aktuálního kurzu za 1 000 kaček. K ceně je třeba připočíst ještě poštovné okolo 150 korun. Ceny jsou zaokrouhlené, týden od týdne se totiž mění.

Verze V1

Ke mně nakonec doputovala nejlevnější a základní verze T-Watch 2020 V1, kterou jsem odkoupil od jednoho z brněnských makerů. Není to ale žádné ořezávátko a rozdíly jsou v praxi opravdu kosmetické. Chybí jen GNSS čip pro satelitní lokalizaci a mikrofon.

7b7f76bc-f745-410f-8f03-53ca33b6111d
O práci se stará Wi-Fi čip ESP32 a nechybí základní výbavička čidel

Vedle již zmíněného dvoujádrového řídícího čipu ESP32, který lze snadno programovat v prostředí Arduino, a dotykového displeje nechybí:

  • 16 MB flashové paměti
  • 8 MB externí RAM
  • 380mAh lithiová baterie LQ-S1

​A​ konečně hromada pomocných čidel a integrovaných obvodů:

  • Nabíjecí čip AXP202
  • Vibrační motorek
  • Obvod zvukového dekodéru PCM a zesilovače MAX98357A
  • Čip reálného času NXP PCF8563
  • Trojosý akcelerometr Bosch BMA423 s vestavěným krokoměrem

Hodinky mají také jedno programovatelné tlačítko, které při delším stisku funguje jako hlavní vypínač.

TTGO TWatch Library

Uf, to je celý zástup čipů, nový majitel hodinek tedy stráví přinejmenším týden na GitHubu hledáním všech možných knihoven pro jejich jednoduché zprovoznění v Arduinu. Ano, to je jistě možné, výrobce na to ale myslel a vytvořil jednu obří knihovnu, která oživí všechny vypsané periferie připojené k hlavnímu řídícímu čipu.

Jmenuje se TTGO TWatch Library, najdete ji na GitHubu a po stažení jako balíček ZIP ji snadno nahrajete do vývojového prostředí Arduina skrze hlavní nabídku a volbu Projekt – Přidat knihovnu – Přidat .ZIP knihovnu.

Součástí knihovny je několik desítek příkladů práce s hodinkami, které zároveň najdete na GitHubu ve složce examples. Mnohé z nich se týkají jen specifických verzí, s modelem T-Watch 2020 ale rozjedete drtivou většinu ukázek v podadresáři BasicUnit. Pojďme si to vyzkoušet na několika primitivních příkladech.

Příklad #1: Displej se zdravící

Tváří každých hodinek je samozřejmě displej, a tak na něj zkusme něco nakreslit. TTGO TWatch Library k tomu používá další vnořenou knihovnu TFT_eSPI. Tu už tedy nemusíte instalovat, na odkazu výše ale najdete zdrojové kódy a dokumentaci.

Nejprve pomocí knihovny nastavíte oranžové pozadí displeje, pak zhruba doprostřed nakreslíme zelený obdélník s černým okrajem a dovnitř pak na dva řádky červeně a modře zdravici „MOJE HODINKY.“

#define LILYGO_WATCH_2020_V1
#include <LilyGoWatch.h>

TTGOClass *hodinky;

void setup() {
  Serial.begin(115200);
  Serial.println("Startuji hodinky...");
  hodinky = TTGOClass::getWatch();
  hodinky->begin();
  hodinky->openBL();
  delay(100);
  hodinky->bl->adjust(255);

  hodinky->tft->fillScreen(TFT_ORANGE);
  hodinky->tft->drawRect(19, 59, 202, 102 , TFT_BLACK);
  hodinky->tft->fillRect(20, 60, 200, 100 , TFT_GREEN);
  hodinky->tft->setTextFont(4);
  hodinky->tft->setTextColor(TFT_RED);
  hodinky->tft->drawString("MOJE", 85, 80);
  hodinky->tft->setTextColor(TFT_BLUE);
  hodinky->tft->drawString("HODINKY", 65, 120);
}

void loop() {
  ;
}

Všimněte si, že kód obsahuje odkaz jen na jeden hlavičkový soubor centrální knihovny a nad ním je makro, pomocí kterého dáváme knihovně vědět, s jakou verzí hodinek vlastně pracujeme. Poté vytvoříme proměnnou odkazu na třídu TTGOClass a pomocí ní pak v hlavní funkci setup, která se zpracuje po spuštění čipu ESP32, konečně vše provedeme.

Klíčová je statická metoda getWatch, kterou získáme ukazatel na novou instanci třídy TTGOClass. Poté pomocí metody begin nastartujeme periferie. Metoda openBL aktivuje podsvícení a my pomocí metody adjust nad vnořeným objektem bl nastavíme 8bitovou intenzitu jasu pomocí PWM na maximum.

cc240df8-6271-4f88-ba19-0f0b17f40695
Hurá, oživili jsme displej hodinek

Dalším vnořeným objektem je tft, který představuje knihovnu TFT_eSPI, takže skrze něj můžeme volat všechny její metody. My nejprve příkazem fillScreen překreslíme displej oranžovou barvou, pak na souřadnice 19;59 nakreslíme pomocí drawRect černý obdélník s rozměry 202×102 pixelů a jeho vnitřek vyplníme pomocí fillRect dalším obdélníkem, tentokrát zeleným.

Nakonec pomocí několika metod pro práci s textem nastavíme jeden z předinstalovaných rastrových fontů, zvolíme barvu textu a opět na konkrétní souřadnice vypíšeme obě slova. To dělají ty dvě metody setTextColor a drawString. Tím náš program končí, v následující smyčce loop totiž už nic nemáme.

A teď už to jen přeložíme a flashneme

Kód je hotový, takže v Arduinu vybereme v nabídce Nástroje – Vývojová deska zařízení TTGO T-Watch, poté ve stejné nabídce správný sériový port, na kterém jsou hodinky připojené k PC a hlavně korektní revizi (Board Revision). V našem případě tedy T-Watch-2020-V1.

080c1c36-e0dd-471e-977f-7f1301a1a13f
Volba správného zařízení k nahrání firmwaru v prostředí Arduino

Po spuštění kompilace si ještě chvíli počkáte (zejména na Windows), protože centrální knihovna je obrovská, nicméně nejpozději během několika málo minut se na hodinkách konečně rozsvítí naše uvítací obrazovka.

Příklad #2: Obvod reálného času

Uvítací obrazovka je sice fajn, ale sama o sobě tak trochu k ničemu. Hodinky jsou ale vyzbrojené čipem reálného času (RTC) PCF8563, a tak na nich v druhém příkladu zobrazíme, kolik je právě hodin. Obvod RTC je naštěstí připojený přímo k baterii, takže bude počítat sekundy i tehdy, když hodinky vypnete.

Pokračování článku patří k prémiovému obsahu pro předplatitele

Chci Premium a Živě.cz bez reklam Od 41 Kč měsíčně

Určitě si přečtěte

Články odjinud