Sensori di casa intelligente fai da te con Arduino, MySensor e OpenHAB
I sensori di casa intelligente costano una quantità ridicola di denaro. A $ 60- $ 100 solo per un rilevatore di movimento o un sensore di umidità, il cablaggio di un'intera casa diventa il dominio di quelli con stupide quantità di reddito disponibile. Costruiamo il nostro.
Fortunatamente, il duro lavoro è già stato fatto dai bravi ragazzi dietro MySensors.org. Oggi ti mostrerò come utilizzare la struttura MySensors per creare una gamma economica di sensori domestici intelligenti che possono essere inseriti in un'installazione OpenHAB (consulta la nostra guida su Come iniziare con OpenHAB su Raspberry Pi) Introduzione a OpenHAB Home Automation on Raspberry Pi Introduzione a OpenHAB Home Automation su Raspberry Pi OpenHAB è una piattaforma di automazione domotica open source che funziona su una varietà di hardware ed è indipendente dal protocollo, il che significa che può connettersi a quasi tutti gli hardware di automazione domestica presenti oggi sul mercato. Leggi di più . Presumo che tu abbia già un server MQTT funzionante e comprendi le basi del formato di messaggistica MQTT; in caso contrario, assicurarsi di leggere il seguito alla guida di OpenHAB, che include le istruzioni per l'installazione di un server MQTT. OpenHAB Guida per principianti Parte 2: ZWave, MQTT, regole e grafici OpenHAB Guida per principianti Parte 2: ZWave, MQTT, regole e grafici OpenHAB , il software di domotica open source, supera di gran lunga le capacità di altri sistemi di automazione domestica sul mercato - ma non è facile da installare. In effetti, può essere addirittura frustrante. Leggi di più .
Anche se mi occuperò specificamente dell'inoltro dei dati MySensor da una rete di Arduinos, utilizzando MQTT, ad un'installazione di OpenHAB, dovrei sottolineare che il framework MySensors può essere inserito in una serie di diversi controller di automazione domestica. L'ho presentato qui come una soluzione completa che funziona per me, ma per favore controlla il sito MySensors in quanto potresti trovarlo adatto anche ai tuoi scopi simili, ma usando un hardware leggermente diverso o un diverso protocollo di messaggistica. È incredibilmente versatile.
Il costo dell'hardware per il mio setup è inferiore a $ 10 per nodo (un po 'di più per il gateway), ma sensori e attuatori aggiuntivi possono essere aggiunti per pochissimo (il sensore di umidità e temperatura DHT11 ad esempio è di circa $ 1 ciascuno; è di circa $ 3).
Cosa stiamo facendo
L'idea di base è che anziché aggiungere alla nostra rete locale affollata esistente utilizzando Wi-Fi inaffidabile o costosi schermi Ethernet, creiamo una rete completamente indipendente con funzionalità mesh solo per gli Arduino; quindi collegalo alla rete locale utilizzando un singolo nodo gateway, che ha sia una connessione Ethernet che una connessione radio agli altri Arduino. Quindi stiamo creando un paio di nodi di sensori, che raccolgono dati; e un nodo gateway, che trasmette i dati sul server OpenHAB.
Ancora una volta, questo è ciò che funziona per me, perché la mia ricezione Wi-Fi è così orrenda e non voglio confonderla con dati non necessari. Se sei soddisfatto del Wi-Fi, prova a utilizzare il basso costo ESP8266 compatibile con Arduino Scopri l'assassino di Arduino: ESP8266 Incontra l'assassino di Arduino: ESP8266 E se ti dicessi c'è una scheda di sviluppo compatibile con Arduino con Wi integrato -Fi per meno di $ 10? Bene, c'è. Leggi di più con le schede Wi-Fi integrate - MySensors supporta anche quelle.
Nota importante per El Capitan Users e Arduino Clones: Apple è riuscita a rompere i driver seriali utilizzati per comunicare con un certo numero di schede clone di Arduino nell'ultima versione di El Capitan, grazie a nuove misure di sicurezza. Per vedere se sei interessato, guarda la tua scheda e il chip più vicino alla porta USB. Se dice CH340, ne sei influenzato. Seguire le istruzioni qui per disabilitare la firma del driver kext, installare nuovamente i driver seriali CH340.
Componenti necessari
Per il gateway, avrai bisogno di:
- Arduino Uno
- Scudo Ethernet (basato su W5100)
- Modulo NRF24L01 - Ho usato il +PA + LNA versioni in tutto, che hanno una portata aumentata fino a 1 km. Il cablaggio è lo stesso a tua scelta.
Per ciascun nodo del sensore:
- Arduino Uno
- Modulo NRF24L01
- Sensori (per cominciare, suggerirei un modulo DHT11 o DHT22 di temperatura e umidità)
Supplementare / facoltativo:
- Condensatori da 10uF, uno per ogni modulo RF che hai (il link è per un pacchetto di 50!)
- Alimentatore con uscita 5v e 3.3v (YwRobot MB102 funziona bene e costa $ 1 a testa) - richiesto se si utilizza un clone Arduino. Avrai anche bisogno di un alimentatore da 9-12 V DC per questi.
- Prototipazione degli scudi o fili di collegamento maschio-femmina corti.
Lavorare con i moduli NRF24L01
Iniziamo con i moduli NRF24L01, poiché sono la parte più complessa del progetto. Sono andato per la versione più costosa e più lunga di questi: tecnicamente noto come NRF24L01 + PA + LNA. Sono dotati di un circuito di amplificazione del segnale di bordo e di una connessione dell'antenna, anche se ti suggerisco di provare la versione meno antenna dei moduli prima se hai una casa normale con pareti normali, non il tipo di muro solido che Lo voglio. La gamma dichiarata di questi è di circa un chilometro, più che sufficiente per me messo nel capanno del giardino.
Tuttavia, queste cose sono veramente difficile lavorare con; se vai avanti e inserisci tutto senza leggere prima questi suggerimenti, rimarrai deluso.
- Il modulo richiede 3,3 V di potenza in ingresso al pin VCC - non 5v. Se inserisci 5v, lo friggierai.
- Saldare un condensatore da 10uF attraverso i terminali VCC / GND. La linea grigia continua sul condensatore indica il lato negativo / GND.
- Utilizzare cavi di salto corti e di alta qualità; o meglio ancora, saldarli direttamente a uno scudo di prototipazione per mantenere la lunghezza del cavo al minimo e connessioni solide.
- Se stai usando un clone Arduino, il regolatore di tensione non fornisce abbastanza per loro sul cavo da 3,3v: dovrai utilizzare una scheda di alimentazione esterna (collegata sopra), disponibile per circa $ 1 ciascuno. Questi forniscono 3.3v stabile. Se stai usando un originale Il marchio Arduino Uno, questo non sembra essere un problema.
Vi consiglio caldamente di fare alcuni test di base prima solo per stabilire che la radio funzioni. Collega due radio come mostrato nella pagina MySensors. Non importa che il loro diagramma mostri le schede Arduino Micro - vengono usati gli stessi numeri dei pin. Si noti che il diagramma mostra NRF24L01 dal superiore; in effetti dovrai collegare le cose dalla parte inferiore. Mentalmente aggiustarsi di conseguenza. Ignora il pin IRQ grigio, non è attualmente utilizzato. In sintesi:
- VCC va a 3.3v sul tuo alimentatore esterno
- GND va al common rail di terra
- CE al pin 9
- CSN / CS al pin 10
- MOSI al pin 11
- MISO al pin 12
- SCK al pin 13
Avrai bisogno di due nodi completamente cablati per testare. Scarica la libreria RF24 e carica il più semplice Iniziare esempio. Accendi entrambi i moduli, ma lascia uno collegato via USB e apri la console seriale. genere “T” e invia, per passare alla modalità di trasmissione, a quel punto dovresti ottenere messaggi di debug che dicono che sta facendo ping con successo un messaggio all'altro nodo.
Costruire il gateway client MQTT MySensors
Ok, ora che sappiamo che le radio RF24 sono cablate e funzionano correttamente, andare avanti e scaricare il ramo di sviluppo del pacchetto MySensors Arduino. Questo tutorial è stato scritto usando la versione 1.5, ma dovrebbe essere ok anche con le versioni successive. Stiamo utilizzando il ramo di sviluppo perché al momento della scrittura, il MQTT cliente gateway non fa ancora parte del pacchetto principale.
Sebbene MQTTGateway sia disponibile nel ramo master, funge anche da server, cosa che non vogliamo perché abbiamo già un server MQTT stabile in esecuzione su Raspberry Pi. Vogliamo solo inoltrare i dati di MySensor su quello. Di nuovo, se questo non è quello che vuoi - se preferisci non utilizzare affatto MQTT - allora guarda EthernetGateway o SerialGateway, entrambi compatibili anche con OpenHAB.
Vale la pena notare che il pacchetto di download non include solo i file essenziali di MySensor, ma include anche librerie compatibili necessarie per ogni possibile sensore. Per evitare conflitti, suggerirei di eseguire il backup dell'intera cartella delle librerie correnti e di sostituirle tutte con quelle del pacchetto di download.
Il cablaggio per il gateway è leggermente diverso; una volta ottenuto lo scudo Ethernet, utilizzare i seguenti pin per il modulo radio:
- CE al pin 5
- CSN al pin 6
- SCK per pin A0
- MOSI per pin A1
- MISO per pin A2
È inoltre necessario abilitare il #define SOFTSPI linea nel librerie / mySensors / MyConfig.h file. Fai questo rimuovendo // per decommentarlo, è intorno alla riga 309 sulla mia.
Dobbiamo farlo perché sia il modulo radio che lo schermo di rete usano SPI, e sono incompatibili; quindi spostiamo semplicemente il modulo radio SPI su altri pin ed eseguiamo invece le comunicazioni SPI nel software (da qui, morbido SPI).
Carica il MySensors / GatewayW5100MQTTClient schizzo. Se non lo vedi nel menu MySensors, non hai il ramo di sviluppo installato. Usa il link sopra riportato per riscaricare l'intera libreria.
È necessario definire un indirizzo IP statico per il controller, l'IP del router di rete e della subnet e l'indirizzo IP del server MQTT esistente. Sentiti libero di modificare anche i prefissi degli argomenti, se lo desideri. Carica e collega quella cosa alla rete. Controlla brevemente la console seriale per eventuali errori di abbagliamento come non essere in grado di connettersi al server MQTT, altrimenti metterlo da parte (ma lasciarlo acceso).
Costruire i nodi del sensore
Innanzitutto, commentalo #define SOFTSPI linea nel MyConfig.h file di nuovo mettendo il // indietro all'inizio. È necessario solo per il gateway: stiamo utilizzando il cablaggio standard NRF24L01 per i nodi del sensore, che utilizzano l'hardware SPI. Se hai bisogno di ricordare:
- VCC va a 3.3v sul tuo alimentatore esterno (o sullo stesso Arduino se è un originale e non un clone)
- GND va al common rail di terra
- CE al pin 9
- CSN / CS al pin 10
- MOSI al pin 11
- MISO al pin 12
- SCK al pin 13
Quindi, cablare la scelta del sensore; Utilizzo il sensore di umidità e temperatura DHT11 per i test, ma se scorri verso il basso nell'elenco dei sensori e degli attuatori nella barra laterale della pagina MySensors, troverai un'ampia selezione di altre opzioni: porte, pluviometro, luce, movimento, anche RFID - e molto altro. Potete vedere che ho anche aggiunto un relè al nodo nella foto qui sotto, ma ne parleremo più avanti.
Finalmente, carica il Sensore di umidità esempio dal menu MySensor e aggiungi la riga seguente subito dopo i commenti.
#define MY_NODE_ID 2
Dato che stiamo usando una versione speciale del controller che inoltra le cose sul nostro server MQTT, non ha la funzione di controller standard che assegna automaticamente gli ID di nodo a ciascun nuovo nodo. Invece lo definiremo manualmente ogni volta. Annotare questo numero da qualche parte per i propri record e modificarlo per ciascun nodo.
Abilita anche l'output di debug:
#define MY_DEBUG
Infine, controlla che il pin dati del tuo sensore DHT11 sia corretto.
#define HUMIDITY_SENSOR_DIGITAL_PIN 7
Quindi, carica!
Vale la pena aprire la console seriale per dare un'occhiata. Il punto cruciale da guardare è st =, che è lo stato del messaggio. st = falliscono significa che il messaggio non è stato inviato. È possibile che non sia stato definito un ID nodo univoco o che il gateway non sia in linea. Ho simulato questi errori semplicemente scollegando il gateway:
Se tutto funziona, dovresti iniziare a vedere alcune letture dei dati nel tuo server MQTT. Inserirli in OpenHAB non rientra nell'ambito di questo tutorial, ma è stato trattato nella parte 2 della guida OpenHAB Guida per principianti OpenHAB Parte 2: ZWave, MQTT, Regole e grafici OpenHAB Guida per principianti Parte 2: ZWave, MQTT, Regole e Charting OpenHAB, il software di domotica open source supera di gran lunga le capacità di altri sistemi domotici sul mercato, ma non è facile da installare. In effetti, può essere addirittura frustrante. Leggi di più in modo da poter fare riferimento indietro lì.
Combinazione del codice del sensore
Sebbene ottenere un singolo nodo sensore attivo e funzionante sia relativamente semplice, diventa un po 'più complicato quando si desidera aggiungere più sensori a ciascun nodo. Fondamentalmente mescolerai i frammenti di codice da due diversi esempi. Il modo più semplice per mostrarti questo è ad esempio con un video! Qui sto combinando il nostro sensore di umidità base con un relè.
Qui puoi trovare il codice completo per il sensore di umidità e il relè, che è già stato modificato con un ciclo non bloccante, come menzionato nel video. Per saperne di più sulla struttura dei comandi MQTT necessaria per attivare il relè, controlla l'API seriale, ma basti dire che il seguente canale controlla il primo relay nel codice che ho fornito (con un corpo del messaggio di 0 o 1):
mysensors-in / 9/1/1/0/2
L'unica limitazione ora è la quantità di memoria su Arduino, e dirò questo: i sensori più affidabili nella mia casa intelligente non sono i moduli Z-Wave commerciali che costano $ 80, ma quelli personalizzati MySensors.
La finirò qui oggi, ma se hai problemi puoi chiedere via nei commenti o nei forum di utenti molto attivi di MySensors. Riuscirai a mettere insieme i tuoi sensori economici? Come sta arrivando la tua casa intelligente??
Scopri di più su: Arduino, Smart Sensor.