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 LIFX + NodeMCU + WiFi + RAspberry Pi conection

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

NodeMCU + HC-SR04

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.

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

Galéria