blog.vyoralek.cz

Xiaomi Mi Flora a WiFi přenos dat pomocí desky s ESP32

V dnešním článku se podíváme jak vyřešit problém, pokud máme rostliny příliš daleho od dosahu bluetooth a přesto bychom z nich chtěli sbírat informace.

🎙 Poslední aktualizace článku 14.10.2019. Pokud najdete nějaké rozdíly v aktuálním stavu, dejte vědět v komentářích, díky.

Už třetí v článek o Xiaomi Mi Flora a pomalu to vypadá, že se ze mě stává zahradník 🙂 Tohle je ale určitě poslední a navíc dnešní článek bude zase trochu více technický.

💡Po napsání tohoto článku jsem byl v komentáři upozorněn na možnost pomocí ESPHome a tak vznikl článek další, který obsahuje z mého pohledu lepší variantu integrace na HomeAssistent. Pokud tedy máte Hass.io doporučuji pokračovat rovnou na něj 🙂

Ukážeme si projekt Flora, který je implementací ESP32 bluetooth klienta pro Xiaomi Flora plant sensor, a který následně získané údaje umí přeposlat pomocí MQTT na server.

Jedná se tak o jakýsi most mezi centrem domácnosti – např. HomeAssistentem a Xiaomi Mi Flora Plant, kdy s samotnému přenosu dat do centra domácnosti je použito WiFi namísto přímého propojení přes Bluetooth – což sebou nese četné limitace zejména na vzdálenost.

1. Instalace Arduino IDE

Celý postup si dnes ukážeme v Arduino IDE. Pokud Arduino IDE ještě nemáte pak instalaci najdete na webu arduino.cc.

2. Přidání podpory ESP32

Ve standardní instalaci Arduino, možná jak už tak nějak s názvu vyplývá, je podpora pouze pro Arduino desky. My však potřebuje použít ESP32 a je potřeba tyto desky v nastavení přidat.

Otevřeme si Vlastnosti a téměř dole je položka Správce dalších desek URL. Do té přidáme hodnotu:

https://dl.espressif.com/dl/package_esp32_index.json

Pokud už v tomhle políčku nejakou hodnotu máme, např. pro přidání ESP8266, pak jednotlivé adresy od sebe oddělíme čárkou.

Klikneme na OK a přesuneme se do menu Nástroje, kde vyhledáme položku Vývojová deska a pak Manažér Desek…

Po načtení bychom mezi položkami měli být schopni najít balík esp32, který nainstalujeme.

3. Výběr správné desky

Desek s čipem ESP32 existuje poměrně obrovské množství. Já si vybral čínskou variantu DOIT ESP32 DEVKIT V1

Deska DOIT ESP32 DEVKIT V1

Pokud ESP32 desku ještě nemáte mohu doporučit a přidám rovnou link na AliExpress s cenou cca $4,6 (něco málo přes 100kč).

A nyní nastává první specialita pro tento projekt. Normálně bychom v seznamu našli desku DOIT ESP32 DEVKIT V1, která tam skutečně je:

… ale my musíme udělat vyjímku. Samotný projekt po kompilaci je příliš velký a tak je potřeba vybrat ESP32 Dev Module, kdy budeme mít přístup k speciální konfiguraci pro Partrition Scheme. Tu potřebujeme nastavit No OTA, jinak projekt do tohoto ESP32 nenahrajeme.

4. Otestování kompilace a nahrání

Jakmile máme vše výše nastaveno, hodí se raději otestovat, zda nám všechno funguje jak má.

V menu Soubor / Příklady si najdeme sekci Příklady pro ESP DEV Module / WiFi a WiFiScan.

ESP32 přípojíme pomocí USB do počítače a v menu Nástroje a nastavení desky změníme Port podle toho kam jsme ESP32 připojili. Nyní už můžeme zmáčknout tlačítko pro Nahrání programu a otevřeme si Sériový monitor – nezapomeňte změnit rychlost přenosu v konsoli na 115200 baudů..

Pokud vše proběhlo správně měli bychom vidět WiFi sítě v okolí:

5. Zjištění adresy Mi Flora Plant

Pokud ještě neznáme MAC adresu Mi Flora pak použijeme aplikaci bluetoothctl, ve které je potřeba po spuštění zadat příkaz scan on.

root@nanopct4:~ # bluetoothctl
Agent registered
[bluetooth]# scan on
Discovery started
[CHG] Controller 00:1A:7D:DA:71:13 Discovering: yes
[NEW] Device 65:B6:8C:24:20:F0 65-B6-8C-24-20-F0
[NEW] Device 46:76:07:91:83:96 46-76-07-91-83-96
[NEW] Device C4:7C:8D:6A:9C:FF Flower care

Jak můžete vidět v mém případě byla Mi Flora nalezena hned jako třetí položka. Adresu si poznačíme a skenování ukončíme pomocí scan off a příkazu quit.

[bluetooth]# scan off
Discovery stopped
[CHG] Controller 00:1A:7D:DA:71:13 Discovering: no
[CHG] Device C4:7C:8D:6A:9C:FF RSSI is nil
[CHG] Device 65:B6:8C:24:20:F0 TxPower is nil
[CHG] Device 65:B6:8C:24:20:F0 RSSI is nil
[CHG] Device 46:76:07:91:83:96 TxPower is nil
[CHG] Device 46:76:07:91:83:96 RSSI is nil
[bluetooth]# quit

6. Získání a konfigurace Flora projektu

Jelikož v oficiálním repozitáři je momentálně chyba, odkážu vás na můj Fork https://github.com/jvyoralek/flora, nicméně už jsem poslal Pull request na opravu, čili do budoucna bude snad správně i oficiální repositář.

GitHub repositář si tedy zklonujeme a nebo si stáhneme archív s kód na lokální disk a otevřeme Arduino projekt flora.ino.

Nejprve se však přepneme do souboru config.h.example, kde vyplníme několik údajů:

  • FLORA_DEVICE[] – zde uvedeme čárkou uddělený seznam MAC adres Flora zařízeních
  • WIFI_SSID – název WiFi sítě kam se má ESP32 připojit
  • WIFI_PASSWORD – heslo WiFi sítě
  • MQTT_HOST – IP adresa serveru, kde běží MQTT broker (v našem případě HomeAssistenta)
  • MQTT_POST – post MQTT brokeru
  • MQTT_USERNAME – pokud používáme přihlašování na MQTT brokera, pak zde uvedeme přihlašovací jméno
  • MQTT_PASSWORD – heslo na MQTT brokera

Zbytek parametru není až tak zajímavý a můžeme je nenechat.

7. Instalace chybějící Bluetooth knihovny

Tenhle bod souvisí s chybou, která je aktuálně v repozitáři a kterou řeší můj fork + instalace následující knihovny.

V menu klikneme postupně na Projekt / Přidat knihovnu / Spravovat knihovnu … a v seznamu najdeme položku ESP32 BLE Arduino, kterou nainstalujeme.

8. Kombilace a spuštění

Pokud jsme prošli úspěšně všemi předchozími body měli bychom být nyní schopni zkompilovat projekt a nahrát ho do ESP32, stejně jako jsme si ukázali na projektu WiFiScan.

Jakmile máme projekt uvnitř otevřemi si Sériový monitor, kde uvidíme základní logování:

  1. Připojení k WiFi síti
  2. Připojení k MQTT brokerovi
  3. Připojení k Xiaomi Flora zařízení
  4. Přečtení dat a zobrazení jejich hodnot
  5. Poslání dat přes MQTT v logu nějak chybí
  6. Odpojení od WiFi
  7. Odpojení od MQTT
  8. Uspání – standardně na 30 minut
Connecting to WiFi...
.
WiFi connected

Connecting to MQTT...
MQTT connected

Processing Flora device at c4:7c:8d:6a:9c:ff (try 1)
- Connection successful
- Found data service
- Force device in data mode
- Access characteristic from device
- Read value from characteristic
Hex: 2 1 0 57 B 0 0 29 2A 1 2 3C 0 FB 34 9B  
-- Temperature: 25.80
-- Moisture: 41
-- Light: 2903
-- Conductivity: 298
WiFi disonnected
MQTT disconnected
Going to sleep now.

Když se potom na MQTT brokeru podíváme na přijaté zprávy měli bychom nově vidět 4 zprávy pro každou Xiaomi Mi Flora, které pak můžeme dále zpracovat.

Pokud jste si ještě nečetli ostatní mé články o Xiaomi MI Flora můžete na ně kouknout:

Pokud ještě Xiaomi Mi Flora nemáte a zaujal vás tak doporučuji nakoupit na jednom z čínských eshopů:

Děkuji Ladislavovi za dotaz ohledně toho jak řešit květiny na větší vzdálenosti od HomeAssitenta. Ten mě přivedl k tomuto projektu a jistě zajimavému řešení, který tenhle problém eliminuje na nutnost mít WiFi.

6 comments

Tato stránka používá Akismet k omezení spamu. Podívejte se, jak vaše data z komentářů zpracováváme..

  • Zajímavý článek a super blog! =) Už mám objednán ESP32 a pak budu testovat. Teoreticky můžete článek rozšířit ještě o jednu možnost. Do HA se to dá údajně integrovat přes ESPHome (https://esphome.io/components/sensor/xiaomi_miflora.html), jestli jsem to dobře pochopil tak to není ani přes mqtt, protože ESPHome je rovnou podporáváno HA. Nastavení možná i jednodušší ale nevím jsem úplnej zelenáč – plno věcí v HA jsem dělal dle Vašeho blogu za což DÍKY 🙂

  • Jirko, luxusni blog, taky se do toho pustim a budu Te otravovat 🙂 zatim jsem si ve virtualni masine s ubuntu zkusil ten HA a napojil na fibaro (HCL) a chtel bych rozsirit o levnejsi zigbee ci ty esp32, takze si projdu vsechny tve navody :-), diky moc at se dari

    • Ahoj díky 🙂 Pokud se chystáš konkrétně na tuhle kombinaci tak už mám téměř dokončený další článek s ESPHome, čili bych asi počkal – snad to vydám ještě dnes. Přijde mi to elegantnější řešení. Nicméně v rámci učení možná není špatné si zkusit oboje.

Odebírejte blog emailem

Mějte ihned informaci o novém článku ze světa technologií.