NodeMCU + LIFX cover
St, 16.3.2016 - 14:57
Žiarovky LIFX sú super, ale ak s nimi chceš spraviť len niečo jednoduché ako vypnúť/zapnúť, či znížiť jas, môže to byť trochu nemotorné, hľadať mobil, spustiť aplikáciu, vybrať svetlo... Tak som sa rozhodol, že si vytvorím pohodlnejší spôsob ako na to. A narazil som na NodeMCU, malý modul pre vývojárov, podobný Arduinu, len menší a s integrovanou Wi-Fi a cenou okolo $5. A tu ukážem ako a čo som vytvoril. ### Cieľ Chcel som ovládanie zvolenej LIFX bez mobilu, len mávnutím ruky. Intenzita sa mení podľa vzdialenosti od senzoru. Takto nejak to vyzerá. ## Ako som to spavil Nákres cesty od senzoru k žiarovke ### Nákupný zoznam - jedna [LIFX](http://www.lifx.com/products/color-1000) žiarovka - $60 - [Raspberry Pi 2/3](https://www.pi-supply.com/product/raspberry-pi-3-model-b-newest-version/?v=928568b84963) ~$35 - zdroj (5V microUSB) - [NodeMCU v3](http://www.aliexpress.com/af/nodemcu-v3.html?ltype=wholesale&d=y&origin=n&isViewCP=y&catId=0&initiative_id=SB_20160310035331&SearchText=nodemcu+v3) ~$5 alebo [D1 mini](http://www.aliexpress.com/store/product/D1-mini-Mini-NodeMcu-4M-bytes-Lua-WIFI-Internet-of-Things-development-board-based-ESP8266/1331105_32529101036.htm) ~$4 - zdroj (5V microUSB) alebo batéria - [HC-SR04 ultrasonic range sensor](http://www.aliexpress.com/af/hc%25252dsr04.html?ltype=wholesale&d=y&origin=n&isViewCP=y&catId=0&initiative_id=SB_20160310035753&SearchText=hc-sr04) ~$1 - [Dupont cables](http://www.aliexpress.com/af/dupont-cable.html?ltype=wholesale&d=y&origin=n&isViewCP=y&catId=0&initiative_id=AS_20160310035754&SearchText=dupont+cable) ~$1 or something else to connect it all together - Wi-Fi router/AP ### Nastavenie Raspberry Pi Budem predpokladať, že s inštaláciou LIFX nebudú problémy, ide len o zapojenie a nastavenie Wi-Fi prístupu. Samozrejme môžeš použiť čokoľvek iné ako RPi 2/3, zvládnuť by to malo aj RPi A. Úlohou Raspberry Pi bude robiť most/server medzi NodeMCU a LIFX. Inštaláciu OS preskočím, mne na RPi beži xubuntu, na tom až tak nezáleží, dokonca aj s Windows IOT by to malo fungovať, s menšími zmenami. ### lightsd - kompilácia a nastavenie Teraz potrebujeme stiahnuť, skompilovať a nainštalovať **lightsd** servis. Tento servis poskytuje API na komunikáciu s LIFX žiarovkami cez JSON-RPC volania po lokálnej sieti. Vďaka tomu nebudeš odkázaný na internetové pripojenie a odozva bude o poznanie lepšia ako cez could. Teraz si otvore terminál a choď do adresára kam stiahneš repozitár. Najskôr potrebuješ mať nainštalovaný `git`, `cmake` a `libevent`. ```bash sudo apt-get install git cmake libevent-dev ``` Potom stiahni a skompiluj lightsd. ```bash git clone https://github.com/lopter/lightsd.git cd lightsd cmake . make install ``` Toto zaberie nejakú chvíľu a ak `make install` zlyhá, spusti tento príkaz so `sudo`. Teraz máš pripravený servis `lightsd`. Ďalej trochu upravíme lightsd systemd servis, aby poslúchal na porte a nie len na pipe, aby sme mohli nastaviť nginx proxy. Či lightsd a kde je konfiguračný súbor deamona zistíš spustením ```bash systemctl status lightsd ``` Mne sa vytvoril v `/usr/local/lib/systemd/system/lightsd.service`, a upravil som ho aby vyzeral nejak takto: ```ini [Unit] Description=LIFX WiFi smart bulbs control service After=network.target [Service] Restart=on-success RestartSec=10 User=root PIDFile=/run/lightsd/lightsd.pid ExecStart=/usr/local/bin/lightsd -t -u pi -s /run/lightsd/socket -c /run/lightsd/pipe -l localhost:8447 Restart=on-failure [Install] WantedBy=multi-user.target ``` ### Nastavenie nginx Tento krok je len bonus, ako ukážka nastavenie proxy pre lightsd. Najskôr som upravil `/etc/nginx/nginx.conf`, aby som mohol jednoducho pridať TCP streamy. Pridaj týchto pár riadkov: ```nginx stream { include /etc/nginx/conf.d/*.stream; } ``` Vďaka tomu sa do konfigurácie pridajú ďalšie súbory z adresára `/etc/nginx/conf.d`. Teraz vytvor súbor `/etc/nginx/conf.d/lightsd.stream`: ```nginx server { listen 8449; proxy_pass 127.0.0.1:8447; } ``` Reštartuj lightsd a nginx. ```bash systemctl daemon-reload systemctl restart lightsd systemctl restart nginx ``` ### Zapojenie NodeMCU Nie je to nič komplikované, proste prepoj týchto pár pinov. | HC-SR04 | NodeMCU | | ------- | ------- | | Vcc | VU | | Trig | D5 | | Echo | D6 | | GND | G | Teraz môžeš pripojiť NodeMCU microUSB káblom k počítaču a nahrať tam poslednú stabilnú verziu **nodemcu-firmware**. Tú získaš z online custom buildu na [nodemcu-build.com](http://nodemcu-build.com/). Vyber *master* build s týmito modulmi `node`, `file`, `gpio`, `wifi`, `net`, `tmr`, `cjson`. Kým dostaneš email s linkom na súbor, to chvíľu potrvá. Medzitým si môžeš pripraviť **esptool.py** na flashovanie firmware, **ESPlorer** na nahranie súborov a stiahnuť si kód na ovládanie svetiel. ### Flashovanie firmware Stiahni si esptool repozitár alebo len stiahni `esptool.py` z [https://github.com/themadinventor/esptool](https://github.com/themadinventor/esptool). ```bash git clone https://github.com/themadinventor/esptool.git cd esptool ``` A postupuj podľa návodu. Keď si stiahneš firmware (link čo ti prišiel na email) (vyber float verziu), flashni to, takýmto príkazom: ```bash sudo ./esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash 0x00000 /PATH/TO/FIRMWARE-ROM.bin ``` ### Konfigurácia nodemcu-lightsd Naklonuj si nodemcu-lightsd repozitár z [https://github.com/ra100/nodemcu-lightsd](https://github.com/ra100/nodemcu-lightsd) ```bash git clone https://github.com/ra100/nodemcu-lightsd.git ``` Otvor súbor `src/config.lua.default` a uprav ho podľa nastavenia tvojich svetiel a siete, vysvetlivky nájdeš v `README.md`. Upravený súbor ulož ako `src/config.lua`. Tu máš príklad nastavenia: ```lua SSID = 'MyNetwork' PASSWORD = 'StrongPassword42' LIGHT = 'Lifx1' -- light name MINDIST = 0.2 -- in meters MAXDIST = 0.5 -- in meters MAXRANGE = 0.2 -- in meters SERVER = '192.168.0.10' IP = '192.168.0.11' GATEWAYIP = '192.168.0.1' PORT = 8449 TRIG = 5 ECHO = 6 RANGE = MAXDIST - MINDIST REFRESH = 200 MEASURE_TIMER = 2 FADETIME = 500 DEBUG = false ``` Odporúčam nastaviť si statickú IP, potom sa ti zásadne skráti čas pripájania po reštarte/spustení NodeMCU (asi na 2-4s). ### Nahranie súborov Stiahni si **ESPlorer** z [http://esp8266.ru/esplorer-latest/?f=ESPlorer.zip](http://esp8266.ru/esplorer-latest/?f=ESPlorer.zip). Rozbaľ to a nájdi úsbor `ESPlorer.jar` a spusti ho, na linuxe takto: ```bash sudo java -jar ESPlorer.jar ``` Vyber komunikačný port, cez ktorý máš pripojené NodeMCU, napr. `/dev/ttyUSB0`, nastav baud rate na 9600. A postupne nahraj všetky **.lua** súbory cez tlačidlo *Upload*. Po nahraní posledného proste reštartuj modul (tlačidlom *Reset* v ESPloreri alebo*RST* primo na NodeMCU). To je všetko, teraz môžeš ovládať zvolené svetlo. A tu je ďalšia videoukážka. ### Bonusová úloha Vytlač si na 3D tlačiarni obal na NodeMCU a HC-SR04. Ako základ som použil model [Ultrasonic Sensor Housing](http://www.thingiverse.com/thing:1170335) a pridal si k nemu prichytenie na čelo postele. #### Odkazy na kód a nástroje - nodemcu-lightsd [https://github.com/ra100/nodemcu-lightsd](https://github.com/ra100/nodemcu-lightsd) - lightsd [https://github.com/lopter/lightsd](https://github.com/lopter/lightsd) - esptool.py [https://github.com/themadinventor/esptool](https://github.com/themadinventor/esptool) - ESPlorer [http://esp8266.ru/esplorer](http://esp8266.ru/esplorer)

Galéria