ESP32-S3 内置的真随机数发生器(RNG)😎
引言 📚
在许多应用中,随机数发生器(RNG)是必不可少的。无论是在密码学🔒、游戏🎮、模拟🧪或其他领域,随机数都有着广泛的用途。ESP32-S3,作为一款高级集成的Wi-Fi和蓝牙双模系统级芯片(SoC),内置了一个真随机数发生器(RNG)。本文将详细介绍ESP32-S3的RNG及其应用。
ESP32-S3 真随机数发生器(RNG)🎲
ESP32-S3的RNG是基于硬件的,它利用了数字电路中的热噪声来产生随机数。这种噪声是由晶体管的随机电子运动产生的,这种运动是真正的随机过程,因此产生的随机数也是真正的随机数。
使用ESP-IDF编程框架,可以很容易地在ESP32-S3上使用RNG。
1️⃣得到随机数 🎰
#include "esp_system.h"
#include "esp_log.h"
void app_main(void)
{
//获得随机数
unsigned int random = esp_random();
ESP_LOGI("randomNumber", "%u", random);
}
在这里esp_random()
函数被用来生成一个32位的随机数,然后使用ESP-IDF的日志功能打印出来。
2️⃣得到某个范围内的随机数 📊
#include "esp_system.h"
#include "esp_log.h"
#include "esp_random.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#define MIN 10
#define MAX 100
void app_main(void)
{
//获得随机数
unsigned int random = esp_random();
//将随机数映射到我们给定的范围
unsigned int scaled_random = MIN + (random % (MAX - MIN + 1));
ESP_LOGI("randomNumber", "%u",scaled_random);
while(1){
vTaskDelay(pdTICKS_TO_MS(1000));
}
}
上面表达式MIN + (random % (MAX - MIN + 1))
用于生成一个在MIN
和MAX
之间的随机数(包括MIN
和MAX
)。
让我们分解一下这个表达式:
-
random % (MAX - MIN + 1)
:会生成一个在0
到MAX - MIN
之间的随机数。例如,如果MIN
是10,MAX
是100,那么MAX - MIN + 1
就是91,而任何数除以91的余数都会在0到90之间所以这个表达式会生成一个在0到90之间的随机数。 -
MIN + ...
:然后,我们将上一步得到的随机数加上MIN
。这样,生成的随机数就在MIN
和MAX
之间了。
这个表达式可以确保生成的随机数在指定的范围内。这是一种常见的方法,用于在给定范围内生成随机数。
结论 🎓
参考资料 📖
ESP-IDF 随机数发生器
正点原子DNESP32S3 开发板教程-IDF 版
希望这篇博客对你有所帮助!😊