NodeMCU + LIFX = ovládanie svetiel gestami

NodeMCU + LIFX cover

Ž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á. https://www.youtube.com/watch?v=3uRGI2xA54g

Ako som to spavil

Nákres cesty od senzoru k žiarovke [field_image:1|center]

Nákupný zoznam

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.

sudo apt-get install git cmake libevent-dev

Potom stiahni a skompiluj lightsd.

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

systemctl status lightsd

Mne sa vytvoril v /usr/local/lib/systemd/system/lightsd.service, a upravil som ho aby vyzeral nejak takto:

[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:

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:

server {
	listen 8449;
	proxy_pass	127.0.0.1:8447;
}

Reštartuj lightsd a nginx.

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

[field_image:0|center]

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

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:

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

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:

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. Rozbaľ to a nájdi úsbor ESPlorer.jar a spusti ho, na linuxe takto:

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 aleboRST primo na NodeMCU).

To je všetko, teraz môžeš ovládať zvolené svetlo. A tu je ďalšia videoukážka. https://www.youtube.com/watch?v=FgbDd7xLI5o

Bonusová úloha

Vytlač si na 3D tlačiarni obal na NodeMCU a HC-SR04. Ako základ som použil model Ultrasonic Sensor Housing a pridal si k nemu prichytenie na čelo postele.

Odkazy na kód a nástroje

NodeMCU + HC-SR04
LIFX + NodeMCU + WiFi + RAspberry Pi conection
NodeMCU v3
púzdro na HC-SR04
uchytenie HC-SR04
WeMos D1 mini