Introduzione
LED dimmerabile e misurazioni ambientali con l’Arduino Nano ESP32 collegato in Cloud. Dopo aver acquisito le basi nel nostro precedente articolo Controllo indipendente di due LED con Arduino Nano ESP32: un’introduzione pratica, è giunto il momento di fare qualcosa di più complesso. In questo secondo articolo sull’Arduino Nano ESP32, verrai guidato attraverso l’interfacciamento con l’Arduino Cloud per il controllo di due LED (come nel caso precedente uno che può essere solo acceso o spento e l’altro di cui si potrà regolare la luminosità tramite segnale PWM) e il monitoraggio delle condizioni ambientali con un sensore DHT22 (quindi la misurazione della temperatura e dell’umidità ambientali). Tramite la dashboard che creeremo sul Cloud potremo comandare i due LED e potremo visualizzare i valori di temperatura e umidità misurati nell’ambiente.
Come al solito, per lo sviluppo del progetto, useremo l’ottimo IDE PlatformIO.
Arduino Nano ESP32: un microcontrollore potente e versatile
Introduzione:
L’Arduino Nano ESP32 è una scheda di sviluppo microcontrollore basata sul chip ESP32-S2FH4. Offre un’ampia gamma di funzionalità in un formato compatto e conveniente, rendendola ideale per una varietà di progetti IoT e embedded.
Caratteristiche principali:
- Microcontrollore ESP32-S2FH4: CPU dual-core Tensilica Xtensa LX106 a 240 MHz, 4 MB di Flash SPI, 200 KB di SRAM, 802.11 b/g/n Wi-Fi e Bluetooth 4.2 BLE.
- Connettività integrata: Wi-Fi e Bluetooth 4.2 BLE per la comunicazione wireless con altri dispositivi e Internet.
- Ampia gamma di I/O: 14 pin GPIO, 1 ADC a 12 bit, 1 DAC a 8 bit, SPI, I2C, UART e JTAG.
- Supporto per schede di espansione: Compatibile con le schede di espansione Arduino Nano.
- Alimentazione: Alimentazione tramite USB o 5V esterno.
- Dimensioni compatte: 45 mm x 18 mm x 7 mm.
Vantaggi:
- Potente e versatile: L’ESP32-S2FH4 offre prestazioni elevate e un’ampia gamma di funzionalità.
- Connettività integrata: Wi-Fi e Bluetooth 4.2 BLE per la comunicazione wireless.
- Ampia gamma di I/O: Adatto a una varietà di sensori, attuatori e altri dispositivi.
- Supporto per schede di espansione: Espandi le funzionalità con le schede di espansione Arduino Nano.
- Facile da usare: Compatibile con l’IDE di Arduino e con il linguaggio di programmazione Arduino.
Applicazioni:
- IoT: Progetti di domotica, wearable tech, monitoraggio ambientale e industriale.
- Robotica: Controllo di robot e droni.
- Elettronica indossabile: Orologi intelligenti, fitness tracker e altri dispositivi indossabili.
- Prototipazione rapida: Crea rapidamente prototipi di dispositivi elettronici.
L’Arduino Nano ESP32 è una potente e versatile scheda di sviluppo microcontrollore che offre un’ampia gamma di funzionalità in un formato compatto e conveniente. È una scelta eccellente per una varietà di progetti IoT e embedded.
Cosa è la tecnica PWM (che ci consente di avere un LED dimmerabile)
Il PWM, acronimo di Pulse Width Modulation, è una tecnica utilizzata per modulare la larghezza degli impulsi di un segnale periodico, generando una forma d’onda con un ciclo di lavoro variabile.
Il PWM varia il rapporto tra il tempo in cui il segnale è ad un livello alto rispetto al periodo totale del segnale. Questo permette di controllare la potenza consegnata a un carico senza dover variare la tensione di alimentazione. Il PWM viene implementato attraverso l’uso di un timer hardware all’interno del microcontrollore. Il timer genera un segnale periodico a una frequenza costante, mentre il duty cycle del segnale (ovvero il rapporto tra il tempo in cui il segnale è alto rispetto al periodo) viene regolato in base alle necessità.
In pratica, il segnale PWM è una forma d’onda rettangolare periodica in cui il rapporto tra il tempo in cui il segnale è ad un livello alto (ON) e il periodo totale del segnale determina l’intensità o la potenza del segnale. Visivamente, un segnale PWM può essere rappresentato come una serie di impulsi rettangolari. Il periodo del segnale corrisponde alla lunghezza di un ciclo completo, mentre il duty cycle (rapporto di lavoro) rappresenta la frazione di tempo in cui il segnale è ad un livello alto durante ogni ciclo. Il duty cycle può variare da 0% (il segnale è sempre basso) al 100% (il segnale è sempre alto).
Quando il duty cycle è al 50%, il segnale ha un rapporto di 1:1 tra il tempo in cui è alto e il tempo totale del periodo, e appare come una forma d’onda rettangolare con la stessa durata del periodo e la stessa durata sia nel semiperiodo in cui il segnale è alto che in quello in cui è basso.
Se il duty cycle è inferiore al 50%, il segnale ha un periodo di lavoro più breve rispetto al periodo totale, e se è superiore al 50%, il periodo di lavoro è più lungo.
Il PWM trova numerose applicazioni in diversi settori, tra cui:
- Controllo della velocità dei motori: regolando il duty cycle del segnale PWM, è possibile controllare la velocità di rotazione dei motori elettrici.
- Controllo di luminosità delle luci LED: modulando il duty cycle del segnale PWM, è possibile controllare l’intensità luminosa dei LED.
- Controllo di servomotori: il PWM viene utilizzato per controllare la posizione di servomotori in applicazioni robotiche e di modellismo.
- Audio digitale: nel campo dell’audio digitale, il PWM è utilizzato per generare segnali audio a frequenze variabili.
I principali vantaggi del PWM includono l’efficienza energetica, la semplicità di implementazione e la capacità di controllare con precisione la potenza erogata a un carico senza dover variare la tensione di alimentazione.
Il PWM rappresenta quindi una tecnica fondamentale per il controllo di dispositivi elettronici e trova ampio impiego in una vasta gamma di applicazioni industriali, commerciali e di hobbistica.
Cos’è il DHT22
Il DHT22 è un sensore digitale di temperatura e umidità progettato per misurare con precisione questi parametri ambientali. Esso utilizza un sensore di umidità capacitivo e un termistore per misurare rispettivamente l’umidità e la temperatura dell’ambiente circostante. Quando viene alimentato, il sensore acquisisce i dati e li converte in segnali digitali che possono essere letti da un microcontrollore o da un altro dispositivo elettronico.
Il DHT22 è caratterizzato da una buona precisione e stabilità nelle misurazioni di temperatura e umidità. Ha un’ampia gamma di temperatura operativa e una precisione dichiarata nelle misurazioni. Il range di temperature misurate va da -40°C a +80°C (con risoluzione di 0.1°C) mentre quello di umidità relativa va da 0% a 100% (con risoluzione dello 0.1%). Inoltre il DHT22 è in grado di effettuare una misura completa in circa 2 secondi.
Il sensore ha solitamente tre pin per l’interfacciamento: uno per l’alimentazione, uno per la massa e uno per la trasmissione dei dati digitali. Utilizza un protocollo seriale di comunicazione per trasmettere le letture al dispositivo di controllo. I dati sono direttamente digitali quindi non c’è necessità di acquisirli con un convertitore analogico-digitale.
Il DHT22 è ampiamente utilizzato in progetti di monitoraggio ambientale, sistemi di controllo del clima, stazioni meteo fai-da-te e altri dispositivi che richiedono la misurazione precisa della temperatura e dell’umidità.
Vantaggi: Tra i vantaggi del DHT22 ci sono le sue dimensioni compatte, la facilità di utilizzo, la bassa potenza richiesta e la relativa economicità rispetto ad altri sensori simili.
Limitazioni: Anche se preciso, il DHT22 può essere soggetto a leggere fluttuazioni di misurazione in ambienti con elevate variazioni di temperatura o umidità. Inoltre, la sua interfaccia digitale può richiedere una certa attenzione nella programmazione e nell’interpretazione dei dati letti.
Ma cos’è Arduino Cloud?
Arduino Cloud è un servizio online sviluppato da Arduino, l’azienda italiana nota per la sua piattaforma di prototipazione open-source. Lo scopo principale di Arduino Cloud è quello di fornire un modo semplice ed efficace per connettere e controllare dispositivi basati su Arduino da remoto attraverso Internet. È parte dell’ecosistema Arduino IoT (Internet of Things) che mira a consentire agli sviluppatori di creare progetti IoT in maniera facile ed estremamente intuitiva utilizzando le risorse di Arduino. Inoltre è possibile utilizzare anche altri tipi di dispositivi (non strettamente Arduino) come, per esempio, le board ESP8266 e ESP32.
Ecco alcune sue caratteristiche:
- Connessione Remota: Arduino Cloud offre un modo per connettere vari dispositivi a Internet in modo che possano essere monitorati e controllati da qualsiasi luogo tramite una Dashboard online o un’applicazione mobile;
- Controllo e Monitoraggio: una volta che i dispositivi sono connessi, puoi utilizzare l’interfaccia online per monitorare vari sensori e variabili sul tuo dispositivo e controllare i suoi attuatori. Ad esempio, potresti leggere i dati da un sensore di temperatura e umidità e attivare un motore o un relè collegato al tuo dispositivo;
- Automazione: Arduino Cloud ti consente di creare regole e scenari di automazione in modo che il tuo dispositivo possa rispondere a determinate condizioni o attivare azioni specifiche. Questo è utile per creare sistemi di automazione domestica o progetti IoT avanzati;
- Sicurezza: Arduino Cloud generalmente adotta misure di sicurezza per garantire che le connessioni tra i dispositivi e il servizio siano protette. Ciò può includere crittografia dei dati e autenticazione sicura;
- Supporto per diversi dispositivi: Arduino Cloud è compatibile con una varietà di dispositivi e schede.
Di quali componenti abbiamo bisogno?
La lista dei componenti non è particolarmente lunga:
- una breadboard per connettere la Arduino Nano ESP32 agli altri componenti
- alcuni fili DuPont (maschio – maschio, maschio – femmina, femmina – femmina)
- due resistori da 100Ω
- un resistore da 4.7kΩ
- un sensore DHT22
- due LED rossi
- e, ovviamente, una Arduino Nano ESP32 !
Realizzazione del progetto
Lo schema elettrico
Prima di realizzare il circuito vero e proprio diamo un’occhiata al pinout della board:
Il pinout del sensore DHT22:
Useremo i GPIO D2 e D5 per collegare i LED e il GPIO D7 per collegare il DHT22.
A questo punto puoi procedere alla realizzazione del circuito seguendo lo schema di collegamento più sotto.
I LED sono collegati alla Arduino Nano ESP32 tramite dei resistori da 100Ω per limitare la corrente che li attraversa ed evitare di bruciarli (e di bruciare le uscite digitali a cui sono collegati).
Il LED ha due terminali (chiamati anodo e catodo) e, come tutti i diodi, è un componente che ha una sua polarità: fa passare la corrente quando è polarizzato direttamente (cioè la tensione all’anodo è maggiore di quella al catodo) e blocca la corrente quando è polarizzato inversamente (cioè la tensione all’anodo è minore di quella al catodo). La tensione tra anodo e catodo, che indicheremo con Vd, varia a seconda del colore della luce emessa. In particolare abbiamo che:
- Vd = 1.8 V per il LED rosso
- Vd = 1.9 V per il LED giallo
- Vd = 2 V per il LED verde
- Vd = 2 V per il LED arancio
- Vd = 3 V per il LED blu
- Vd = 3 V per il LED bianco
Di seguito lo schema di montaggio realizzato con Fritzing:
Come facciamo ad identificare l’anodo e il catodo del LED? Lo facciamo osservando i suoi terminali. Il più lungo corrisponde all’anodo. Inoltre il corpo del LED presenta un appiattimento in un punto del bordo che indica che il terminale vicino è il catodo.
Quindi, se un LED non si accende è possibile che sia stato collegato al contrario. In questo caso, per farlo funzionare, è sufficiente invertirne i collegamenti.
Come si calcola la resistenza da collegare al LED?
Nota Bene: questo paragrafo tratta il calcolo della resistenza di limitazione in maniera teorica e richiede un minimo di conoscenza delle basi dell’Elettrotecnica. Pertanto non è fondamentale per la comprensione del resto del progetto e può essere saltato dal lettore non interessato a tali aspetti teorici.
Come abbiamo già detto, il resistore tra il generico GPIO e il LED serve a limitare la corrente che attraversa il LED. Ma come possiamo calcolare il suo valore di resistenza? Ci viene in soccorso la Legge di Ohm la quale dice che la differenza di potenziale ai capi di un resistore (cioè la tensione misurata agli estremi del resistore) è proporzionale alla corrente I che lo attraversa e la costante di proporzionalità è proprio il valore di resistenza del resistore R:
V2 - V1 = RI
Nota Bene: per amor di precisione bisogna puntualizzare che mentre il resistore è il componente fisico (l’oggetto vero e proprio), la resistenza è il suo valore. Quindi è improprio (anche se accade di frequente) chiamare il resistore col termine resistenza.
Possiamo vedere la Legge di Ohm su un semplice circuito costituito da un generatore di tensione (il cerchio a sinistra) e un resistore:
La tensione (o differenza di potenziale) V2 – V1 impressa dal generatore di tensione sul resistore è uguale al prodotto di R per I.
Vediamo ora uno schema leggermente più complesso dove sono presenti il solito generatore di tensione, il resistore e un LED rosso:
Nel nostro caso la Vg rappresenta la tensione presente all’uscita digitale della Arduino Nano ESP32 quando è HIGH ed è pari quindi a 3.3V.
La Vd è la tensione ai capi del diodo (tra anodo e catodo) quando questo è polarizzato direttamente (cioè quando fa scorrere la corrente). Avendo scelto un LED rosso, sappiamo, dalla tabella precedente, che Vd = 1.8V.
Dobbiamo determinare il valore R del resistore. Abbiamo ancora una incognita: il valore della corrente I che deve scorrere nel circuito quando il pin è in stato HIGH.
Nota Bene: quando il pin digitale è nello stato LOW la sua tensione (cioè la Vg) è nulla, ne consegue che anche la corrente I nel circuito è nulla.
I LED in genere non sopportano correnti maggiori di 20mA, quindi imponiamo una corrente massima di 15mA per stare sul sicuro.
Per la Legge di Kirchhoff alle maglie (detta anche Legge di Kirchhoff delle tensioni) , abbiamo che:
Vg - Vr - Vd = 0
Da cui ricaviamo che:
Vr = Vg - Vd
Passando ai valori reali, abbiamo che:
Vr = 3.3V - 1.8V
Ne risulta che:
Vr = 1.5V
Ma, per la Legge di Ohm, abbiamo che:
Vr = RI
da cui:
R = Vr / I
Sostituendo i valori reali:
R = 1.5V / 0.015A
Ne deriva un valore di R pari a 100Ω.
Preparazione dell’ambiente sul Cloud
A questo punto il dispositivo è pronto. Dobbiamo ora preparare tutto l’ambiente su Arduino Cloud. Se non lo hai ancora fatto, creati un account sulla piattaforma. A questo proposito puoi seguire passo passo il video seguente:
Una volta fatto il login bisogna collegare l’Arduino Nano ESP32 alla USB del computer, aggiungere il device di tipo Arduino e aspettare che venga completata la procedura di riconoscimento automatico.
In questo video abbiamo creato:
- l’oggetto (thing) chiamato Arduino_Nano_ESP32_Thing con le sue variabili ledOnOff (sia come Name che come Declaration) di tipo boolean, Read & Write e con periodicità di 1 secondo, ledPWM (sia come Name che come Declaration) di tipo integer, Read & Write e con periodicità di 1 secondo, temperature (sia come Name che come Declaration) di tipo float, Read Only e con periodicità di 1 secondo, humidity (sia come Name che come Declaration) di tipo float, Read Only e con periodicità di 1 secondo
- il device di nome Arduino_Nano_ESP32_Device di tipo Arduino Nano ESP32;
- la dashboard di nome Arduino_Nano_ESP32_Dashboard con un interruttore che comanda il LED ON/OFF, uno slider che comanda il LED PWM e due indicatori, uno per la temperatura e l’altro per l’umidità.
NOTA BENE: è importante notare che nel video, al minuto 1:30 , ho scaricato un pdf che contiene i parametri di collegamento al device. Essi sono chiamati Device ID e Secret Key e ci serviranno in seguito. Quindi scarica anche tu questo pdf e conservalo da qualche parte.
Ovviamente i parametri Device ID e Secret Key sono propri di ciascun device, quindi cambiano al variare del device.
Il Cloud di Arduino ha creato la struttura vuota dello sketch che noi prenderemo e trasferiremo su PlatformIO per poterlo riempire con le funzionalità che ci servono. In particolare, ha creato lo sketch vero e proprio che è un file con estensione .ino e un file chiamato thingProperties.h.
Lo sketch
Creiamo il progetto PlatformIO
Abbiamo già visto la procedura di creazione di un progetto PlatformIO nell’articolo Come creare un progetto per NodeMCU ESP8266 con PlatformIO. Puoi seguire la guida ma al momento di scegliere la piattaforma dovrai scegliere Arduino Nano ESP32 nel campo Board del wizard, come nell’immagine sotto:
Non installare le librerie indicate in quell’articolo ma installa , sempre seguendo la solita procedura, la libreria Arduino_ConnectionHandler:
e la libreria ArduinoIoTCloud:
Installa poi la libreria DHT sensor library by Adafruit:
la libreria Adafruit Unified Sensor by Adafruit:
e la libreria Arduino_ESP32_OTA by Arduino:
Ora modifica il file platformio.ini per aggiungere queste due righe:
monitor_speed = 115200
upload_speed = 921600
e aggiungi la riga WIFI tra le lib_deps in modo che abbia un aspetto del genere:
[env:arduino_nano_esp32]
platform = espressif32
board = arduino_nano_esp32
framework = arduino
monitor_speed = 115200
upload_speed = 921600
lib_deps =
arduino-libraries/Arduino_ConnectionHandler@^0.8.1
arduino-libraries/ArduinoIoTCloud@^1.15.1
WIFI
arduino-libraries/Arduino_ESP32_OTA@^0.2.0
adafruit/DHT sensor library@^1.4.6
adafruit/Adafruit Unified Sensor@^1.1.14
Ora scarica il progetto dal link qui sotto:
Arduino Nano ESP32 on Cloud
Decomprimi il progetto appena scaricato e sovrascrivi il file main.cpp nella cartella src del progetto creato prima.
Poi, dalla cartella include del progetto appena scaricato e decompresso, prendi il file thingProperties.h e copialo nella cartella include del progetto creato prima.
A questo punto dovrai editare questo file in modo da collegarlo al cloud:
const char DEVICE_LOGIN_NAME[] = "YYYYYYYYYYYYYYYYYYYYYYYYYYYY";
const char SSID[] = SECRET_SSID; // Network SSID (name)
const char PASS[] = SECRET_OPTIONAL_PASS; // Network password (use for WPA, or use as key for WEP)
const char DEVICE_KEY[] = SECRET_DEVICE_KEY; // Secret device password
Come vedi, in questa sezione ci sono alcuni parametri da impostare.
Il primo parametro (DEVICE_LOGIN_NAME) lo trovi nel pdf che hai scaricato quando hai creato l’oggetto (trovi il riferimento nel video precedente). Nel pdf il parametro è chiamato Device ID.
I parametri SECRET_SSID e SECRET_OPTIONAL_PASS sono, rispettivamente, il nome e la password della tua rete WiFi. Quindi, al posto di SECRET_SSID metterai il nome della tua rete tra doppi apici (“) e al posto di SECRET_OPTIONAL_PASS metterai la password della tua rete (sempre fra doppi apici).
L’ultimo parametro, SECRET_DEVICE_KEY, lo trovi sempre nel pdf che hai scaricato dalla piattaforma col nome Secret Key.
Quindi la sezione in oggetto dovrebbe avere un aspetto del genere:
const char DEVICE_LOGIN_NAME[] = "Device ID from the downloaded pdf";
const char SSID[] = "my_wifi_ssid"; // Network SSID (name)
const char PASS[] = "my_wifi_password"; // Network password (use for WPA, or use as key for WEP)
const char DEVICE_KEY[] = "Secret Key from the downloaded pdf"; // Secret device password
Come puoi vedere, ho messo nel campo DEVICE_LOGIN_NAME il valore preso dal pdf alla voce Device ID (in questo caso Device ID from the downloaded pdf), nel campo SSID l’SSID della mia rete WiFi (in questo caso my_wifi_ssid), nel campo PASS la password della mia rete WiFi (in questo caso my_wifi_password) e nel campo DEVICE_KEY il valore preso dal pdf alla voce Secret Key.
Analizziamo ora lo sketch. All’inizio troviamo l’inclusione delle librerie necessarie (tra cui il file thingProperties.h che contiene informazioni sul nostro setup relativo al Cloud):
#include <Arduino.h>
#include "thingProperties.h"
#include "Update.h"
#include <DHT.h>
Viene poi definito il GPIO su cui è collegato il sensore, il tipo di sensore (DHT22) e viene istanziatol’oggetto dht che lo gestisce:
#define DHTPIN D7
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
Vengono poi definiti i GPIO per il pilotaggio dei due LED:
const int led1Pin = D2; // LED 1 connected to pin D2
const int led2Pin = D5; // LED 2 connected to pin D5
e le variabili che temporizzano le misurazioni da parte del DHT22:
unsigned long measureDelay = 3000; // NOT LESS THAN 2000!!!!!
unsigned long lastTimeRan;
Il tempo di misura del DHT22 è di 2 secondi quindi è meglio non scendere sotto questo tempo.
Incontriamo poi la funzione setup:
// Initialize serial and wait for port to open:
Serial.begin(115200);
// This delay gives the chance to wait for a Serial Monitor without blocking if none is found
delay(1500);
//start dht sensor:
dht.begin();
// Set LED pins as output
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
// Defined in thingProperties.h
initProperties();
// Connect to Arduino IoT Cloud
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
/*
The following function allows you to obtain more information
related to the state of network and IoT Cloud connection and errors
the higher number the more granular information you’ll get.
The default is 0 (only errors).
Maximum is 4
*/
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
Tale funzione inizializza la porta seriale, inizializza il sensore, setta i GPIO dei LED come OUTPUT, inizializza la parte legata all’Arduino Cloud.
Incontriamo poi la funzione loop. Essa contiene l’istruzione che fa l’aggiornamento dell’Arduino Cloud e un blocco che, ogni measureDelay secondi legge i valori di temperatura ed umidità dal DHT22:
ArduinoCloud.update();
// measurements every measureDelay ms
if (millis() > lastTimeRan + measureDelay) {
humidity = dht.readHumidity();
temperature = dht.readTemperature();
lastTimeRan = millis();
}
Terminano lo sketch le due funzioni onPwmLEDChange e onOnoffLEDChange che gestiscono il comportamento dei due LED (la prima varia la luminosità di uno dei due LED, la seconda accende o spegne l’altro LED) in base a come agiamo sui comandi (interruttore e slider) presenti sulla dashboard del Cloud:
void onPwmLEDChange() {
// Add your code here to act upon PwmLED change
analogWrite(led2Pin, ledPWM);
}
void onOnoffLEDChange() {
// Add your code here to act upon OnoffLED change
digitalWrite(led1Pin, ledOnOff);
}
A questo punto non ti ti rimane che caricare lo sketch sulla board e andare sulla Dashboard per comandare i LED e leggere i valori misurati dal sensore.
AVVISO IMPORTANTE: può capitare, almeno come è capitato a me per il primo caricamento, di ricevere un errore di questo tipo:
dfu-util: Cannot open DFU device 2341:0364 found on devnum 10 (LIBUSB_ERROR_ACCESS)
dfu-util: No DFU capable USB device available
Io uso una distribuzione Linux (in particolare una Fedora) e quindi ho dovuto cercare una soluzione per il mio sistema.
Nel caso si stia quindi usando Linux e dovesse apparire l’errore citato, bisogna creare un file di nome 99-platformio-udev.rules nella cartella /etc/udev/rules.d/ dando il comando:
sudo touch /etc/udev/rules.d/99-platformio-udev.rules
e poi, sempre su terminale dare il comando :
curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core/develop/platformio/assets/system/99-platformio-udev.rules | sudo tee /etc/udev/rules.d/99-platformio-udev.rules
Fatto questo è necessario riavviare udev (o riavviare il pc) con uno di questi due metodi alternativi:
sudo service udev restart
oppure
sudo udevadm control --reload-rules
sudo udevadm trigger
Per un maggiore approfondimento ti invito a consultare la pagina https://docs.platformio.org/en/latest/core/installation/udev-rules.html#platformio-udev-rules
Nel caso il problema si dovesse presentare su Windows, è necessario installare i driver appropriati secondo quanto riportato in questo link https://docs.espressif.com/projects/esp-idf/en/stable/esp32s2/api-guides/dfu.html#:~:text=The%20reason%20for%20No%20DFU,is%20not%20in%20bootloader%20mode. al paragrafo USB Drivers (Windows Only).
Video del funzionamento
Segue un video dimostrativo del funzionamento del dispositivo:
Newsletter
Se vuoi essere aggiornato sui nuovi articoli, iscriviti alla newsletter. Prima dell’iscrizione alla newsletter leggi la pagina Privacy Policy (UE)
Se ti vuoi disiscrivere dalla newsletter clicca sul link che troverai nella mail della newsletter.