El ESP32 cuenta con un módulo de hardware de generación de números aleatorios (RNG Random Number Generator) que permite generar números aleatorios de alta calidad.
La generación de números aleatorios es una tarea común en la programación, pero es especialmente importante en las aplicaciones asociadas a seguridad y criptografía.
El módulo RNG del ESP32 utiliza el ruido del subsistema RF de WiFi y Bluetooth para generar números aleatorios verdaderos, que son adecuados para uso en aplicaciones criptográficas.
Si ambos subsistemas están deshabilitados el módulo RNG del ESP32 simplemente genera números pseudo-aleatorios. Estos no deben usarse para funciones de las que dependa la seguridad.
Cómo generar números aleatorios en ESP32
Para utilizar el módulo RNG del ESP32 en nuestro código, podemos generar un número aleatorio utilizando la función esp_random()
, que devuelve un entero de 32 bits (entre 0 y 4294967295).
void setup()
{
Serial.begin(115200);
}
void loop()
{
auto randomNumber = esp_random();
Serial.println(randomNumber);
delay(2000);
}
Sin embargo, en la adaptación del ESP32 al entorno de Arduino han sido lo suficientemente inteligentes para modificar la función Random()
de Arduino, para que internamente use esp_random()
Por lo que, a efectos prácticos, podemos generar números aleatorios de la misma forma que haríamos en un Arduino “convencional”. Por ejemplo así.
void setup()
{
Serial.begin(115200);
}
void loop()
{
auto randomNumber0_10 = random(10); // numero aleatorio entre 0-10
auto randomNumber10_20 = random(10, 20); // numero aleatorio entre 10-20
Serial.println(randomNumber0_10);
Serial.println(randomNumber10_20);
delay(1000);
}
Internamente estaremos usando esp_random()
, por lo que igualmente estaremos aprovechando el núcleo aleatorio del ESP32.