ESP32

Como colocar o ESP32 com RTOS na IDE do Arduino

ESP32 | Do bit Ao Byte | MicroPython no ESP32 | Processamento paralelo com ESP32 | Selecionar uma CPU | mutex no freertos | tasks no esp32 | FreeRTOS com ESP32 | timer com ESP32 | partições no ESP32

Nos artigos anteriores relacionados ao ESP32 com RTOS vocês devem ter reparado que só usei códigos de conceito. Nem todos eles rodam do jeitinho que estão escritos, porque na escrita fui modificando as variáveis e também não coloquei um código completo. Agora vamos programar de verdade utilizando os conceitos previamente explicados, mas para isso será necessário utilizar a IDE do Arduino, que facilitará demais as coisas. Mas se você já adicionou o ESP32 na IDE do Arduino, deve ter rodado bem o exemplo desse artigo.

Onde comprar?

Essa belezinha pode ser adquirida nesse link da CurtoCircuito, que é mais uma loja bastante interessante que está se voltando pra IoT. Vale conferir.

Instruções de instalação para Debian e derivados

Derivados de Debian são eles: Linuxd Mint, Ubuntu e qualquer outro que use apt como gerenciador de pacotes.

Não vou me estender porque vou passar um código funcional para você fazer agora mesmo sua primeira compilação do ESP32 com RTOS.


Para instalar, apenas copie e cole essas linhas:

Depois inicie a IDE do Arduino e selecione a sua board ESP32. Eu estou utilizando NODEMCU-32S.

Para instalar no Windows, siga esse link.

Primeiro programa para ESP32 com RTOS

Agora vamos à brincadeira, utilizando o código de conceito do último artigo, mas com as devidas correções. Na documentação mesmo eu vi a utilização de uma função que não foi necessária e acabei pedindo essa dica pro José Morais, que agora tá cheio de “morais” comigo. Simplesmente não use vTaskStartScheduler(). Vou colocar o código comentado e em seguida faço as últimas observações.

Agora, aos detalhes. Foram criadas 2 tasks com a mesma função, mas cada vez que essa função é chamada, uma ação diferente é tomada, por isso uma hora imprime 1 e outra hora imprime 2. 

A segunda task é executada depois de 500ms porque ela espera que a primeira libere o mutex. Será?

Muita atenção: não temos o identificador da task como referência, a função funciona como deveria, mas não sabemos qual task está executando. Isso pode gerar um grande engano. Resolvi testar criando uma segunda função para a task, passando um print para identificar. E adivinha? A prioridade da task2 era maior, então ela dominava o segundo núcleo. Como os intervalos eram iguais, ocasionalmente a task 1 era executada.

Como solucionar esse problema? – Simples, iguale as prioridades.

E a cada 2 segundos, “batata” é exibida também, executanda no núcleo 1, que está definida no main.cpp da API para o Arduino. A função delay() do Arduino para o FreeRTOS não faz um delay realmente, ela coloca o processador em idle.

ESP32 com RTOS
ESP32 com RTOS

Vamos evoluindo gradativamente, sugiro que brinque um pouco com isso, troque uma das tasks de núcleo, mude os intervalos e tire o mutex. Assim você poderá compreender melhor o paralelismo, prioridade e o mutex.

Inscreva-se no nosso newsletter, alí em cima à direita e receba novos posts por email.

Siga-nos no Do bit Ao Byte no Facebook.

Prefere twitter? @DobitAoByte.

Inscreva-se no nosso canal Do bit Ao Byte Brasil no YouTube.

Nossos grupos:

Arduino BR – https://www.facebook.com/groups/microcontroladorarduinobr/
Raspberry Pi BR – https://www.facebook.com/groups/raspberrybr/
Orange Pi BR – https://www.facebook.com/groups/OrangePiBR/
Odroid BR – https://www.facebook.com/groups/odroidBR/
Sistemas Embarcados BR – https://www.facebook.com/groups/SistemasEmbarcadosBR/
MIPS BR – https://www.facebook.com/groups/MIPSBR/
Do Bit ao Byte – https://www.facebook.com/groups/dobitaobyte/

Próximo post a caminho!

One comment

Comments are closed.

%d blogueiros gostam disto: