Questo tutorial vuole illustrare una modalità di interazione tra lo sketch in esecuzione sull’ATMega e il sistema Linino (Linux) in esecuzione sul SoC di Arduino Yun: la possibilità di lanciare processi Linux da sketch.
L’esempio proposto realizza un allarme via SMS:
- ad Arduino è collegato un microswitch
- alla pressione del microswitch viene inviato un SMS utilizzando il gateway Skebby
Linino side
L’invio del messaggio SMS viene effettuato da uno script PHP che si interfaccia con il gateway di Skebby.
Per poter eseguire script PHP è per prima cosa necessario installare alcuni moduli, con il comando:
opkg install php5 php5-cli php5-mod-curl
Lo script sendSMSAlert.php, realizzato prendendo spunto dagli esempi disponibili, può essere scaricato dal repository su GitHub e salvato nella cartella /root (home dell’utente root).
E’ necessario personalizzare il metodo sendSMS inserendo il proprio account Skebby, il numero del destinatario e del mittente e il testo da inviare:
echo sendSMS("skebby_user", "skebby_password", "391234567890", "391234567890", "Warning: door opened!", "0cent") . "\n"; |
Skebby supporta diversi tipi di SMS: l’ultimo parametro della chiamata specifica proprio quale tipo di SMS inviare. L’elenco degli SMS disponibili è presente all’inizio dello script:
define ("SMS_TYPE_0CENT", "0cent"); define ("SMS_TYPE_CLASSIC", "classic"); define ("SMS_TYPE_CLASSIC_PLUS", "classic_plus"); define ("SMS_TYPE_BASIC", "basic"); |
Ho utilizzato il tipo 0cent che è gratuito, ma richiede la presenza dell’app di Skebby sul telefono del destinatario (ed una connessione ad Internet).
Arduino side
Anche lo sketch per Arduino è disponibile nel repository su GitHub.
Ho collegato il microswitch in questo modo:
[checklist]
- il PIN comune, al PIN 2 di Arduino
- il PIN normalmente chiuso a massa
- il PIN normalmente aperto a 5V
[/checklist]
In questo modo quando il microswitch non è premuto, il PIN 2 è collegato a massa (LOW), mentre quando viene premuto è collegato a 5v (HIGH). Utilizzo anche il PIN 13 (collegato ad un LED direttamente sulla scheda dello Yun) per visualizzare lo stato del microswitch.
Entrambi i PIN possono essere personalizzati cambiando le costanti all’inizio dello sketch:
#define SWITCH_PIN 2 #define LED_PIN 13 |
Nel loop() lo sketch controlla periodicamente lo stato del microswitch: se questo viene premuto, invoca il metodo sendAlert(). Tengo anche traccia dello stato precedente del microswich in modo da inviare un SMS solo quando vi è un cambio di stato.
Il metodo sendAlert() utilizza una funzionalità della libreria Bridge di Yun: la possibilità di eseguire uno script all’interno di Linino:
void sendAlert() { Process p; p.begin("php-cli"); p.addParameter("/root/sendSMSAlert.php"); p.run(); } |
Viene infatti chiamato l’interprete PHP (php-cli) chiedendo l’esecuzione dello script sendSMSAlert.php che abbiamo già salvato nella home dell’utente root.
Conclusioni
In questo tutorial abbiamo visto un primo esempio di interazione tra sketch e Linino… nei prossimi vedremo come operare al contrario (Linino -> sketch) e come passare dei valori.
Buonasera,
mi scusi ma non ho capito dove devo scaricare il file php. Grazie per la risposta
il link al mio repository Github è nell’articolo… eccolo qui: https://github.com/lucadentella/YunDoorAlarm