Fonte: NuttX

O NuttX é um sistema operacional de tempo real (RTOS) compatível com POSIX, amplamente utilizado em sistemas embarcados. Neste guia, exploramos o processo de instalação e configuração do NuttX no microcontrolador ESP32-S3.

Introdução ao Apache NuttX

O Apache NuttX é um sistema operacional de tempo real (RTOS) projetado para ser leve e estar em conformidade com padrões, em especial o POSIX e o ANSI, fornecendo interfaces semelhantes às usadas por aplicativos Embedded Linux para SoCs que não exigem a execução direta do Linux.

Ele oferece uma estrutura modular e suporta múltiplos drivers, sistemas de arquivos e protocolos de rede, sendo uma opção interessante para quem deseja um sistema mais próximo do ambiente UNIX em um microcontrolador, especialmente para projetos que exigem maior modularidade e suporte a múltiplos processos.

Segundo a pesquisa apresentada pelo Alin Jerpelea na NuttX Workshop 2024 (a tabela aparece aos 53 segundos do vídeo), e baseada em comunidade, o NuttX é o segundo RTOS mais popular, atrás apenas do Zephyr. Aqui está uma versão reduzida da tabela que ele apresentou:

Sistema OperacionalGovernançaLicença de UsoContribuições Feitas
em Junho de 2024
ZephyrComunidadeApache 2.0942
NuttXComunidadeApache 2.0135
RIOTComunidadeLGPL 2.171
RT-ThreadComunidadeApache 2.067
Tizen RTSamsungApache 2.036
MynewtComunidadeApache 2.025
Mbed OSArmApache 2.0 or BSD-3 Clause7
FreeRTOSRichard BarryMIT6

A NuttX oferece suporte a mais de 300 placas de diferentes arquiteturas e sua comunidade ativa continua fornecendo suporte para dispositivos e placas mais novos. incluindo as famílias ESP32, ESP32-C e ESP32-S da Espressif Systems.

Baixando o NuttX

O processo de instalação do NuttX descrito abaixo foi baseado no da publicação “Introdução ao NuttX e ESP32“, disponível no Espressif Developer Portal;

Instalando as Dependências do NuttX

Primeiro precisamos instalar as dependências do próprio NuttX via terminal.

> sudo apt install -y \
automake binutils-dev bison build-essential flex g++-multilib gcc-multilib \
genromfs gettext git gperf kconfig-frontends libelf-dev libexpat-dev \
libgmp-dev libisl-dev libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev \
xxd libtool picocom pkg-config python3-pip texinfo u-boot-tools util-linux

Além dessas, também é preciso instalar a biblioteca python kconfiglib via pip. Para simplificar o processo e evitar problemas com outros projetos instalados, eu recomendo que você crie uma pasta para esse projeto, e também um Ambiente Virtual do Python dentro dela, onde serão instaladas algumas das dependências.

> mkdir ~/nuttx-esp32s3
> cd ~/nuttx-esp32s3
> python3 -m venv ambiente-virtual
> source ambiente-virtual/bin/activate
> pip install kconfiglib

Ferramentas e Toolchains da Espressif

Quando as dependências do NuttX estiverem instaladas, é hora de instalar as ferramentas de compilação da Espressif. A primeira delas é a esptool, que vai permitir a comunicação com os microcontroladores.

> pip install esptool

Agora precisamos instalar a toolchain para o microcontrolador. Atualmente, os SoCs da Espressif suportados pelo NuttX são divididos em duas arquiteturas diferentes: RISC-V e Xtensa.

RISC-V:

  • ESP32-C3
  • ESP32-C6

Xtensa:

  • ESP32
  • ESP32-S2
  • ESP32-S3

Todos os SoCs RISC-V usam a mesma toolchain, mas você pode conferir mais detalhes sobre ela na seção “ESP32-C3 Toolchain” da documentação do NutteX.

Cada SoCs baseado em Xtensa tem sua própria toolchain, que precisa ser baixada e configurada separadamente. Como vamos utilizar um ESP32-S3, vamos seguir o que está na seção “ESP32-S3 Toolchain” da documentação do NutteX.

> mkdir -p ~/xtensa-esp32s3-elf-gcc
> cd ~/xtensa-esp32s3-elf-gcc
> wget https://github.com/espressif/crosstool-NG/releases/download/esp-12.2.0_20230208/xtensa-esp32s3-elf-12.2.0_20230208-x86_64-linux-gnu.tar.xz
> tar -xf xtensa-esp32s3-elf-12.2.0_20230208-x86_64-linux-gnu.tar.xz

Depois de extrair os arquivos da toolchain, precisamos adicionar a localização dos binários dela a variável PATH, em seguida feche esse terminal.

> export PATH=$HOME/xtensa-esp32s3-elf-gcc/xtensa-esp32s3-elf/bin:\$PATH
> exit

Para verificar se deu certo, abra um novo terminal e execute os seguintes comandos:

> cd ~/nuttx-esp32s3
> source ambiente-virtual/bin/activate
> xtensa-esp32s3-elf-gcc --version

Baixando o NuttX

Para baixar o NuttX, basta clonar o seu repositório no GitHub na pasta do nosso projeto. Também vou baixar o repositório nuttx-apps, mas é apenas para podermos rodar uma aplicação de exemplo.

> cd ~/nuttx-esp32s3
> git clone https://github.com/apache/nuttx.git nuttx
> git clone https://github.com/apache/nuttx-apps.git apps

Instalando o NuttX no ESP32

Com o NuttX na pasta do projeto, podemos fazer uma simples configuração de Wi-Fi para conferir seu funcionamento. O NuttX fornece algumas configurações padrão que você só precisa selecionar e usar, como é o caso do Wi-Fi que vamos utilizar. Para utilizar essas configurações você precisa ter baixado o repositório nuttx-apps no passo anterior.

Buscando por Configurações Padrão

Vamos acessar o diretório do NuttX e verificar quais são as configurações disponíveis para a placa ESP32-S3 DevKit. Você pode encontrar mais informações sobre essa placa clicando aqui.

> cd ~/nuttx-esp32s3/nuttx
> ./tools/configure.sh -L | grep esp32s3-devkit

Se deu tudo certo, você recebeu uma série de configurações disponíveis para essa placa, incluindo a que vamos utilizar, que é a “esp32s3-devkit:wifi“.

Encontrando a Porta Serial

Conecte a placa ao seu computador e verifique qual foi a porta serial que foi associada a ela com o comando:

> ls /dev/tty*

No meu caso, a placa está na porta /dev/ttyACM0, mas isso não é uma regra, e você deve sempre verificar qual porta serial foi associada a sua placa.

Agora você deve garantir que o seu usuário tenha permissão de leitura e gravação na porta serial que foi associada a sua placa. Isso pode ser feito dando, temporariamente, todas as permissões para essa porta serial com o seguinte comando:

> sudo chmod 777 /dev/ttyUSB0

Configurando o NuttX

Como vamos utilizar a configuração padrão de Wi-Fi para a placa ESP32-S3 DevKit nesse exemplo, precisamos carregar ela com o seguinte comando:

> ./tools/configure.sh esp32s3-devkit:wifi

Caso você queira, o utilitário menuconfig permite que você faça alterações nas configurações do projeto, como habilitar periféricos, modificar as configurações do kernel, habilitar o suporte para drivers de dispositivos, configurar o NuttShell e o sistema de arquivos e etc. No nosso caso, vamos utilizar para configurar as credenciais de Wi-Fi.

> make menuconfig

Para que a placa se conecte à sua rede Wi-Fi, navegue até a seção WAPI Configuration, acessível em Application Configuration -> Network Utilities -> Network Initialization -> WAPI Configuration, e defina o SSID e a senha com o nome e a senha, respectivamente, da sua rede Wi-Fi.

Também é necessário configurar a forma como a placa vai obter um endereço IP válido depois de se conectar a rede Wi-Fi. Nesse caso, vou utilizar o serviço de DHCP do próprio roteador. Para isso, basta selecionar a opção Use DHCP to get IP address na seção IP Address Configuration, acessível em Application Configuration -> Network Utilities -> Network Initialization -> IP Address Configuration.

Por último, confira se a placa que você está utilizando a mesma que está configurada na seção ESP32-S3 Chip Selection, acessível em System Type -> ESP32-S3 Chip Selection. No meu caso, é o ESP32-S3-WROOM-1-N16R8.

Ao concluir as configurações, basta pressionar o botão “S”, no teclado, para salvar as alterações, e em seguida o botão “Q” para fechar o menuconfig.

Carregando o NuttX na Placa

Para carregar o NuttX para a placa, precisamos compilar o bootloader responsável por inicializar ele. Com o bootloader pronto, podemos limpar a memória flash da placa e carregar o NuttX.

> make bootloader
> make clean
> esptool.py --port /dev/ttyUSB0 erase_flash
> make flash ESPTOOL_PORT=/dev/ttyUSB0 ESPTOOL_BINDIR=./

Testando a Conexão Wi-Fi.

Agora que o NuttX já foi carrega para a placa, podemos abrir um console serial utilizando o picocom a partir do seguinte comando:

> picocom -b115200 /dev/ttyUSB0

Para conferir se deu tudo certo podemos utilizar dois comandos. O primeiro é o ifconfig que vai mostrar os dados sobre as interfaces de rede. O segundo comando é o wapi scan wlan0, que vai fazer uma busca por redes Wi-Fi disponíveis na interface wlan0 da placa.

> ifconfig
> wapi scan wlan0

Você deve ter um resultado semelhante a esse aqui:

Fonte: O Autor

Informação Importante

Fonte: O Autor

Na teoria, essas duas placas são o mesmo SoC, o ESP32-S3 N16R8. Porém, por algum motivo que eu não consegui identificar, a placa da direita não consegue rodar o NuttX devido a um erro constante durante o boot da placa.

Vou continuar realizando testes em busca de detectar o problema. Assim que eu tiver alguma atualização sobre o problema eu atualizo essa publicação.

Conclusão

Apesar de alguns desafios encontrados, como a incompatibilidade de uma das placas ESP32-S3 com o NuttX, o processo geral foi bem-sucedido, permitindo a conexão à rede Wi-Fi e a execução de comandos básicos de rede. Isso demonstra o potencial do NuttX para ser utilizado em uma variedade de aplicações, desde dispositivos IoT até sistemas mais complexos que exigem um ambiente semelhante ao UNIX.

Para quem está começando com o NuttX ou com o ESP32-S3, este guia oferece um ponto de partida sólido. No entanto, é importante lembrar que a comunidade do NuttX está sempre evoluindo, e novas atualizações e correções podem surgir. Portanto, recomenda-se acompanhar a documentação oficial e os fóruns da comunidade para obter as informações mais recentes.

Se você tiver alguma dúvida ou quiser compartilhar sua experiência com o NuttX e o ESP32-S3, sinta-se à vontade para deixar um comentário abaixo. Sua contribuição é valiosa para enriquecer a discussão e ajudar outros desenvolvedores que estão embarcando nessa jornada.

Para citar esse artigo:

GUERRA DA SILVA, L. R. Instalando o NuttX no ESP32-S3. Ciência Embarcada. Recife. 18 mar. 2025. Disponível em: https://cienciaembarcada.com.br/publicacoes/instalando-o-nuttx-no-esp32-s3/. Acesso em: 23 set. 2025.

16 respostas para “Instalando o NuttX no ESP32-S3”

  1. Avatar de youtube downloader

    I have read so many content regarding the blogger lovers but this post is genuinely a nice post, keep it up.

    1. Avatar de Lucas Rayan Guerra

      Thank you! I’m so glad you liked it!

  2. Avatar de cici303

    Definitely consider that that you stated.
    Your favourite justification appeared to be on the net
    the simplest thing to have in mind of. I say to you, I definitely get annoyed
    whilst folks think about worries that they plainly do not understand about.
    You managed to hit the nail upon the top and defined out the entire
    thing with no need side-effects , people can take a signal.
    Will probably be again to get more. Thank you

    1. Avatar de Lucas Rayan Guerra

      Thank you very much! I’m very happy with your comment.

  3. Avatar de anaslot

    Hi there, I enjoy reading through your post. I like to write a little comment to support you.

    1. Avatar de Lucas Rayan Guerra

      Please feel free to comment.

  4. Avatar de web page

    Howdy! I realize this is somewhat off-topic however I had to ask.

    Does running a well-established blog like yours require a lot of work?
    I’m completely new to writing a blog but I do write in my journal every day.
    I’d like to start a blog so I can easily share my experience and feelings online.
    Please let me know if you have any kind of suggestions or tips for new aspiring bloggers.

    Thankyou!

    1. Avatar de Lucas Rayan Guerra

      Hello! Well, I’ve had good experiences with Embarked Science. I put a lot of work into modeling how I wanted the site to look, but once I’ve finished modeling, I just need to publish and keep the software up to date. Important fact: This blog is entirely on WordPress.

  5. Avatar de webpage

    Hi there, You’ve done a great job. I will certainly digg it and
    personally recommend to my friends. I’m confident they will be benefited from this
    site.

    1. Avatar de Lucas Rayan Guerra

      Thank you very much! I’m very happy with your comment.

  6. Avatar de winbet 299

    I think that what you said was actually very reasonable. But, think on this, what
    if you added a little content? I ain’t suggesting your information isn’t
    good, however suppose you added a post title that makes people desire more?
    I mean Instalando o NuttX no ESP32-S3 is kinda plain. You should look at Yahoo’s
    front page and see how they create article headlines to grab viewers to open the links.
    You might try adding a video or a related picture
    or two to get readers excited about what you’ve got to say.

    Just my opinion, it could make your blog a little bit more interesting.

    1. Avatar de Lucas Rayan Guerra

      Hello! You’re right, these posts could be much more interesting and engaging, but I don’t have enough time to dedicate as much time as I’d like right now. However, I’m already posting some videos more frequently to reach more people.
      Thank you!

  7. Avatar de underage sex

    I just like the valuable info you supply in your articles.
    I’ll bookmark your weblog and test once more here frequently.
    I am fairly certain I’ll be informed many new stuff proper here!
    Good luck for the next!

    1. Avatar de Lucas Rayan Guerra

      Thank you very much! I’m very happy with your comment!

  8. Avatar de singapore

    I’m gone to tell my little brother, that he should also pay a visit this blog on regular basis to take
    updated from newest information.

    1. Avatar de Lucas Rayan Guerra

      I’m so glad you liked it and I hope he likes it too!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Lucas Guerra

Autista e entusiasta do mundo da tecnologia. Criei esse blog para poder compartilhar conhecimentos e experiências de forma acessível, traduzindo esse infinidades de termos da tecnologia. Eu trabalho com o desenvolvimento de dispositivos IoT e Sistemas Web, indo do desenho de PCBs até a interface com o usuário, e sempre com foco em segurança e inovação.