Ethical DIY

Progetti hardware & software etici


Menu orizzontale con sottomenu CSS








 

Versione di ESP32

NodeMCU ESP32 (standard)

ESP32 - Cam (con telecamera)

ESP32 CYD (con display)



La basetta sperimentale (BDS)

La basetta sperimentale (BDS)  per ESP32x

Download dei file necessari

Assemblare la basetta sperimentale

Il settaggio della basetta

La  piedinatura di ESP32 e la gestione delle porte (GPIOx)

Le cinque  configurazioni della basetta sperimentale (BDS)

Elenco dei sensori/attuatori testati per ogni slot di collegamento

Programmi di test per la basetta
didattica e sperimentale




Informazioni di base:

- Come installare la IDE di Arduino
- Configurazione della IDE 
- Caricamento dei programmi
- Il problema dei permessi sulle porte seriali con Linux
- Come caricare le librerie necessarie

I sensori/attuatori compatibili con ESP32




Programmi per ESP32x

Programmi di test per la BDS
Programmi con display LVGL
Stazioni meteorologiche
Programmi vari
Programmi con Telegram
Programmi con ThingSpeak
Programmi con il DB Firebase
Programmi con MQTT (Mosquitto)
Programmi con LittleFS












 















ESP32x
Programmi (sketch ) di test

In questa pagina troverai alcuni programmi che hanno un duplice scopo: sia quello di iniziare i test della basetta didattica e sperimentale (BDS) e anche per prendere confidenza con essa.
Perciò saranno programmi piuttosto semplici, che utilizzeranno pochi e semplici componenti.






I programmi che troverai in questa sezione:







Il primo programma: uso di un sensore e di un relè



In questo sketch si userà un semplice sensore digitale, ovvero che ha solo due stati: "1" (HIGH) o "0" (LOW), collegato attraverso al microcontroller a un relè o un led.
Come sensore è stato usato un pulsante del tipo
KY-004, connesso sullo zoccoloDA4 (GPIO27) e un relè tipo KY-019 inserito sullo zoccolo DA3 (GPIO18).
Nota: il relè, sebbene sia con alimentazione nominale a +5v, dovrebbe funzionare anche a +3,3v.

b1
Invertire i valori evidenziati in base al sensore utilizzato






Alcune particolarità: il pulsante  KY-004 ha un funzionamento opposto a quello che potremmo pensare: è in stato "HIGH" quando il pulsante non è premuto e "LOW" quando viene schiacciato. Per cui se al posto del pulsante si useranno altri sensori con logica inversa, sarà necessario modificare la routine del sensore.

b2
Invece di usare il semplice "INPUT", utilizzare "INPUT_PULLDOWN" oppure "INPUT_PULLUP".

Altro aspetto da tenere presente: ESP32 ha alcuni GPIO (porte) con funzione "touch", ovvero si comportano come interruttori capacitativi: se con un dito si tocca il pin touch o ci si avvicina ad esso, potrebbe comportarsi come se si avesse premuto un pulsante meccanico, introducendo così una certa instabilità nel sistema: a me è accaduto che avvicinando il dito al pulsante, il led collegato cominciasse a lampeggiare, perchè il sistema era diventato instabile. A questo punto, invece di usare il semplice comando "INPUT" per interrogare il sensore, è meglio usare il comando "INPUT_PULLUP" oppure "INPUT_PULLDOWN". Verificare quale sia il migliore al momento. Usando uno di questi comandi, il programma risponde in modo coerente a quanto desiderato.

004
un pulsante KY-004

019
un relè KY-019

Immagine dell'assemblaggio

1p
Immagine della BDS in scala 1:1
Il pulsante KY-004 è inserito sullo zoccolo "DA4";
mentre il relè KY-019 è posto sullo zoccolo "DA3". Vedi il posizionamento corretto.



Il pulsante KY-004 può essere sostituito da un qualsiasi sensore digitale (solo stato "0" oppure "1") con una singola uscita (KY-031, KY-002, KY-020, ecc.), come quelli elencati compatibili con lo zoccolo DA4.
Nel caso si desiderasse inserire per esempio un pulsante non su scheda (come KY-004), è necessario effettuare un collegamento con una resistenza di pull-up, per evitare instabilità del circuito e/o comportamenti imprevedibili. Vedi immagine a destra.

puls
Come collegare un sensore su DA4
Mentre il relè KY-019 può essere sostituito da un normale relè che funzioni a 5v; nel caso, adottare la stessa soluzione indicata per il pulsante, inserendo anche in questo caso una resistenza di pull-up.
Nel caso si desideri sostituire il relè con un led, è necessario inserire una resistenza in serie, per evitare che venga bruciato per eccesso di corrente. Il led ha die terminali: quello più lungo è lanodo, e andrà collegato al pin "S" dello zoccolo "DA3". mentre il cavo più corto, il catodo, andrà collegato ad una resistenza da 220 Ohm. L'altro capo della resistenza si collegherà al pin "-" sempre di "DA3".


led



Clicca qui per visualizzare il programma
Clicca qui per scaricare il programma in formato ".zip"



Nota 1: le periferiche usate in questo programma, come KY-004 e KY-019, oltre che singolarmente, possono essere acquistati anche in economici kit, come "arduino 35 kit" o "arduino 45 kit".
Nota 2: i link relativi alle varie periferiche sono stati inseriti solo a scopo di esempio. Non rappresentano un consiglio di acquisto, nè una garanzia sulla qualità del prodotto. Naturalmente questo vale anche per i progetti seguenti.







Il secondo programma: testare 8 pulsanti e 8 led (o relè)



Il secondo progetto è simile al primo, però usa un modulo di 8 pulsanti, inserito sullo zoccolo "Switch slot" e un modulo da 8 led, che può essere inserito sullo zoccolo "RELAY", oppure direttamente sullo zoccolo "DATA".
Naturalmente nulla vieta di inserire pulsanti o altri sensori su altri zoccoli, come per esempio "BZ1" (GPIO26), DA1 (GPIO17), DA2 (GPIO35); DA3 (GPIO18), DA4 (GPIO27), e così via. Sarà sufficiente variare nel programma le porte dedicate ai vari pulsanti o sensori.
Inoltre è anche possibile sostituire il modulo led con un modulo da 8 relè, anche moduli da 4 relè, ecc. in base alle proprie esigenze e possibilità.
Questo progetto è elementare, perchè premendo un pulsante, si accende il led corrispondente. Tuttavia potrebbe già avere un utilizzo pratico: sostituendo il modulo da otto pulsanti con altrettanti sensori e il modulo led con dei relè, si potrebbe già organizzare un piccolo sistema domotico automatico.
Naturalmente, non essendoci alcun sistema di controllo, deve sempre restare sotto un'attenta osservazione diretta.
Ecco il modulo da otto pulsanti. Esso è collegato allo zoccolo "Switch slot", che a sua volta rimanda allo zoccolo più esterno, che attraverso a otto cavi può essere connesso allo zoccolo "DATA".
Nota: poichè questo modulo non presenta delle resistenze di "pullup", sono state inserite direttamente sulla BDS, per evitare comportamenti instabili o imprevedibili.

8b
Qui invece appare il modulo a otto led, molto compatto. E' necessario fare attenzione, perchè ne esistono due versioni:
  • con anodo (+) comune. I questo caso, al terminale "COM" del modiulo, sarà necessario fornire una tensione +3,3v oppure +5v sul GPIO2;
  • con catodo (-) comune. I questo caso, sarà necessario fornire un collegamento a GND (massa) al terminale "COM" del modulo, sul GPIO2.

8l
Ed infine, l'immagine di un modulo a otto relè, che può gestire periferiche quali lampade, condizionatori, stufe, ecc. Attenzione: la tensione di rete da 230 v può causare gravi danni, anche mortali. Perciò in questo caso affidarsi a professionisti qualificati.
Nota: nel caso si utilizzi una batteria di relè, sia da 2,4,6,o 8 relè, è indispensabile collegare un alimentatore esterno alla presa "PWR" della BDS, che fornisca almeno 5v e la corrente di 1A.
Se si collega la batteria di relè allo zoccolo "RELAY" (H14) automaticamente verrà scelta l'alimentazione a +5v; nel caso invece ci si colleghi allo zoccolo "DATA", è necessario prendere l'alimentazione dal connettore apposito che fornisce +5v. Vedi immagine.

8r



Immagine dell'assemblaggio

8sw1
Immagine dell'assemblaggio dei moduli sulla BDS.
Incorniciato di verse si vede il modulo da 8 led.
La scala è 1:1

Come si vede dall'immagine, il modulo con 8 pulsanti è stato inserito sullo zoccolo blu "Switch slot" H7, mentre otto cavetti sono collegati allo zoccolo blu superiore e si connettono su "DATA".  Ecco la corrispondenza:
zoccolo SWITCH
SW1
SW2
SW3
SW4
SW5
SW6
SW7
SW8
zoccolo DATA
GPIO39
GPIO36
GPIO35
GPIO34
GPIO33
GPIO32
GPIO27
GPIO26

Ed ecco la corrispondenza del modulo 8 led:
modulo LED    
COM
D1
D2
D3
D4
D5
D6
D7
D8  
zoccolo DATA
GPIO2
GPIO4
GPIO5
GPIO12
GPIO13
GPIO14
GPIO15
GPIO16
GPIO17


sw2

Particolare dei collegamenti dei due moduli



sw3aL'immagine in 2D con i collegamenti
Nota : il modulo da 8 led - zoccolo segnato "2" (o quello da 8 relè - zoccolo indicato "3") potrebbe essere inserito anche sullo zoccolo apposito, denominato appunto "RELAY". In questo caso però, sarà necessario connettere con dei cavetti lo zoccolo denominato "1 " con lo zoccolo data. Si è preferito connettere direttamente il modulo da 8 led su DATA per semplicità. Vedi pagina dedicata.

r3
Clicca qui per visualizzare il programma
Clicca qui per scaricare il programma in formato ".zip"





Il terzo programma: un display LVGL, un motore, un led, un buzzer...



In questo programma di test della BDS, si comincia a intuire i vantaggi che essa comporta. Infatti sonp presenti un display LVGL da 2,8" touch (14pin), un led a tre colori (4 pin), un buzzer (mini-altoparlante piezoelettrico, 3 pin), un potenziomentro (3 pin) e un motore elettrico (2 pin). Facendo la somma, per assemblare questo progetto su di una basetta millefori, avremmo dovuto usare  26 cavetti diversi, creando un certo affollamento e conseguente confusione. Invece, dalla foto si vedono solo due cavetti, che servono per alimentare il motore elettrico! Questa pulizia si traduce anche in un notevole risparmio di tempo: inserire sulla BDS i vari componenti richiede meno di un minuto, e senza rischi di errore.


eslQuanti cavetti...
Nota 1: per utilizzare il display LVGL è necessario eseguire una configurazione di base e installare alcune librerie dedicate. Clicca qui per una descrizione sintetica, oppure vai a questa pagina del sito di "randomnerdtutorials:
https://randomnerdtutorials.com/lvgl-esp32-tft-touchscreen-display-ili9341-arduino/
Nota
2: per poter utilizzare anche il motore elettrico, che usa il GPIO0, è necessario inserire sulla BDS un ESP32 a 38 pin, perchèl'ESP32 a 30 pin non possiede questo GPIO.

Il GPIO0 è "alto" all'avvio, per cui se si collega alla BDS il motore elettrico prima di caricare il programma, il motore si avvierà alla massima velocità. Non appena il programma sarà stato trasferito su ESP32, il motore terminerà immediatamente di ruotare.

Il programma in oggetto ha solo uno scopo dimostrativo e non è particolarmente sofisticato. Sul display touch appaiono tre serie di tasti, con le seguenti funzioni:
  • Led ON/Led OFF: premendo il tasto di sinistra (che diventa rosso) si attiva una routine per un led RGB, che mostra in sequenza sette colori, terminando con la luce bianca. Premendo il tasto di destra, (che diventa verde) e la luce bianca si spege, quindi si può riprendere il ciclo.
  • Spk ON/Spk OFF: premendo il tasto di sinistra (che diventa rosso) vengono suonate le prime note di "Per Elisa" di Beethoven. Purtroppo la routine non può essere interrotta, ma dura pochi secondi. Premendo il tasto di destra (che diventa verde), si azzera il ciclo che può essere ripreso.
  • Mtr ON/Mtr OFF: premendo il tasto di sinistra (che diventa rosso), si avvia il motore elettrico. La velocità di rotazione dipende dall'angolo di rotazione del cursore del potenziometro al momento della pressione del tasto.Premendo il tasto di destra (che diventa verde), il motore si arresta. Quindi ruotando la manopola del potenziomentro verso destra o verso sinistra, e poi premendo nuovamente il tasto di sinistra per riavviare il ciclo, si può aumentare o ridurre la velocità del motore. Quindi la rotazione del potenziometro non ha effetto quando il motore è attivo. Nota: a volte sembra che avviando il motore non si ottenga alcun effetto. Questo significa che la tensione è troppo bassa: terminare il ciclo, ruotare di qualche grado la manopola e riprovare.



Le librerie necessarie:

Nota: per quanto possibile, scaricare sempre le librerie più aggiornate.
Solo in caso non le trovaste, utilizzare quelle proposte nel sito.
Clicca qui per imformazioni sull'installazione delle librerie

Attenzione: per usare il display LVGL da 2.8" non è sufficiente caricare le librerie necessarie, ma è richiesta anche una piccola configurazione. Clicca qui per visualizzare la pagina con le info.

TFT_eSPI.h

lvgl.h



3pr
Il terzo programma dimostrativo, con un display, motore, led, potenziometro, buzzer.



Approfondimento degli aspetti tecnici.



Cominciamo dal componente più complesso, ma anche più interessante:
il display touch LGVL da 2,8"
. Per funzionare correttamente, attivando anche la preziosa funzione touch, è necessario collegare nella giusta sequenza 14 pin tra di esso ed ESP32. Nel nostro caso non ci sarà alcun problema, perchè il connettore denominato "Display LVGL" è già perfettamente sincronizzato tra display e microcontroller, oltre che con il programma di test. All'avvio appariranno tre serie di due pulsanti, le cui funzioni sono già state spiegate precedentemente.


l28
Il display LVGL touch da 2,8"
Qui puoi vedere la sequenza dei pin, guardando la BDS dall'alto in basso:


Descrizione
pin 1: 3,3v
pin2: GND
pin 3: CS
pin 4: reset
pin 5: D/C
pin 6: SDI
pin 7: SCK
pin 8: LED
pin 9: SDO
pin 10: T-CLK
pin 11: T-CS
pin 12: T_DIN
pin 13: T_OUT
pin 14: T_IRQ
collegamento su ESP32
+3,3v
GND
GPIO15
EN
GPIO2
GPIO12
GPIO14
GPIO21
GPIO12
GPIO25
GPIO33
GPIO32
GPIO39
GPIO36
lvgl2
Il connettore su cui
si inserisce il display



Nota 1: come già accennato in altri punti di approfondimento, le porte usate per il display LVGL, non sono state utilizzate per altri zoccoli, per evitare conflitti. Certamente questo ha influito sulla disponibilità di GPIO per altre attività, ma poichè ESP32 ha un buon numero di porte disponibili, spero che questo non sia una limitazione troppo grave. Purtroppo quando si intraprende un progetto come questo è necessario fare delle scelte, e in questo caso ho privilegiato la possibilità di usare massicciamente il diaplay, che mi sembra particolarmente utile.
Naturalmente quando non lo si utilizza, le sue porte dedicate diventano disponibili, e si possono usare dallo zoccolo predisposto per il display, sia dallo zoccolo universale "DATA".

Nota 2: l'unica porta che potrebbe essere utilizzata anche per altre attività è GPIO21, che nella lista appare in grassetto. Questo accade perchè GPIO21 è la porta standard di data (SDA) quando si utilizza il protocollo I2C. Fortunatamente per ESP32 (a differenza di Arduino, ESP01 ed ESP8266), possiamo utilizzare qualsiasi altra porta per questa funzione. E' sufficiente dichiararla nel programma.
Infatti quando si utilizzano gli zoccoli dedicati principalmente al protocollo I2C, si ha sempre la possibilità di scegliere  GPIO27 al posto di GPIO21, intervenendo sul jumper "SDA" ed evitando così ogni conflitto con il display.



Il potenziometro da 10K è inserito sullo zoccolo "TRM1". Esso serve in questo caso per regolare la velocità di rotazione del motore elettrico. Il piedino centrale è connesso su GPIO34, che è solo utilizzabile come ingresso, mentre i due piedini estremi sono connessi da una parte a massa (GND) e sull'altro a +3,3v. Quando il cursore è ruotato tutto a sinistra, verso massa, la tensione presente su GPIO34 è 0 (motore fermo); quando invece è ruotato tutt o destra, su GPIO34 la tensione supera i 3v (motore alla massima velocità di rotazione).

Nota 1: il programma è strutturato in modo tale che la tensione presente sul piedino GPIO34 viene letta solamente quando si preme il tasto "Mtr ON". per cui per passare da una velocità all'altra, è necessario premere "Mtr OFF", variare la rotazione del cursore del potenziometro, premere "Mtr ON" e così via.

potUn potenziometro



Un motore elettrico. Esso è alimentato non direttamente da ESP32, ma attraverso un mos-fet, in modo che una tensione eccessiva non danneggi il microcontroller. Inoltre un diodo evita che extracorrenti prodotte dal motore quando continua a girare non danneggi ESP32. Pertanto è integrato nella BDS un piccolo ma sofisticato circuito di controllo del motore. Esso è collegato allo zoccolo MT1.

Nota1: lo zoccolo MT1 può essere connesso, attraverso il jumler "J5", a GPIO26 oppure GPIO0. Poichè GPIO26 è già connesso al buzzer, è stato utilizzato GPIO0, che è presente solo su ESP32 a 38 pin.

Nota 2: il motore può essere alimentato, modificando il jumper "J2", o a +5 v (indipendentemente dalla tensione fornita dall'alimentatore), oppure alla tensione fornita direttamente dall'alimentatore, che può giungere fino a 12v (meglio non superare i 9v). Quindi fare attenzione a non alimentare il motore elettrico con una tensione eccessiva.


motor
Un motore elettrico



Il buzzer (altoparlante piezoelettrico) KY-012 oppure KY-006. Viene inserito sullo zoccolo BZ1, collegato al piedino GPIO26. KY-006 non è amplificato, mentre KY-012 lo è, fornendo un livello sonoro più elevato; tuttavia entrambi sono adeguati per i nostri scopi. Al posto del buzzer è possibile collegare un amplificatore sul jack standard da 3,5 mm.
Premendo "Spk ON", si ascolteranno le prime note di "Per Elisa".

buzz
il buzzer KY-006



Un led a tre colori (KY-009 oppure KY-016) è stato inserito su di uno zoccolo non specifico per il led: RFID1. Come si vede dall'immagine, i quattro piedini sono contrassegnati (da sinistra a destra): B,G, R, -.
Ecco il loro collegamento su RFID1:
B -> GPIO5
G -> GPIO18
R -> GPIO23
- (GND) ->GPIO19.
E' possibile inserire al posto di KY-009/KY-016 anche un leda tre colori non su zoccolo, come quello visualizzato nella seconda immagine, però sarà necessario inserire ad ogni piedino (tranne "-") con una resistenza da 220 Ohm, per evitare che il led bruci rapidamente.
Premendo il tasto "Led ON", il led mostrerà in rapida sequenza 7 colori.

led3
KY-009  -  KY-016

3c
Led a 3 colori
con resistenze da 220Ohm



Clicca qui per visualizzare il programma
Clicca qui per scaricare il programma in formato  ".zip"


Per contatti: info@ethicaldiy.org