terça-feira, 23 de junho de 2026

Meu primeiro Projeto no Espressif ESP-IDF!

ESP-IDF. Primeiro Blink minimalista comentado!


Meu primeiro piscaLED. (enxuto no úrtimo)
   Vamos criar um novo projeto no vscode via Espressif ESP-IDF, para este projeto, vou usar o ESP32-Devkit 



1. Procure (se tiver instalado o ícone da espressif)
2. Em  "Commands/Advanced" clique em "New Project Wizard"

 




3. No Topo, a direita dos menus, podera aparecer escolha a versão da IDE, 
escolha a versão 6 e no Painel a direita nomeado New Project, escolha em ESP-IDF Templates a opção: sample_project   

 




4- Clique no botão azul "Create project using template sample_project"
 No diálogo abaixo: escolha a placa ESP a ser usada: Pode ser qualquer ESP32, 
No exemplo irei usar a ESP32 Devkit e para ela, escolha em 
5- IDF_TARGET: ESP32
6- ESP-IDF Board: ESP_WROVER-KIT 3.3V
7- serial port: deixe em detect ou  escolha a porta serial onde sua placa esta conectada
8- Clique em Create Project
 
(Nota: ESP32-DevKIT vem com o  clássico ESP32) 
 



Em seguida, o sistema vai criar a estutrura das pastas e aparecerá o botao Open Project







Uma vez que o projeto foi criado, voce verá sua IDE como esta abaixo:



Painel a Esquerda: Explorador do Projeto, a Direita a area de edição dos arquivos:
1- Clique em  main.c
2- A direita vemos o  conteúdo do  arquivo
Para rodar o  código, no rodapé existe diversos ícones, no painel da  Espressif, podemos ligar ou não aqueles botões do rodapé, vamos conhecer os principais:






1-Acesso remoto (acesso por SSH por exemplo)
2- Porta Serial onde seu device esta conectado
3- Plataforma  Alvo (troque se mudar de placa)
4- Menu-Config (abre as propriedades do projeto atual)
5- idf.py fullclean (limpa do projeto o binário construido,  arquivos compilados, fica somente os sources.
6- idf.py build (Compila o projeto)
7- idf.py flash (Grava o binário gerado no alvo (Placa ESP32 na porta selecionada)
8- idf.py monitor (Abre um terminal Serial, que mostra tudo que sai pela Serial da placa ESP32 em execução)
9- idf.py build flash monitor (automatiza fazendo sequencialmente: compila, grava e chama o  monitor Serial)
10- Abre um terminal de linha de comando, na pasta do projeto. permite que voce mesmo possa inserir comandos manualmente via teclado. 

Voce poderá usar tanto os botões do rodapé, quanto abrir a linha de comando e executar os comandos manualmente.  Vamos colocar as mãos na  massa!
No proximo artigo, vamos mudar o código para uma versão enxuta do blink e ir evoluindo em seguida!

Um blink Chique no úrtimo!

No artigo anterior, criamos um  novo projeto no Microsoft Visual Code via Espressif ESP-IDF.
Agora, com o  projeto  criado, vamos mudar o  template basico para o nosso  projeto BLINK otimizado: Substitua o conteúdo do main.c para o  código  abaixo:
#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "driver/gpio.h"
#include "esp_log.h"
#define BLINK_GPIO 2 
static const char *TAG = "PISCA";

void app_main(void)
{
    gpio_reset_pin(BLINK_GPIO);
    gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);

    while (1) {
        ESP_LOGI(TAG, "LED 2 LIGADO");
        gpio_set_level(BLINK_GPIO, 1);
        vTaskDelay(pdMS_TO_TICKS(1000));&nbsp

        ESP_LOGI(TAG, "LED 2 DESLIGADO");
        gpio_set_level(BLINK_GPIO, 0);
        vTaskDelay(pdMS_TO_TICKS(1000));
    }
}


Faça o build, o flash e o monitor e veremos o led piscar na placa. sua IDE deverá estar mais ou menos assim:

Com o código rodando, vamos estudar o que as linhas dizem:

Entendendo o novo código

as primeiras linhas

#include <stdio.h>
#include "freertos/FreeRTOS.h"
#include "driver/gpio.h"
#include "esp_log.h"
#define BLINK_GPIO 2 
static const char *TAG = "PISCA";
vamos separar em dois blocos: O primeiro bloco: temos as linhas iniciando com
#include
estas linhas são diretivas de importação de bibliotecas, uma Biblioteca nada mais é que um arquivo .h e arquivo .c ou .cpp com as funções agrupadas para uma certa funcionalidade. stdio.h é uma biblioteca padrão da linguagem C. Note que ela esta sob os caracteres "<" e ">" Esse caractere diz ao compilador que é uma biblioteca padrão do sistema. O compilador sabe onde encontrar. Em seguida, temos o
#include "freertos/freertos.h"
que esta sob áspas. Essas aspas dizem que o arquivo fica na pasta components dentro da pasta esp-idf, onde reside o compilador:
 ~/.espressif/v6.0.1/esp-idf/components/
freertos.h contém funções para o programa possa interagir com o sistema operacional freertos que esta rodando por baixo da aplicação. O freertos é um sistema de tempo real para diversos dispositivos. Em seguida, temos o
#include "driver/gpio.h"
Contém funções para controle do GPIO, como colocar o pino como, entrada, saida, habilitar ou não o resistor de pullup, colocar o estado do pino em zero (Baixo) ou um (alto) entre outras funções. Os programadores de Arduino choram ao ver o proximo include, no ESP-IDF não usamos Serial.print para mensagens de debug. Em seu lugar, a lib "esp_log.h" fornece por exemplo ESP_LOGI entre outras para mostrar mensagens no console. Falemos mais sobre ele, mais tarde, eu prometo! O Segundo bloco, temos uma diretiva
#define BLINK_GPIO 2
Esta diretiva do pré-processador em C que serve para definir macros,  que se o compilador encontrar BLINK_GPIO ele o substitua pelo número 2. Para quê? Estamos definindo que BLINK_GPIO será uma constante que diz qual o número do pino do led. Se precisar mudar o número do pino no futuro, só precisa mudar o valor na diretiva citada define. Isso evita muita confusão futura. por último, temos a misteriosa linha:

static const char *TAG = "BLINK";
Ela define uma constante chamada TAG que vamos usar mais tarde.
Temos agora o procedimento mais importante do código: app_main(void)
void app_main(void)
{
gpio_reset_pin(BLINK_GPIO);
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);

while (1) {
ESP_LOGI(TAG, "LED 2 LIGADO");
gpio_set_level(BLINK_GPIO, 1);
vTaskDelay(pdMS_TO_TICKS(1000));

ESP_LOGI(TAG, "LED 2 DESLIGADO");
gpio_set_level(BLINK_GPIO, 0);
vTaskDelay(pdMS_TO_TICKS(1000));
}
}

Uma função ou procedimento em c possuem a mesma estrutura, iniciam com o tipo de retorno (no nosso caso um void) que significa: Nada, ou seja, esta é um procedimento pelo contrário é uma função, que possui um tipo de retorno, um int, etc. O procedimento app_main é onde reside o nosso código principal, o conteúdo da função ou procedimento ficam dentro das chaves "{" e "}", o compilador procura esse ponto para executar o programa e vamos conhecer agora o que ela faz. gpio_reset_pin é uma função que reseta o estado do pino para  um padrão, (parando o cursor sobre a função, ele mostra dados de como a função trabalha e seu tipo de retorno). Neste caso, estamos resetando o estado do pino BLINK_GPIO (que é o  GPIO 2) para seu estado padrão.

em seguida temos:   gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT); Esta linha faz o pino de GPIO 2 como pino de saída, ou seja, qualquer valor (zero ou um) que o software definir, o pino terá o valor GND (baixo) ou 3v3 (alto).

temos agora uma nova estrutura (a turma do Arduino fica receosa aqui) o temido while(1) ele faz o programa ficar rodando as instruções dentro do bloco indefinidamente. Quem vem do arduino, digamos que as instruções antes do while, seriam as instruções que rodam no procedimento setup() e o  procedimento loop() do Arduino nada mais é que um bloco  while (1) { loop(); }  

Vamos ver o que esta dentro deste bloco while(1): 

while (1) {
ESP_LOGI(TAG, "LED 2 LIGADO");
gpio_set_level(BLINK_GPIO, 1);
vTaskDelay(pdMS_TO_TICKS(1000));

ESP_LOGI(TAG, "LED 2 DESLIGADO");
gpio_set_level(BLINK_GPIO, 0);
vTaskDelay(pdMS_TO_TICKS(1000));
}

Aqui temos dois blocos bem parecidos: 

ESP_LOGI (é a mensagem  verde no monitor serial, TAG é aquele static const char do inicio do código  e em seguida a mensagem de informação (LOGI = log_Information) Num outro artigo vamos falar mais do poderoso log do IDF que é muito melhor que usar Serial.println do arduino. No  monitor de código, vemos assim a execução  desta função:
I (370) BLINK: LED 2 LIGADO

A instrução seguinte é bem explicativa:

gpio_set_level(BLINK_GPIO, 1);
  Esta linha coloca o pino 2 no nĩvel alto. no código  da ide Arduino equivale a digitalPin(2,HIGH); 
a proxima linha é importante; ela substituir a instrução delay(1000) do Arduino:
vTaskDelay(pdMS_TO_TICKS(1000));
Ela atrasa a task atual por um numero de TICKS como o TICK é um valor muito pequeno, usamos pdMS_TO_TICKS para transformar o numero 1000 ms (equivalente a 1 segundo) em TICKS do relógio do  ESP32. Este varia dependendo da velocidade do clock, por isso a função pdMS_TO_TICKS

o Bloco seguinte, é identico ao primeiro bloco, suas mudanças são: a mensagem do LOGI e o gpio_set_level para 0 ou Baixo(GND), temos ainda a mesma função vTaskDelay com o mesmo tempo de pausa. brinque  mudando estes valores para ver o led piscar numa frequencia diferente. 

Apesar de ser bem diferente do  mesmo código do Arduino, temos um controle muito maior do que fazemos.  Iremos evoluir este código colocando uma task! Aguardem!

domingo, 27 de novembro de 2011

Mais árvore de fio!

Novos links interessantes sobre montagens:

O link abaixo é um otimo link para fazer árvores de fio.





quinta-feira, 6 de outubro de 2011

Andando de trem no Ubuntu 11.04

Quem nunca teve vontade de bancar o maquinista e sair de trem por ai.
Os pinguins também sabem andar de trem. No linux, no Mac e no Windows existem diversos simuladores de trens, Uma opção OpenSource bacana é o OpenBVE. Para instalar é simples, podemos usar o velho apt-get ou synaptic, o Ubuntu tem também um instalador grafico simples no menu aplicativos, a Central de Programas do Ubuntu.

Abra a Central de Programas do Ubuntu e procure Openbve e clique no boao instalar na barra azul acima do screenshot da aplicação. O programa será instalado e voce poderá instalar trens, rotas e sons de diversos lugares do mundo, incluindo ferrovias Brasileiras. Aqui temos o screenshot da Central de Programas do Ubuntu


Após a instalação voce poderá abrir o Open BVE no menu Jogos.

O OpenBVE tem tradução para o Português. No Screenshot abaixo temos uma imagem da janela principal do OpenBVE onde podemos escolher que trem (instalado) usar, que rota a ser usada. As rotas são instaladas na pasta

/usr/share/games/bve/Railway/Route/

Os trens ficam na pasta

/usr/share/games/bve/Train

Ambas as pastas são pastas que só o root tem permissão de escrita, Para instalar trens ou rotas, voce deverá baixar os itens da internet, descompactar os arquivos e gravar nas pastas correspondentes. Para descompactar diretamente na pasta é necessário abrir o arquivo compactado

Os arquivos do exemplo atual podem ser baixados diretamente do site dos produtores em:


só procurar a sessão Download, é bom visitar o blog que possui tutoriais interessantes para a criação de addons para o OpenBVE.

Após baixar os arquivos, vamos fazer a instalação das rotas no OpenBVE.

primeiro, va até a pasta onde esta o arquivo a ser descompactado, no caso instalando uma nova rota.

clique com o botão direito do mouse no arquivo a ser descompactado e escolha abrir com e depois escolha a opção Outro aplicativo. Uma caixa de dialogo chamada Abrir Com se abrirá.

Escolha a opção Abrir com comando personalizado e na caixa de texto do comando coloque o comando:

gksu file-roller

Veja ao lado a imagem da caixa de dialogo Abrir Com.

O Gerenciador de pacotes se abrirá e poderá escolher a pasta onde descarregar os arquivos.


Após colocar os arquivos na pasta correta assim que reabrir o OpenBVE, poderá usar as rotas ou trens novos instalados.




Temos agora a janela principal do OpenBVE Aberta

Escolha a Rota e o trem escolhido e e clicando em Iniciar, após a carga do trem e da rota, teremos a tela da simulação
















abaixo temos os items destacados para demonstrar como operar o trem.
Temos a força e o reversor a esquerda e no centro o estado das portas.

Para fazer o trem andar, primeiro deve se esperar o tempo marcado para o embarque dos passageiros. no final do contador, é necessário fechar as portas e partir com o trem. Para isso
as teclas F5 e F6 abre ou fecha as portas. F5 - Portas da esquerda e F6 as Portas da Direita
A cor verde na porta informa que a porta esta aberta. Cinza indica porta fechada. Laranja Indica porta em operação (abrindo ou fechando).

Agora que as portas estão fechadas, podemos partir com o trem. Coloque o Reversor para Frente com a tecla 'F'. A cor Azul indica Aceleração. A Laranja Coloca o Reversor em Ré.
Agora podemos aplicar força com as teclas 'Z' ou 'A'. A tecla Z aumenta a força para aceleração.
Dependendo do trem podemos ir de P1 até P8 tem trens que tem menos pontos. Alguns trem tem um terceiro controle a esquerda que é o freio dinamico que pode ser ativado ou desativado com as teclas '<' que diminui o freio dinamico ou '>' que aumenta o freio dinamico.

Voce pode reconfigurar os controles ou mapear um joystick para controlar o trem.
Um artigo mais completo sobre como controlar o trem pode ser encontrado no link abaixo:

http://bvelocal.blogspot.com/p/faq-duvidas-frequentes-dos-usuarios.html

Espero ter ajudado com um post bacana sobre o OpenBVE que me conquistou

domingo, 28 de agosto de 2011

Ubuntu 11.04 - Blender 2.5

A maquete anda parada a muitos meses e agora após muita água que passou por baixo da ponte e muito sofrimento, resolvi pensar novamente em monta-la. Desta vez pretendo desenvolver algumas coisas interessantes de automatismo na maquete, Com o vagão porta-Container encostado, penso na possibilidade de fazer uma ponte rolante para pegar container. Após desenhar alguns esboços no inkscape, descobri que sou muito ruim de desenho 3D e pensei, o que fazer?

Lembrei do blender. Mas perai, nao sei blender e agora?

Perguntando ao meu grande amigo Cogitas3D, este me recomendou o link para
http://www.hardware.com.br/tutoriais/novo-blender3d-iniciantes/

Também o autor do livro de Blender Allan Brito tem um site muito bacana de EAD para o Blender
.
o link esta abaixo:

http://ead.allanbrito.com/

Hoje temos o curso de modelagem Blender por um precinho bem acessível.
Mas infelizmente o curso de modelagem é um pouco avançado para meu pobre conhecimento. Por sorte o Allan tem um curso básico de Blender 2.5. E melhor: Grátis:

O link para o curso básico esta aqui:
http://ead.allanbrito.com/course/view.php?id=2

Para quem não sabe o que é o Blender, o Blender é uma aplicação 3D muito interessante, poderoso que roda no Windows e Linux.

Como sou usuário do Ubuntu Linux, nos repositórios padrão da distribuição a versão atual do Blender é a 2.49

Vamos adicionar um novo repositório para a instalação da ultima versão do Blender.

Primeiro via console digite os seguintes comandos:

  • sudo add-apt-repository ppa:cheleb/blender-svn
  • sudo apt-get update
  • sudo apt-get install blender
Caso o primeiro comando add-apt-repository nao for encontrado:

sudo add-apt-get-repository ppa:cheleb/blender-svn
add-apt-get-repository: comando não encontrado


agora que o Blender esta instalado podemos fazer nossos desenhos 3D. Aproveitando

Importando o SVG no blender?

Menu file / Import / Scalable Vector Graphics (SVG)

Importe o arquivo e podemos editar o desenho importado.

Teclando alt + C, podemos converter as curvas do SVG do objeto em Mesh (a estrutura que os programas 3D manipulam.

Caso o desenho que vc criou no inkscape seja muito complexo para ser importado pelo plugin padrão SVG voce pode baixar um segundo plugin no link abaixo:

http://wiki.blender.org/index.php/Extensions:2.5/Py/Scripts/Import-Export/AI_PDF_SVG



domingo, 30 de agosto de 2009

Meu HD Clock


Meu HD Clock
Upload feito originalmente por Wagner de Queiroz

Após muito tempo sem postar resolvi mostrar algo inusitado com um velho disco rígido perdido em casa. No lugar do motor dos discos um despertador de R1,99 que da um toque high tech. Os braços de leitura do Disco Rígido vão se mover num tic tac infernal, Essa parte esta na gaveta a algum tempo e deve sair uma hora ou outra.

domingo, 21 de junho de 2009

Até que enfim, chegou o grande dia de aprender J2ME


Aprendendo J2ME
Upload feito originalmente por Wagner de Queiroz

Numa gelada manhã de sabado (11 graus centigrados na Av Paulista as 8 da manhã) um novo ciclo se iniciou, aprendi neste dia a criar jogos J2ME num evento da Tempo Real com Ricardo R. Lecheta, autor do livro de Android. Este mesmo autor tem um treinamento na tempo real de Android, mas como eu nao tenho um celular com android, a ideia é aprender J2ME mesmo.

Foi um dia dificil, pois meu conhecimento de Java nao é maduro o suficiente para poder fazer alguma coisa útil, mas acredito que logo estarei fazendo o celular falar com os trens via Bluetooth em breve, pois agora terei subsidios para aprender a JSP82