Ž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
- jedna LIFX žiarovka - $60
- Raspberry Pi 2/3 ~$35
- zdroj (5V microUSB)
- NodeMCU v3 ~$5 alebo D1 mini ~$4
- zdroj (5V microUSB) alebo batéria
- HC-SR04 ultrasonic range sensor ~$1
- Dupont cables ~$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.
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-lightsd https://github.com/ra100/nodemcu-lightsd
- lightsd https://github.com/lopter/lightsd
- esptool.py https://github.com/themadinventor/esptool
- ESPlorer http://esp8266.ru/esplorer