Oggi vedremo un piccolo progetto, che ha lo scopo di creare un sistema IoT in casa, per la segnalazione dell’apertura del garage, oppure di una porta, con rilevamento acustico.
Requisiti hardware
- Photon Particle oppure Arduino Uno + Shield Ethernet
- Sensore magnetico
- Raspberry PI Zero
- Buzzer 5V
Requisiti software
- Software per il progetto
- Libreria Pi4j
Descrizione del progetto
L’idea alla base del progetto, è quello di sfruttare un micro-controllore come Arduino oppure Photon per la rilevazione attraverso un sensore magnetico l’apertura del garage, oppure di una finestra/porta. Appena viene rilevata l’apertura, il dispositivo invierà un pacchetto/segnale ad un piccolo server posto in casa, come ad esempio un Raspberry PI Zero, che attraverso un buzzer emetterà un piccolo segnale acustico. Nelle future versioni del progetto, verranno aggiunte funzionalità.
Tutte e due i dispositivi devono essere connessi alla stessa rete WiFi, in modo da poter ricevere senza problemi i pacchetti TCP. Per quanto riguarda l’utilizzo del Buzzer per il Raspberry Pi Zero, conviene usare una resistenza di 100 ohm in serie, tra il PIN GPIO6 e il dispositivo.
Codice Photon Particle
TCPClient client; byte server[] = { 192, 168, 1, 10 }; int port = 8000; unsigned long previousMillis = 0; unsigned int interval = 2000; void setup() { pinMode(D2, INPUT_PULLUP); attachInterrupt(D2, notify, RISING); } void loop() { } void notify(){ unsigned long currentMillis = millis(); if(currentMillis - previousMillis > interval) { previousMillis = currentMillis; client.connect(server, port); if ( client.connected() == TRUE ) { client.flush(); client.print("open"); } } }
Codice Arduino
#include <SPI.h> #include <Ethernet.h> byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress server(192,168,1,10); EthernetClient client; int port = 8000; int pin = 2; unsigned long previousMillis = 0; unsigned int interval = 2000; void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); if (Ethernet.begin(mac) == 0) { Serial.println("Failed to configure Ethernet using DHCP"); Ethernet.begin(mac); } delay(1000); pinMode(pin,INPUT); Serial.println("connecting..."); attachInterrupt(pin, notify, RISING); } void loop() { } void notify(){ unsigned long currentMillis = millis(); if(currentMillis - previousMillis > interval) { previousMillis = currentMillis; client.connect(server, port); if ( client.connected() == true ) { client.flush(); client.print("open"); } } }
Nota bene
Per entrambi i programmi, è necessario modificare l’IP del server, con quello relativo al Raspberry PI Zero.
Codice per Raspberry PI Zero
package main; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import com.pi4j.io.gpio.GpioController; import com.pi4j.io.gpio.GpioFactory; import com.pi4j.io.gpio.GpioPinDigitalOutput; import com.pi4j.io.gpio.PinState; import com.pi4j.io.gpio.RaspiPin; public class Main { public static void main(String[] args) throws IOException, InterruptedException { final GpioController gpioBuzzer = GpioFactory.getInstance(); final GpioPinDigitalOutput buzzer = gpioBuzzer.provisionDigitalOutputPin(RaspiPin.GPIO_06, "Buzzer", PinState.LOW); buzzer.low(); ServerSocket welcomeSocket = new ServerSocket(8000); while (true) { Socket connectionSocket = welcomeSocket.accept(); BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); String message = inFromClient.readLine(); if (message.equalsIgnoreCase("open")) { buzzer.high(); Thread.sleep(2000); buzzer.low(); } } } }
Per quest’ultimo progetto, è necessario aggiungere la libreria JAR pi4j all’interno del progetto in Eclipse.
Il codice completo del progetto, è disponibile in questo repo su GitHub.