Por Fernando Koyanagi

Documentos relacionados
Por Fernando Koyanagi

Por Fernando Koyanagi

Por Fernando Koyanagi 1

Por Fernando Koyanagi

Over the Air OTA. Por Fernando Koyanagi

Por Fernando Koyanagi 1

Por Fernando Koyanagi. ESP32 + chip SX1276

Por Fernando Koyanagi

Introdução ao Arduino ESCOLA DE ARTES VISUAIS DO PARQUE LAGE. Núcleo de Arte e Tecnologia. julio lucio martin. Aula 07

Por Fernando Koyanagi 1

Por Fernando Koyanagi

Kit controle remoto IR acionando 3 Led com Arduino

Por Fernando Koyanagi 1

Disciplina: Laboratório de Fis26

Por Fernando Koyanagi

Por Fernando Koyanagi

ETAPAS PARA A CONSTRUÇÃO DA SONDA

Por Fernando Koyanagi

Por Fernando Koyanagi

Por Fernando Koyanagi 1

Por Fernando Koyanagi

Por Fernando Koyanagi

Manual Técnico Arduino Supervisório RTC (Real Time Clock)

IMPLEMENTAÇÃO DE SISTEMA AUTOMATIZADO PARA MEDIÇÃO DE CO 2 UTILIZANDO ARDUINO. Bruno Piza Mourão* Marcelo Augusto Gonçalves Bardi.

Arduino. Conectores, Fonte, USB, LEDs. Compilador, Bibliotecas, Editor, Burner

Projeto No. 10 Relógio com LCD

Programação em Linguagem C

Curso introdutório de microcontroladores - Plataforma Arduino

Arduino. Conectores, Fonte, USB, LEDs. Compilador, Bibliotecas, Editor, Burner

Pequenos Projetos com Arduino

Oficina de Programação utilizando a plataforma Arduino

Programação Básica em Arduino Aula 2

Arduino. Gilmar Aquino

ROBÓTICA 1 INTRODUÇÃO A PROGRAMAÇÃO NO ARDUINO

arduino = new roboticalivre(); Arduino Marcus Fazzi

Curso de robótica 2. Novos conceitos de programação

INTRODUÇÃO AO ARDUINO DUE, CANAL DIGITAL, FUNÇÃO DELAY

ARDUINO BÁSICO E T A P A 1 O QUE É ARDUINO? Prof. Amadeu Zanon Neto

Roteiro de Comunicação Raspberry Arduino/ESP8266 com I2C

Arduino. Introdução aos Componentes Básicos. Leonardo Mauro P. Moraes. Universidade Federal de Mato Grosso do Sul - UFMS.

SENSOR DE LUMINOSIDADE Com indicador de intervalo

MINICURSO ARDUINO AVANÇADO

Apostila de introdução ao Tinkercad (antigo Circuits.io)

Estrutura de Condição. Professor Pedro

Circuito e programa do módulo Arduino de leitura da Célula de Ar

int pinosensor = A0; //define a variável como entrada analógica //no pino A0 para o sensor LM35.

Projeto No. 17 Infravermelho

Programação em Linguagem C

Oficina de Programação utilizando a plataforma Arduino

- Tarefas Práticas de Programação usando Arduino - Imagem do Robô com Legendas

Podem ser substituídos pelo módulo P7-Sensor de Luminosidade da GBK Robotics.

Mundo Arduino: Vamos começar a programar?

Tutorial Proteus 02. Como simular o Arduino no Proteus ISIS utilizando a biblioteca "Emulater" por João Vitor

Projeto No. 19 Contador Binário com Chave Rotativa

Aula 1 Apresentação e Conceitos Iniciais. Wellington Cássio Faria fb.com/wellingtoncf

Para começar, iremos visualizar todas as informações no monitor serial. Portanto, a primeira montagem que devemos fazer na protoboard é a seguinte:

Caderno de Atividades 1

Por Fernando Koyanagi

Projeto Final de Microcontroladores 2 Alarme de Temperatura

TUTORIAL ALTÍMETRO LAE - P

Por Fernando Koyanagi

introdução Olá, Após alimentar você deve enviar comandos AT para verificar que o modulo está funcionando e comunicando via serial.

Robótica com Arduino Professor: Paulo Marcos Trentin

OFICINA Uso da plataforma Arduino no Ensino de Ciências

Entrada de dados com botões

INTRODUÇÃO A PLATAFORMA ARDUINO. TÁSSIO JOSÉ GONÇALVES GOMES

Semáforo de 3 cores com interatividade (para carros e pedestres)

IDE Arduino para o módulo ESP Instalando o módulo para desenvolvimento firmware para o ESP01 na IDE do Arduino.

Enviando Dados Pela Porta Serial na placa LaunchPad MSP430 Utilizando o ambiente ENERGIA

PME-ESP8266 Guia do Usuário V1.0

Arduino e módulo ESP8266 Sistemas de Comunicação Noturno, Msc. Ivandro Ribeiro

Curso de Básico Arduino! Ministrado por: Wellington Cássio Faria Contato:

Programação do Arduino. Parte 1. IDE Wiring

Curso de Arduino. Quais seus principais componentes?

SENSOR ULTRASSOM HC-SR04

2a Prova de ELT024 Programação para Sistemas Embarcados Prof. Rodrigo Maximiano Antunes de Almeida

- Trabalho Prático de Algoritmos e Programação usando Robô Arduino -

Arduino - Primeiros Passos

Atividade de laboratório 003. Prof: Carlos Eduardo de Brito Novaes 29 de abril de Alunos RA Nome Curso Semestre

Projeto No. 15 Sensor Óptico Reflexivo

Arquitetura Von Neumann Dados e instruções são obtidos da mesma forma, simplificando o desenho do microprocessador;

Projeto 01. Adriano Joaquim de Oliveira Cruz Instituto de Matemática UFRJ 2015 Adriano Cruz. 30 de agosto de 2015

Ficha 3. Exercícios de preparação da actividade 3

Introdução. O que é o Arduino?

#include <SoftwareSerial.h> SoftwareSerial myserial(2, 3); // RX, TX

exercício 1 Piscar o LED a cada 1 segundo Parar ao pressionar o botão, mantendo o LED aceso para sempre Programa interativo!

Oficina de Programação utilizando a plataforma Arduino

Transcrição:

Por Fernando Koyanagi

Intenção da Aula 1. Introdução sobre a programação multi-core no ESP32 2. Conhecer as principais funções da programação multi-core 3. Criar um programa no qual diferentes tarefas são executadas simultaneamente em diferentes núcleos.

Introdução Uma das muitas características interessantes do ESP32 é que ele tem dois núcleos Tensilica LX6, que podemos aproveitar para executar nosso código com maior desempenho e mais versatilidade. Tanto o SETUP quanto as funções principais do LOOP são executadas com prioridade de 1 e no núcleo 1. Prioridades podem ir de 0 a N, onde 0 é a menor prioridade. Núcleo pode ser 0 ou 1. 3

Introdução As tarefas têm uma prioridade atribuída que o agendador usa para decidir qual tarefa será executada. Tarefas de alta prioridade que estejam prontas para serem executadas terão preferência sobre as tarefas de menor prioridade. Em um caso extremo que a tarefa de maior prioridade precise da CPU o tempo todo, a de menor prioridade nunca seria executada. Mas com dois núcleos disponíveis, as duas tarefas podem ser executadas, desde que elas sejas atribuídas para núcleos diferentes. Núcleo 0 Processador Núcleo 1 4

Funções Vejamos agora alguma das funções importantes que podemos utilizar. xtaskcreate Cria uma nova tarefa e adiciona à lista de tarefas que estão prontas para serem executadas. BaseType_t xtaskcreate( TaskFunction_t pvtaskcode, //função que implementa a tarefa const char * const pcname, //nome da tarefa unsigned short usstackdepth, //número de palavras a serem alocadas para uso com a pilha da tarefa void *pvparameters, //parâmetro de entrada para a tarefa (pode ser NULL) UBaseType_t uxpriority, //prioridade da tarefa (0 a N) TaskHandle_t *pxcreatedtask //referência para a tarefa (pode ser NULL) ); xtaskcreatepinnedtocore Essa função faz exatamente a mesma coisa que a xtaskcreate, porém temos um parâmetro adicional, que é onde definiremos em qual núcleo a tarefa será executada. BaseType_t xtaskcreatepinnedtocore( TaskFunction_t pvtaskcode, //função que implementa a tarefa const char * const pcname, //nome da tarefa unsigned short usstackdepth, //número de palavras a serem alocadas para uso com a pilha da tarefa void *pvparameters, //parâmetro de entrada para a tarefa (pode ser NULL) UBaseType_t uxpriority, //prioridade da tarefa (0 a N) TaskHandle_t *pxcreatedtask, //referência para a tarefa (pode ser NULL) BaseType_t xcoreid //núcleo para execução da tarefa (0 ou 1) );

Funções xportgetcoreid Essa função retorna o número do núcleo que está executando a tarefa atual. TaskHandle_t É o tipo de referência para a tarefa criada. A chamada xtaskcreate retorna (como ponteiro para um parâmetro) um TaskHandle_t que pode ser usado como parâmetro por vtaskdelete para deletar uma tarefa. vtaskdelete Deleta uma tarefa criada. vtaskdelete(taskhandle_t xtasktodelete)

WiFi NodeMCU-32S ESP-WROOM-32

Display LCD 16x2 Serial com módulo i2c

Demonstração

Em www.fernandok.com Seu e-mail 10

Montagem

Biblioteca Adicione a biblioteca LiquidCrystal_I2C para comunicação com o display LCD. Acesse o link e faça download da biblioteca. Descompacte o arquivo e cole na pasta de bibliotecas da IDE do arduino. C:/Program Files (x86)/arduino/libraries

Programa Faremos um programa simples que consiste em fazer um led piscar e contar quantas vezes ele piscou, teremos também um botão que ao ser pressionado muda uma variável de controle de estado do mesmo, o display ficará atualizando todas essas informações. Programaremos a tarefa de atualização do display para executar no núcleo UM do processador, e as outras operações no núcleo ZERO. 13

Bibliotecas e variáveis #include <Wire.h> #include <LiquidCrystal_I2C.h> //biblioteca responsável pelo controle do display LiquidCrystal_I2C lcd(0x27, 16, 2); //set the LCD address to 0x27 for a 16 chars and 2 line display //variáveis para controle do LED int count = 0; int blinked = 0; String statusbutton = "DESATIVADO"; //pinos usados const uint8_t pin_led = 4; const uint8_t pin_btn = 2; //variaveis que indicam o núcleo static uint8_t taskcorezero = 0; static uint8_t taskcoreone = 1;

Setup Processador void setup() { pinmode(pin_led, OUTPUT); pinmode(pin_btn, INPUT); //inicializa o LCD com os pinos SDA e SCL lcd.begin(19, 23); // Liga a luz do display lcd.backlight(); lcd.setcursor(0, 0); lcd.print("piscadas:"); Núcleo 0 Núcleo 1 //cria uma tarefa que será executada na função coretaskzero, com prioridade 1 e execução no núcleo 0 xtaskcreatepinnedtocore( coretaskzero, /* função que implementa a tarefa do LED */ "coretaskzero", /* nome da tarefa */ 10000, /* número de palavras a serem alocadas para uso com a pilha da tarefa */ NULL, /* parâmetro de entrada para a tarefa (pode ser NULL) */ 1, /* prioridade da tarefa (0 a N) */ NULL, /* task handle referência para a tarefa (pode ser NULL) */ taskcorezero); /* Núcleo que executará a tarefa */ delay(500); //tempo para a tarefa iniciar

Setup (continuação) //cria uma tarefa que será executada na função coretaskone, com prioridade 2 e execução no núcleo 1 xtaskcreatepinnedtocore( coretaskone, /* função que implementa a tarefa do Display */ 0 "coretaskone", /* nome da tarefa */ 10000, /* número de palavras a serem alocadas para uso com a pilha da tarefa */ NULL, /* parâmetro de entrada para a tarefa (pode ser NULL) */ 2, /* prioridade da tarefa (0 a N) */ NULL, /* referência para a tarefa (pode ser NULL) */ taskcoreone); /* Núcleo que executará a tarefa */ delay(500); //tempo para a tarefa iniciar //cria uma tarefa que será executada na função coretasktwo, com prioridade 2 e execução no núcleo 0 xtaskcreatepinnedtocore( coretasktwo, /* função que implementa a tarefa do Botão */ "coretasktwo", /* nome da tarefa */ 10000, /* número de palavras a serem alocadas para uso com a pilha da tarefa */ NULL, /* parâmetro de entrada para a tarefa (pode ser NULL) */ 2, /* prioridade da tarefa (0 a N) */ NULL, /* referência para a tarefa (pode ser NULL) */ taskcorezero); /* Núcleo que executará a tarefa */ delay(500); //tempo para a tarefa iniciar } void loop() {} Núcleo Processador Núcleo 1

TaskZero Prioridade: Núcleo de Execução: //essa função ficará mudando o estado do led a cada 1 segundo //e a cada piscada (ciclo acender e apagar) incrementará nossa variável blinked void coretaskzero( void * pvparameters ){ String taskmessage = Tarefa executando no núcleo: "; taskmessage = taskmessage + xportgetcoreid(); Serial.println(taskMessage); while(true){ digitalwrite(pin_led,!digitalread(pin_led)); if (++count % 2 == 0 ) blinked++; Núcleo 0 } } delay(1000);

TaskOne Prioridade: Núcleo de Execução: //essa função será responsável apenas por atualizar as informações no //display a cada 100ms void coretaskone( void * pvparameters ){ while(true){ lcd.setcursor(10, 0); lcd.print(blinked); } lcd.setcursor(0,1); lcd.print(statusbutton); delay(100); } Núcleo 1

TaskTwo Prioridade: Núcleo de Execução: //essa função será responsável por ler o estado do botão //e atualizar a variavel de controle. void coretasktwo( void * pvparameters ){ while(true){ if(digitalread(pin_btn)){ statusbutton = "Ativado "; } else statusbutton = "Desativado"; Núcleo 0 } } delay(10);

Em www.fernandok.com Download arquivos PDF e INO do código fonte 20