2019-6-24 17:05:37 [显示全部楼层]
12700浏览
查看: 12700|回复: 1

[进阶] ESP32 Arduino教程:随机数生成

[复制链接]
简介
ESP32 Arduino教程旨在解释如何使用Arduino核心在ESP32开发板上生成随机数。
在硬件方面,ESP32https://www.dfrobot.com.cn/goods-1359.html拥有一个真随机数发生器,意味着从它获取的值是真正随机的[1]。
这些真正的随机数是基于WiFi /蓝牙RF子系统噪声,这意味着如果蓝牙和WiFi都被禁用,则只生成伪随机数[1]。
虽然对于此简单教程,数字是否为真正的随机数或伪随机数是不相关的,但是ESP32生成真正随机数的能力至关重要,因为它们可以用于加密操作[1]。您可以在这里阅读关于这两种随机性差异的解释(https://www.random.org/randomness/)。
关于ESP32随机数发生器的有趣事情是,在启用WiFi的情况下从它获得的2 GB数据样本已经通过了Dieharder Random Number Testsuite [1]的所有测试,这是一个随机数发生器的测试套件[2]。
作为ESP32随机数生成的低级分析,您可以查看这篇精彩的文章(https://www.lucadentella.it/en/2017/02/10/esp32-10-generatore-numeri-random/)。
ESP32教程测试使用集成在ESP32 FireBeetle开发板的DFRobot的ESP-WROOM-32设备进行的。

如果您愿意,可以查看以下本教程视频版本。


代码
我们将通过在Arduino设置函数上打开一个串行连接启动代码,这样我们就可以输出程序结果。

[mw_shl_code=applescript,true]void setup() {

  Serial.begin(115200);

}

[/mw_shl_code]

然后,我们将获得并定期在主循环函数上打印随机数。
为了获得随机数,我们可以使用这里定义的低级esp_random函数(https://github.com/espressif/ard ... /esp32/esp_system.h )。此函数不接收任何参数,并返回0和
但请注意,如简介部分所述,只有当WiFi或蓝牙RF系统正在运行时,该值才是真正随机的[3]。
作为这种低电平函数的替代方案,我们还可以使用Arduino随机函数,它也在ESP32 Arduino核心上实现。
随机函数被重载,可以通过传递一个或两个输入参数进行调用。

[mw_shl_code=applescript,true]Serial.println(esp_random());[/mw_shl_code]

如果我们只传递一个参数,我们指定生成的随机数的上限(不包括)[4]。因此,结果将是介于0和输入参数值-1之间的数字。
因此,在以下调用中,我们将得到0到9之间的数字。

[mw_shl_code=applescript,true]Serial.println(random(10));[/mw_shl_code]

如果我们通过传递两个输入参数调用该函数,则第一个将是生成的随机数(包括)的下限,第二个将是上限(不包括)。
因此,在以下调用中,我们将获得10到19之间的随机数。

[mw_shl_code=applescript,true] Serial.println(random(10,20));[/mw_shl_code]

请注意,随机函数的两种版本在其实现中调用esp_random函数,如此处所示(https://github.com/espressif/ard ... res/esp32/WMath.cpp)。因此,关于需要连接WiFi或蓝牙RF系统以获得真正随机生成的数字的考虑也同样适用。
最终完整代码如下所示。为了方便阅读,我们添加了额外的打印功能,并且在Arduino循环的每次迭代之间都有一个小的延迟。

[mw_shl_code=applescript,true]
void setup() {
  Serial.begin(115200);
}


void loop() {


  Serial.println("-----------");
  Serial.println(esp_random());
  Serial.println(random(10));
  Serial.println(random(10,20));


  delay(1000);
}[/mw_shl_code]


测试代码
如需测试代码,只需编译它并将其上传到您的设备即可。然后,打开Arduino IDE串行监视器并检查打印结果。它们应该类似图1显示使用前述函数调用生成的随机数。


图1 -随机数生成。




注:本文作者是Nuno Santos,他是一位和蔼可亲的电子和计算机工程师,住在葡萄牙里斯本 (Lisbon)。
他写了200多篇有关ESP32、ESP8266的有用的教程和项目。

查看更多ESP32/ESP8266教程和项目:
中文版教程 : ESP32教程 合集
英文版教程 : ESP32 tutorial 合集

gada888  版主

发表于 2019-6-25 06:41:19

学一学
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail