Obsah
- 1 Jak připojit arduino k apple house
- 2 úvod
- 3 Mikrokontroléry
- 4 ESP32
- 5 Ostatní mikrokontroléry
- 6 Rámce pro ESP32
- 7 Základní tok chytré domácnosti
- 8 Jak přenést heslo WiFi
- 9 Bluetooth
- 10 WiFi
- 11 Speciální protokoly
- 12 Jak se připojit k mikrokontroléru
- 13 Místní server
- 14 MQTT
- 15 HomeKit
- 16 záležitost
- 17 ESPHome
- 18 Mikrokontrolér a další desky
- 19 Závěr
Jak připojit arduino k apple house
Ve volném čase (a někdy i v práci) se věnuji studiu mikrokontrolérů a sestavování chytré domácnosti v bytě, a jelikož jsem povoláním iOS vývojář, dívám se na chytrou domácnost prizmatem iPhonu a HomeKitu. Poté, co jsem sestavil víceméně fungující chytrý dům a narazil na spoustu problémů, rozhodl jsem se o svých zkušenostech a zařízeních hovořit v sérii 2 článků. První článek bude malým úvodem do teorie mikrokontrolérů a protokolů a ve druhém se podělím o konkrétní aplikaci těchto protokolů a frameworků v mé chytré domácnosti.
úvod
Existují 3 hlavní způsoby, jak sestavit chytrý dům ve vašem bytě
- Postavte vše na hotovém ekosystému od jakéhokoli výrobce (Samsung SmartThings, LG ThinQ.)
- Postavte si chytrou domácnost pomocí hotového frameworku (HomeAssistant, HomeBridge, Apple HomeKit)
- Kombinujte první dva přístupy.
V první možnosti jsou chytrá zařízení již připravena s hotovou aplikací, nemusíte se starat o firmware mikrokontroléru, ale často nejsou zařízení z různých ekosystémů vzájemně kompatibilní. Druhý přístup je flexibilnější a můžete propojit zařízení od různých výrobců do jednoho ekosystému a stejně tak si z ne zrovna chytrého vyrobit vlastní chytré zařízení. Mezi nevýhody tohoto přístupu patří složitost prvního nastavení a také zoo protokolů, které je potřeba podporovat (ZigBee, ZWave, Thread, WiFi, Bluetooth. ). V tomto článku budeme hovořit o druhém přístupu a o tom, jak můžete přidat „chytré“ součásti do „hloupých“ zařízení.
Máme například LED pásek, který nemá modul Wi-Fi a jediným způsobem, jak jej vypnout, je fyzický vypínač. V takové situaci si můžete buď koupit inteligentní LED pásek a vyměnit starý, ale takové LED pásky stojí několik tisíc rublů. Nebo si můžete koupit mikrokontrolér s WiFi za pouhých 200 rublů a LED pásek bude ovládán z vašeho telefonu. Zní to jednoduše, ale nabízí se otázka, jaký mikrokontrolér zvolit, jak pro něj napsat firmware a jak mikrokontrolér připojit k telefonu.
Mikrokontroléry
Většina vývojářů hardwaru začíná svou cestu s Arduinem. Je skvělá na prototypování, takže se obejdete bez pájení a má svůj framework, takže nemusíte psát v čistém C. Deska je ale bohužel dost velká, nemá vestavěné WiFi a Bluetooth a původní deska stojí několik tisíc rublů. Pro Bluetooth a WiFi si musíte koupit samostatné moduly, například ESP8266.
ESP32
V jednu chvíli si někdo uvědomil, že WiFi modul bude výkonnější než samotné Arduino a může se snadno chovat jako nezávislý mikrokontrolér s vlastním firmwarem a bude stát několikanásobně méně, načež se modul začal používat ne zcela pro jeho zamýšlený účel. Espressif (společnost vyrábějící ESP8266) se ale včas umoudřila a když si uvědomila, že jeho modul není využíván podle plánu, vydala vhodnější mikrokontrolér jako náhradu za Arduino a ESP8266 – ESP32, který lze koupit na Aliexpressu za 200 rublů a používané ve vašich domácích projektech inteligentních domů.
Ostatní mikrokontroléry
Navzdory levnosti a jednoduchosti ESP32 existují další zajímavé možnosti. Například mikrokontrolér založený na Swift. Jako vývojář pro iOS jsem nemohl projít a neobjednat si tuto desku 🙂
Pro výše popsané případy můžete použít známé Raspberry Pi. Je však příliš drahé provádět na něm experimenty. Má také GPIO, které lze ovládat přes python, ale má slabý transformátor napětí a pokud použijete příliš velké napětí, jednoduše se spálí, což se stalo u mého prvního Raspberry Pi 4, takže je nejlepší použít pouze jako domácí server, ale o tom v dalším článku.
Rámce pro ESP32
Existuje také framework Arduino pro ESP32, to znamená, že pro něj můžete napsat stejný kód jako pro Arduino v Arduino IDE, s určitými úpravami funkcí. Příklad kódu:
#define LED 2 void setup() < // Nastavení režimu pinu pinMode(LED,OUTPUT); >void loop()
Pokud chcete více hardcore, Espressif má svůj vlastní framework v C – ESP-IDF založený na FreeRTOS. Příklad kódu:
static void blink_led(void) < /* Set the GPIO level according to the state (LOW or HIGH)*/ gpio_set_level(BLINK_GPIO, s_led_state); >static void configure_led(void) < ESP_LOGI(TAG, "Example configured to blink GPIO LED!"); gpio_reset_pin(BLINK_GPIO); /* Set the GPIO as a push/pull output */ gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT); >#endif void app_main(void) < /* Configure the peripheral according to the LED type */ configure_led(); while (1) < ESP_LOGI(TAG, "Turning the LED %s!", s_led_state == true ? "ON" : "OFF"); blink_led(); /* Toggle the LED state */ s_led_state = !s_led_state; vTaskDelay(CONFIG_BLINK_PERIOD / portTICK_PERIOD_MS); >>
Základní tok chytré domácnosti
Rozhodli jsme se pro mikrokontrolér, teď musíme vymyslet, jak pro něj napsat firmware a připojit ho k telefonu.
- Nejprve přeneseme heslo z naší domácí WiFi do mikrokontroléru (říká se tomu WiFi zajišťování), abychom jej připojili k naší lokální síti, nebo heslo jednoduše zašijeme do kódu, ale pak při změně hesla budeme mít pro přeflashování mikrokontroléru.
- Nasadíme lokální server na mikrokontrolér a přistupujeme k němu přes http, jako běžný server, nebo se k němu připojujeme přes MQTT.
Jak přenést heslo WiFi
Existují 3 hlavní způsoby:
- Bluetooth
- WiFi
- Speciální protokoly
Bluetooth
O podrobnostech Bluetooth můžeme napsat samostatný článek, ale tím se nyní nebudeme zabývat. Jen řeknu, že je potřeba se připojit přes BLE ke světovému ovladači na telefonu a poslat heslo v aplikaci přes CoreBluetooth. Více podrobností lze nalézt v příkladech z Espressif. Mají také open source aplikace pro iOS a Android pro poskytování wifi.
WiFi
WiFi může fungovat ve 2 režimech (wifi direct a jeho analogy se neberou v úvahu): AP a STA. AP – to je, když ESP32 uvolní přístupový bod, jako by to byl wifi router, ke kterému se můžete připojit. STA – to je, když se samotný ESP32 připojí k routeru.
Podle toho je potřeba přepnout mikrokontrolér do režimu AP, připojit se k němu z telefonu, odeslat heslo WiFi a poté přepnout do režimu STA a připojit se k domácí WiFi. Espressif má k tomu také příklady a aplikace.
Speciální protokoly
Kromě standardního Bluetooth a WiFi existují speciální protokoly pro přenos hesel, jako např SmartConfig и EasyConnect.
Jak se připojit k mikrokontroléru
Místní server
Nejjednodušší způsob je nasadit server na mikrokontrolér a přistupovat k němu přes HTTP. Například kód, který používám v LED pásku.
MQTT
Pro chytrou domácnost existuje speciální protokol, je to něco jako zásuvky, ale neměl jsem moc času s tím přímo pracovat. Vím pouze, že se používá v Yandex.Station.
HomeKit
Pokud jste jako já „prodali svou duši“ Applu a sedíte v jeho ekosystému, je snazší vytvořit své chytré zařízení založené na HomeKitu. HomeKit je stejný komunikační protokol mezi zařízeními. Apple nedávno otevřel svou knihovnu pro fandy. A Espressif to přizpůsobil svým deskám. Pokud vyvíjíte podnikové řešení (koupíte si předplatné MFi), nemusíte ani ručně vytvářet heslo Wi-Fi.
Vše spočívá v tom, že vezmete hotový příklad z Espressif pro HomeKit a přizpůsobíte jej svým potřebám, tedy přidáte funkce, které například fyzicky zapnou/vypnou ventilátor a nahrajete jej do ESP32. Zpracování stavů z HomeKit pro fanouška z příkladů Espressif:
static int fan_write(hap_write_data_t write_data[], int count, void *serv_priv, void *write_priv) < if (hap_req_get_ctrl_id(write_priv)) < ESP_LOGI(TAG, "Received write from %s", hap_req_get_ctrl_id(write_priv)); >ESP_LOGI(TAG, "Fan Write called with %d chars", count); int i, ret = HAP_SUCCESS; hap_write_data_t *write; for (i = 0; i < count; i++) < write = &write_data[i]; if (!strcmp(hap_char_get_type_uuid(write->hc), HAP_CHAR_UUID_ON)) < ESP_LOGI(TAG, "Received Write. Fan %s", write->val.b ? "On" : "Off"); /* TODO: Control Actual Hardware */ hap_char_update_val(write->hc, &(write->val)); *(write->status) = HAP_STATUS_SUCCESS; > else if (!strcmp(hap_char_get_type_uuid(write->hc), HAP_CHAR_UUID_ROTATION_DIRECTION)) < if (write->val.i > 1) < *(write->status) = HAP_STATUS_VAL_INVALID; ret = HAP_FAIL; > else < ESP_LOGI(TAG, "Received Write. Fan %s", write->val.i ? "AntiClockwise" : "Clockwise"); hap_char_update_val(write->hc, &(write->val)); *(write->status) = HAP_STATUS_SUCCESS; > > else < *(write->status) = HAP_STATUS_RES_ABSENT; > > return ret; >
záležitost
Bývalá aliance Zigbee se přejmenovala a vyvinula nový standard založený na WiFi, Bluetooth a Thread (zábavné, že bez Zigbee). Zahrnuje všechny hlavní hráče: Google, Amazon, Apple. A Apple již přidal podporu Matter do HomeKitu – zařízení založená na Matter budou nyní přidávána stejným způsobem jako nativně podporující HomeKit. A Espressif již vytvořil několik příkladů s podporou Matter pro některé verze ESP32.
ESPHome
Abyste si firmware nepsali sami, existují i hotová řešení jako ESPHome.
Mikrokontrolér a další desky
Všechny tyto manipulace s připojením k ESP32 byly nutné k tomu, abyste mohli fyzicky ovládat moduly, ke kterým je ESP32 připojeno. K tomu má sadu GPIO.
Na GPIO můžeme přivést napětí a tím zapnout nebo vypnout elektřinu do připojených desek. Pomocí pulzně šířkové modulace můžete také simulovat ovládání jasu, například pokud je k mikrokontroléru připojena LED. Některé piny (viz obrázek) podporují i složitější protokoly jako UART, I2C a SPI. UART se používá například pro GPS moduly a I2C a SPI pro obrazovky. Tím se v rámci tohoto článku nebudeme zabývat. Mohu doporučit dobrý kurz na ESP32.
Závěr
Toto byl krátký teoretický úvod, který jsem si musel nastudovat, abych mohl sestavit svůj chytrý dům. Ale o tom až v dalším článku.