ÍNDICE DE CONTEÚDO
Este mini post faz parte de uma série com objetivo de apresentar os passos/instruções dos vídeos do canal NuttX Brasil para que a atividade proposta seja facilmente reproduzida pelo leitor.
O NuttX Brasil é um canal brasileiro idealizado por dois engenheiros da Espressif, com o objetivo de explicar como utilizar diversos recursos do Sistema Operacional de Tempo Real denominado NuttX. Um RTOS enxuto, POSIX compliant, Open Source e Unix Like que pode ser embarcado em diversos microcontroladores.
A playlist inicia mostrando os primeiros passos para preparar o ambiente e fazer o build e depois aborda diferentes subsistemas.
Cada vídeo terá um mini post no Embarcado com as Instruções as quais você poderá copiar os comandos mostrados no vídeo.
O mini post de hoje faz referência ao texto complementar do vídeo NuttX Brasil #002: Como usar o subsistema de LEDs do NuttX, que pode ser acessado aqui:
Neste vídeo você aprenderá a usar o subsistema UserLEDs do NuttX. Você poderá usar tanto o LED que vem soldado na sua placa ESP32 quanto LEDs externos que você poderá ligar aos pinos da sua placa. Caso você ainda não tenha o ambiente de desenvolvimento do NuttX instalado no seu computador, siga as instruções do artigo: https://embarcados.com.br/primeiros-passos-com-o-esp32-e-o-nuttx-parte-1/ .
Aproveite!
O que nós vamos fazer?
- Testar LEDs com o LED embutido da placa.
- Remapear o pino do LED e usar LEDs externos. (Isso demonstra, por exemplo, como fazer a customização deste recurso na sua placa).
Material Usado:
- 1 ESP32 DevKit V1 da DOIT (Pode usar outros DevKits, entretanto, deve verificar se o seu DevKit vem com LED embutido e em qual pino está conectado).
- 1 Cabo USB-Micro
- 8 LEDs coloridos
- 8 Resistores de 330 Ω
- Jumpers
Versão do NuttX utilizada: 10.1.0-RC1
Instruções:
O primeiro passo é limpar a compilação anterior:
1 |
make distclean |
Agora vamos usar uma configuração de board config que já tem as opções de configuração para suportar o LED da placa:
1 |
./tools/configure.sh esp32-devkitc:leds |
Agora você pode navegar pelo menu de configurações para entender quais opções este board config modifica:
1 |
make menuconfig |
Board Selection —>
[ ] Board LED Status support /* Tem que estar desativado */
Device Drivers —>
LED Support —>
[*] LED driver
[*] Generic Lower Half LED Driver
Application Configuration —>
Examples —>
[*] LED driver example
(leds) Program name
(100) LED task priority
(2048) LED stack size
(/dev/userleds) LED device path
(0x0f) Subset of LEDs to use
Application Configuration —>
NSH Library —>
Disable Individual commands —>
[ ] Disable printf /* Tem se ser desativado */
Após sair e salvar as configurações podemos compilar:
1 |
make -j8 download ESPTOOL_PORT=/dev/ttyUSB0 |
O comando acima compila e grava o binário do NuttX na sua placa.
Então podemos entrar no terminal do NuttX usando o picocom como console serial:
1 |
picocom -b115200 /dev/ttyUSB0 |
Caso você não esteja vendo o terminal “nsh>” do NuttX pressione a tecla ENTER ou tente reiniciar sua placa.
Antes de continuar, vamos verificar se o arquivo especial que controla o LED (“device file”) /dev/userleds foi criado:
1 2 3 4 5 6 |
nsh> ls /dev /dev: console null ttyS0 userleds |
Como você pode observar, o arquivo “userleds” foi criado corretamente.
Agora podemos acender/apagar o LED com o comando “printf”:
1 2 3 |
nsh> printf \x00000001 > /dev/userleds /* Acende / Apaga */ nsh> printf \x00000000 > /dev/userleds /* Apaga / Acende */ |
Se o LED estiver com o catodo ligado no pino da sua placa, então o primeiro comando apagará o LED e o segundo acenderá, se for o anodo que estiver ligado o resultado será o oposto.
A aplicação do exemplo LEDs que selecionamos no menuconfig é um daemon que fará o LED piscar:
1 2 3 4 5 6 7 8 9 10 11 12 |
nsh> leds leds_main: Starting the led_daemon leds_main: led_daemon started led_daemon: Running led_daemon: Opening /dev/userleds led_daemon: Supported LEDs 0x01 led_daemon: LED set 0x01 led_daemon: LED set 0x00 led_daemon: LED set 0x01 led_daemon: LED set 0x00 led_daemon: LED set 0x01 ... |
Podemos modificar os arquivos da nossa placa para suportar 8 LEDs externos, para isso precisaremos fazer as seguintes modificações:
No arquivo boards/xtensa/esp32/esp32-devkitc/include/board.h mude a definição BOARD_NLEDS de 1 para 8:
1 |
#define BOARD_NLEDS 8 |
No arquivo boards/xtensa/esp32/esp32-devkitc/src/esp32-devkitc.h crie os novos GPIO_LEDx :
1 2 3 4 5 6 7 8 |
#define GPIO_LED0 18 #define GPIO_LED1 19 #define GPIO_LED2 22 #define GPIO_LED3 23 #define GPIO_LED4 12 #define GPIO_LED5 27 #define GPIO_LED6 25 #define GPIO_LED7 32 |
Acrescente estas definições dos pinos dos LEDs no array g_ledcfg no boards/xtensa/esp32/esp32-devkitc/src/esp32_userleds.c:
1 2 3 4 5 6 7 |
/* This array maps an LED number to GPIO pin configuration */ static const uint32_t g_ledcfg[BOARD_NLEDS] = { GPIO_LED0, GPIO_LED1, GPIO_LED2, GPIO_LED3, GPIO_LED4, GPIO_LED5, GPIO_LED6, GPIO_LED7, }; |
Modifique subset (máscara) para permitir piscar os 8 LEDs:
1 |
make menuconfig |
Application Configuration —>
Examples —>
[*] LED driver example
…
(0xff) Subset of LEDs to use
Após salvar e sair você deverá compilar e gravar novamente com o comando:
1 |
make -j8 download ESPTOOL_PORT=/dev/ttyUSB0 |
Abra o picocom e rode o comando “leds” novamente:
1 2 3 4 5 6 7 8 9 10 11 12 |
nsh> leds leds_main: Starting the led_daemon leds_main: led_daemon started led_daemon: Running led_daemon: Opening /dev/userleds led_daemon: Supported LEDs 0xff led_daemon: LED set 0x01 led_daemon: LED set 0x02 led_daemon: LED set 0x03 led_daemon: LED set 0x04 led_daemon: LED set 0x05 ... |
Você também pode usar o printf para controlar o acionamento dos LEDs.
Não deixe de olhar e modificar a aplicação dos leds, ela fica em: apps/examples/leds/leds_main.c
Referências
https://randomnerdtutorials.com/esp32-pinout-reference-gpios/