quinta-feira, 29 de setembro de 2022

Simulação NuttX no ESP32 com WOKWI - APP Leds

Simulação NuttX no ESP32 com WOKWI - APP Leds

A proposta deste artigo é demonstrar como é possível simular o sistema operacional NuttX em um ambiente virtual chamado WOKWI, utilizando como testes o ESP32. O APP do NuttX a ser testado será o leds, o mesmo fará com que um LED pisque na frequência de 1Hz, já embarcado no GPIO 2 do ESP32.

Você pode aprender programação NuttX no simulador do WOKWI onde quer que esteja. sem ter a necessidade de dispor de um Hardware real.


NuttX

NuttX: O sistema operacional para a Internet das Coisas.

NuttX é um sistema operacional em tempo real (RTOS) com ênfase na conformidade de padrões e pequeno footprint. Escaláveis de ambientes de microcontroladores de 8 bits a 64 bits (RISC-V 64 e AMD64) os principais padrões que governam o NuttX são os padrões POSIX e ANSI. APIs padrão adicionais do Unix e de outros RTOS comuns (como o VxWorks) são adotadas para funcionalidades não disponíveis sob esses padrões, ou para funcionalidades que não são apropriadas para ambientes profundamente incorporados (como fork()).

O NuttX busca alcançar um alto grau de conformidade de padrões.  APIs padrão adicionais do Unix e de outros RTOS comuns são adotadas para funcionalidades não disponíveis sob esses padrões ou para funcionalidades que não são apropriadas para os RTOS profundamente incorporados (como fork()).

Devido a essa conformidade de padrões, o software desenvolvido para outros OSes padrão (como o Linux, MacOS, FreeBSD,etc) deve ser portado facilmente para NuttX.

Tempo Real Totalmente preemptivo; prioridade fixa, round-robin, e agendamento "esporádico".

Licença Apache não restritiva totalmente aberta.

GNU Toolchains Compatíveis com as cadeias de ferramentas GNU baseadas no buildroot disponível para download para fornecer um ambiente completo de desenvolvimento para muitas arquiteturas.

Uri Shaked

Best  Simulator

Wokwi é um simulador de eletrônica online. Você pode usá-lo para simular Arduino, ESP32 e muitas outras placas além de componentes e sensores populares como LEDs, shift registers, Buzzer, sensores (ultrassônico, temperatura, umidade etc), Display TFT, teclados e muito mais.

Pode carregar BIN ou HEX gerados de terceiros, no caso NuttX.

Instalando NuttX em sua máquina, como sugestão, se utilizas o WINDOWS, instale o WSL2



PS: Para a execução do NuttX  no WOKIWI (ESP32) deve ser gerado um único BIN, resultante da adição do BINs bootloader e partitions, conforme será descrito posteriormente.


Preparando o WOKWI para rodar o BIN gerado.

No WOKWI (Wokwi - Online Arduino and ESP32 Simulator), crie e desenhe o projeto abaixo, selecionando ESP32





Execução  no WOKIWI

Como descrito anteriormente, foi gerado um arquivo Nuttx.bin para ser gravado junto com outros dois arquivos (bootloader.bin e partitions.binno ESP32. No caso do WOKWI, os três arquivos devem ser agregados e então gerar um único BIN, o qual deve ser simulado no ESP32.

Para isto, deve ser baixado o utility escrito em Python: esp32_binary_mergero mesmo pode ser baixado pelo GIT em 

Copie para a pasta deste utilitário os arquivos bootloader.bin/partitions.bin e  o Nuttx.bin gerado pela compilação do "APP" no NuttX.



Então execute o seguinte Script em Python

python3 merge_bin_esp.py --output_name app_output.bin --bin_path bootloader.bin nuttx.bin partitions.bin --bin_address 0x1000 0x10000 0x8000


Na pasta Output será gerado um arquivo para ser simulado no WOKWI, chamdo de app_output.bin


Altere em diagram.json para

{
  "version": 1,
  "author": "Anonymous maker",
"serialMonitor": { "display": "terminal" },
  "editor": "wokwi",
  "parts": [ { "id": "esp", "type": "wokwi-esp32-devkit-v1" } ],
  "connections": [ [ "esp:TX0", "$serialMonitor:RX", "" ], [ "esp:RX0", "$serialMonitor:TX", "" ] ]
}

Clicando no "Sketch" (não se preocupe com o código em Arduino, que tal deixá-lo em branco ?!), pressione F1 e escolha a opção LOAD HEX FILE AND SIMULATE e então COLE o BIN app_output.bin

Execute help e veja o APP leds e digite leds

Em breve novos exemplos com vários sensores e atuadores, bem como acesso à Internet. Abaixo a lista de sensores e atuadores disponíveis no WOKWI.

wokwi-74hc165
wokwi-74hc595
wokwi-7segment
wokwi-a4988
wokwi-analog-joystick
wokwi-arduino-mega
wokwi-arduino-nano
wokwi-arduino-uno
wokwi-attiny85
wokwi-buzzer
wokwi-dht22
wokwi-dip-switch-8
wokwi-ds1307
wokwi-franzininho
wokwi-hc-sr04
wokwi-ili9341
wokwi-ir-receiver
wokwi-ir-remote
wokwi-ks2e-m-dc5 (relay)
wokwi-ky-040
wokwi-lcd1602
wokwi-lcd2004
wokwi-led
wokwi-led-bar-graph
wokwi-logic-analyzer
wokwi-max7219-matrix
wokwi-membrane-keypad
wokwi-microsd-card
wokwi-mpu6050
wokwi-nlsf595
wokwi-ntc-temperature-sensor
wokwi-photoresistor-sensor
wokwi-pi-pico
wokwi-pir-motion-sensor
wokwi-potentiometer
wokwi-pushbutton
wokwi-rgb-led
wokwi-resistor
wokwi-servo
wokwi-slide-potentiometer
wokwi-slide-switch
wokwi-stepper-motor
wokwi-tm1637-7segment
wokwi-tv

REFERÊNCIAS
 

Nenhum comentário:

Postar um comentário