Gerando números aleatórios no ESP32

Eletrônica

O código

Iniciaremos nosso código abrindo uma conexão serial na função de configuração do Arduino, para que possamos gerar os resultados do nosso programa.

void configuração() {
  Serial.begin(115200);
}

Em seguida, obteremos e imprimiremos periodicamente os números aleatórios na função de loop principal.

Para obter um número aleatório, podemos usar a função esp_random de baixo nível, que é definida aqui Esta função não recebe argumentos e retorna um valor aleatório entre 0 e UINT32_MAX [3] (o maior valor que um unsigned int pode ter).

Observe, no entanto, que, conforme mencionado na seção introdutória, o valor só será verdadeiramente aleatório se o sistema WiFi ou Bluetooth RF estiver em execução [3].

Serial.println(esp_random());

Como alternativa a essa função de nível inferior, podemos usar a função aleatória do Arduino , que também é implementada no núcleo do ESP32 Arduino.

A função aleatória está sobrecarregada e pode ser chamada passando um ou dois parâmetros de entrada.

Caso passemos apenas um parâmetro, estamos especificando o limite superior do número aleatório gerado (exclusivo) [4]. Assim, o resultado será um número entre 0 e o valor do parâmetro de entrada – 1.

Assim, na chamada abaixo, obteremos um número entre 0 e 9.

Serial.println(random(10));

Se chamarmos a função passando dois parâmetros de entrada, o primeiro será o limite inferior do número aleatório gerado (inclusive) e o segundo será o limite superior (exclusivo).

Assim, na chamada abaixo, obteremos um número aleatório entre 10 e 19.

Serial.println(random(10,20));

Observe que ambas as versões da função random chamam a função esp_random em sua implementação, como pode ser visto aqui Assim, as considerações sobre a necessidade de conexão do sistema WiFi ou Bluetooth RF para obter números gerados verdadeiramente aleatórios também se aplicam.

O código final completo pode ser visto abaixo. Adicionamos uma impressão extra para melhor legibilidade e um pequeno atraso entre cada iteração do loop do Arduino.


Código final


void configuração() {
  Serial.begin(115200);
}
 
void loop() {
 
  Serial.println("-----------");
  Serial.println(esp_random());
  Serial.println(random(10));
  Serial.println(random(10,20));
 
  atraso(1000);
}
Saida na serial

Fonte
https://www.dfrobot.com/blog-831.html
Mais Dicas