Ž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 ž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 |
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
- 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