jablko

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ě

  1. Postavte vše na hotovém ekosystému od jakéhokoli výrobce (Samsung SmartThings, LG ThinQ.)
  2. Postavte si chytrou domácnost pomocí hotového frameworku (HomeAssistant, HomeBridge, Apple HomeKit)
  3. 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í.

Zajímavé:
Jak dlouhá je záruka na jablečné produkty.

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.

ESP12F založené na 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

SwiftIO

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.

Zajímavé:
Jak vyčistit vosk z jablečných sluchátek.

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.

Základní tok

  1. 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.
  2. 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.

Zajímavé:
Jak odstranit hudební soubory Apple.

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.

Zajímavé:
Jak ověřit své telefonní číslo v apple id.

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.

Pinout ESP32

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.

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *

Back to top button