Nella prima parte di questo ciclo di lezioni, abbiamo imparato a collegare una sceda esp8266, vestita dal nostro WeMos D1.

Confesso che volevo subito parlarvi di come accendere un led via browser, ma avrebbe potuto spaventare , come capita, coloro che vogliono avvicinarsi all’IOT.

Oggi impareremo qualcosa in più sull’ambiente di sviluppo di Arduino.

L’idea di realizzare un ambiente aperto che evitasse di utilizzare linguaggi complessi (si veda C/C++) portò i suoi ideatore, nel 2003, a pensare a ri-progettare un linguaggio più semplice (Wiring) e derivato da Processing, un ambiente IDE in Java ed una board realizzata con componenti elettronici il cui assemblaggio è aperto (tutti possono costruirsi il proprio Arduino, purchè si citi il nome).

La Galassia Arduino oggi conta tantissime board, alcune delle quali capaci di connettersi alla rete Internet, ma ha anche dei suoi “cloni” o meglio delle board a basso costo . Nel mio caso, in questa sperimentazione utilizzo non un Arduino compatibile, ma qualcosa di simile (visitate wemos.cc).  Per i nostri scopi va più che bene, avendo un modulo capace di collegarsi alla rete, programmandolo.

 

UTILIZZIAMO UN BUZZER ED UN POTENZIOMETRO (quello che vedremo vale anche per Arduino e non solo per la board utilizzato nell’esempio)

In questa prima applicazione vogliamo regolare l’intensità sonora di un cicalino (buzzer) utilizzando un potenziometro, ovvero un componente elettronico che permette di regolare la resistenza interna. In sostanza vogliamo aumentare e diminuire il volume del nostro cicalino, con una manopola.

Il collegamento elettronico è il seguente ( ho utilizzato http://fritzing.org/home/):

 

 

Come si nota il GND (la terra) collega sia un piedino del cicalino sia del potenziometro, in sostanza i due dispositivi sono connessi e la resistenza del potenziometri, modifica la corrente che passa all’interno del cicalino, quindi il volume del suono emesso.

Ecco il codice:

const int BuzzerPin = D0;

void setup() {

}

void loop() {

tone(BuzzerPin,1000);
delay(300);
noTone(BuzzerPin);
delay(300);
}

 

Facciamo alcune considerazioni.

All’inizio dichiaro cosa vi è su pin Digitale 0 (D0) (lun numero intero che corrisponde al cicalino)

Void setup: qui si mettono tutte le richieste iniziali, come vedremo la richiesta di indirizzo IP farà al caso nostro

In void loop ci sono le istruzioni vere e proprie, in pratica ciò che vogliamo far eseguire, il nostro programma.

Anche senza essere esperti si capisce subito che all’inizio il buzzer è attivo (tone) per un certo tempo, poi si silenza (no tone).

Vediamo meglio :

tone(BuzzerPin,1000) gestisce il pin D0 (BuzzerPin) emettendo frequenza 1000

delay(300) detta l’attesa, in questo caso di 300 millisecondi.

Può essere un utile esercizio modificare la frequenza ed il delay, sostituendo una resistenza in serie (e se fosse in parallelo ) al nostro schema circuitale…

insomma si impara modificando…

ACCENDERE UN LED CON UN TELECOMANDO

Come facciamo a cambiare canale con il telecomando della nostra TV?

Prende un telecomando e puntatelo verso la telecamera del vostro smartphone e premete un tasto a caso.

Scoprirete, con grande meraviglia, che compare una luce violetta invisibile ad occhio nudo.

E la radiazione elettromagnetica infrarossa!

In sostanza il telecomando invia un segnale IR che viene recepito da un apposito ricevitore sulla TV e lo decodifica in cose tipo: accedimi, cambia canale, alza volume etc.

Provate a vedere cosa accade di notte con un telecomando IR ponendo uno specchio vicino (usate la vs fotocamera o un visore notturno IR).

 

Passiamo al nostro programma.

utilizzo un ricevitore IR VS1838B ed un apposito telecomando (li vendono sempre insieme, già codificati)

Ecco il collegamento elettronico:

 

Ed ecco il mio programma:

#include <IRremoteESP8266.h>
#include <IRrecv.h>
#include <IRutils.h>
int RECV_PIN = D7; 
IRrecv irrecv(RECV_PIN);

decode_results results;
void setup() {

Serial.begin(115200);
irrecv.enableIRIn(); 

pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, 0);
}

void loop() {

if (irrecv.decode(&results)) {
serialPrintUint64(results.value, HEX);
Serial.println();
irrecv.resume(); 
digitalWrite(LED_BUILTIN, 0);
delay(200);
digitalWrite(LED_BUILTIN, 1);
delay(200);
digitalWrite(LED_BUILTIN, 0);
}

delay(100);

}

 

anche qui intervengono delle cose nuove.

All’inizio con include ho bisogno di inserie delle Librerie, ovvero qualcosa che mi permette di riconoscere, leggere appositi sensori.

Molte di queste librerie sono già incluse su IDE arduino, altrimenti si possono aggiungere .

Purtroppo la libreria IRremoteESP8266 deve essere importata manualmente.

Per farlo dovete scaricare il file zip seguendo le istruzioni da github:

https://github.com/markszabo/IRremoteESP8266

 

Cosa fa il nostro programma?

Appena schiaccio un pulsante qualsiasi del telecomando, accende/spegne per un breve periodo il led sulla scheda esp8266!

 

Provate ad aprire il monitor seriale su IDE Arduino, scoprirete che ogni volta che premete il telecomando, ad ogni tasto, corrisponderà una stringa (chiamata HEX string).

Siete pronti ad associare ad ogni tasto una apposita codifica?

La prima cosa da fare è aggiungere due o tre led e farli accendere se premete degli appositi tasti!

Provate, si tratta di modificare il codice che vi ho fornito sostituendo al led sulla scheda gli appositi pin dei vostri led…

 

 

Vai alla barra degli strumenti