ESP32 (11) – Candela led

luca 19/02/2017 2

Dopo aver pubblicato il precedente articolo, ho ricevuto alcuni commenti che mi chiedevano a cosa potesse servire un generatore di numeri random come quello incluso nel chip esp32.

I numeri random sono molto utilizzati in crittografia e la bontà di un generatore di numeri random è fondamentale per garantire elevati livelli di sicurezza, come ben spiegato in questo articolo di Cloudflare. Ecco perché Espressif ha deciso di includere tale generatore come periferica hardware all’interno del proprio chip esp32.

Oggi però voglio mostrarvi un utilizzo più frivolo dei numeri random: utilizzeremo infatti tali numeri per accendere/spegnere un led, simulando così una fiamma che arde in maniera casuale.

Vi ho già illustrato in un altro articolo le funzioni che il framework ci mette a disposizione per fare I/O base, quindi il sorgente di questo esempio (sempre disponibile su Github) dovrebbe essere facilmente comprensibile.

Il led può essere collegato ad un pin a scelta: tramite menuconfig è possibile indicare il pin utilizzato. Per limitare la corrente, ho collegato in serie una resistenza da 100ohm:

esp-led01

I numeri random generati vanno da 0 a 4294967296 (il registro è infatti a 32bit). Ho quindi dovuto scalare tali numeri in modo che l’intervallo di accensione/spegnimento dei led fosse compreso tra 50 e 500ms (4294967296 / 9544371 fa circa 450):

uint32_t getRandomDelay() {
  uint32_t random = esp_random();
  return 50 + random / 9544371;
}
I numeri random hanno una distribuzione uniforme; questo significa che ogni numero all’interno dell’intervallo 0-2^32 ha la medesima possibilità di essere generato. Il metodo sopra utilizzato non è la modalità matematicamente più esatta per scalare una distribuzione uniforme, ma per la finalità – accendere un led – direi che è sufficiente ;)

Ecco l’effetto finale:

 

2 Comments »

  1. Eduard 27/07/2017 at 16:41 - Reply

    Hi Luca! First of all thank you for the great tutorials!

    I just built and flashed the example and work as expected. It’s just that I don’t quite understand the esp_random() function. Could you please explain it in more detail?

    Thanks again!

    • luca 28/07/2017 at 12:51 - Reply

      hi, that is a built-in (in the ESP-IDF framework) function to use the hardware number generator and obtain a random value.

Leave A Response »

Questo sito usa i cookie per poterti offrire una migliore esperienza di navigazione maggiori informazioni

Questo sito utilizza i cookie per fonire la migliore esperienza di navigazione possibile. Continuando a utilizzare questo sito senza modificare le impostazioni dei cookie o clicchi su "Accetta" permetti al loro utilizzo.

Chiudi