Una funzionalità interessante del mondo IoT di Cisco Packet Tracer è la possibilità di esporre componenti non smart all’Home Gatway attraverso il simulatore di Arduiono o RaspBerry. Vediamo un esempio in JavaScript.
Nelle pagine di questo sito ci sono numerose esercitazioni con l’Home Gatway e la possibilità di collegare dei componenti smart da programmare con la classica interfaccia se/azione. Ma il simulatore va anche oltre con la possibilità di creare piccoli esperimenti utilizzando i simulatori di arduino e raspberry per interagire con sensoristica varia. Quello che non abbiamo contemplato è come invece integrare dispositivi non smart con alexa, creando una interfaccia su arduino che permetta quindi di esporre le funzionalità di questi componenti.
Procediamo a realizzare la nostra simulazione piazzando gli elementi di interesse. Per l’ Home Gateway si trova in [Network Devices]-> [Wireless Device]mentre per il tablet o un qualsiasi analogo dispositivo come uno smartphone [End Devices] ->[End Devices]. Il nostro simulatore di Arduino si trova in [Components] ed è la basetta con nome MCU Board mentre il led lo trovate sempre in [Components] -> [Actuators]

Cominciamo con la configurazione. Il nostro Home Gateway, rinominato per simpatia con Alexa e il tablet non hanno particolari difficoltà. Possiamo inserire una configurazione semplice inserendo SSID e password WPA2 – PSK a piacere e AES Encryption per far sincronizzare i due dispositivi. Questa configurazione è ampiamente trattata nelle pagine di questo sito. Per collegare Arduino ad Alexa dobbiamo dotarlo di una scheda di rete. In genere, Arduino rev3 infatti non ha scheda di rete se non nelle versioni Yun e altre più specifiche. Per la nostra simulazione, spegniamo il dispositivo col bottoncino ed inseriamo una scheda CGE o 1W.

Di default, Alexa elargisce DHCP così l’unico flag da inserire è solo questo se non ci sono particolari esigenze specifiche. Ricordiamoci però di contrassegnare il nostro MCU Arduino come elemento smart per farlo rilevare all’home gateway.

Per quanto riguarda il collegamento tra Arduino e e il LED, dobbiamo andare nella sezione dei cavi col fulmine e andare a cercare sulla destra il cavo custom IoT, che corrisponde ad un cavo dupont del mondo reale senza tener conto di plug maschio/femmina o +/- che preferiate.
Ultimate le configurazioni per connettere, possiamo passare al codice per esporre il nostro led. Clicchiamo sulla MCU e andiamo nel tab Programming. Qui ci si apre una schermata divisa in due: i progetti che abbiamo salvato sul lato sinistro e una schermata bianca a destra. Qui possiamo crearci il nostro progetto con un nome a piacere cliccando il bottone New. Scegliamo nome e nella finestrella Template scegliamo il codice Empty – JavaScript. Scorrendo la tendina possiamo notare che esistono altri frammenti di codice/progetti preconfezionati che possiamo usare per sbirciare nuove funzionalità o idee per altri nostre simulazioni. Cliccando Create, ci riappare una finestra del tutto analoga ma a destra compare il nostro ide di sviluppo per scrivere il codice e a sinistra i file che possiamo aggiungere al nostro progetto. Nel nostro caso ci serve solo il file main.js già presente che sarà quello utilizzato per il programma principale. Vediamo il codice.
Come per gli sketch, i programmi di Arduino, anche qui il nostro simulatore in js richiede due funzioni principali; una di setup per impostare tutto quello che c’è di configurare una tantum e una i loop che esegue la logica principale ad oltranza. La parte di setup comprende l’inizializzazione del pin digitale a cui è collegato il led, che va configurato come OUTPUT, un semplice messaggio all’interfaccia seriale per le classiche operazioni di debug e, finalmente, la nostra API per esporre il led. Le funzioni da utilizzare, e tutte le funzioni in generale, le trovate comodamente nel comodissimo Help in alto a destra, con le funzioni base e quelle IoE, che in realtà sono davvero poche e semplici, corredate di esempi oche può essere copiato e modificato su misura. Seguendo la sintassi dell’esempio è facile costruire la struttura dati per il led che ha solo due stati acceso/spento, traducibile con una variabile booleana e la possibilità di essere controllato, ovvero acceso e spento, dall’Home Gateway.
function setup()
{
pinMode(0, OUTPUT);
Serial.println("Accenditi");
IoEClient.setup({
type: "Led",
states: [{
name: "Acceso",
type: "bool",
controllable: true
}]
});
}
Il loop deve contenere due cose:
– una funzione che rapporta lo status del led, se cceso o spendo all’Home Gateway
– una funzione che recepisce l’evento sul bottone di controllo e di conseguenza agisce sullo stato fisico del led
Anche qui, dall’Help possiamo trovare un esempio preconfezionato che ci mostra l’utilizzo semplice delle due funzioni che ci occorrono. La onInputReceive è forse un po’ più complessa comportandosi un po’ come una funzione JQuery. Basti sapere per l’utente meno esperto che input sarà la variabile di buffer dove l’Home Gateway inserisce il valore del bottone vero/falso. A noi non resta che una semplice if per intercettare tale valore e accendere /spegnere il led
function loop()
{
IoEClient.reportStates(stato);
IoEClient.onInputReceive = function(input) {
Serial.println(input);
if (input == 1)
digitalWrite(0, HIGH);
else
digitalWrite(0, LOW);
stato = input;
};
}
Qui la funzione è semplice, il bottone è singolo. L’alunno più smart potrebbe personalizzare questo esercizio aggiungendo uno o più bottoni che vanno ad eseguire sul led dei programmi con accensioni diverse del led, con temporizzazioni simili alle decorazioni di natale.
Il codice completo:
var stato = 0;
function setup()
{
pinMode(0, OUTPUT);
Serial.println("Accenditi");
IoEClient.setup({
type: "Led",
states: [{
name: "Acceso",
type: "bool",
controllable: true
}]
});
}
function loop()
{
IoEClient.reportStates(stato);
IoEClient.onInputReceive = function(input) {
Serial.println(input);
if (input == 1)
digitalWrite(0, HIGH);
else
digitalWrite(0, LOW);
stato = input;
};
}
Ultima modifica 12 Gennaio 2022