Por Fernando Koyanagi 1

Documentos relacionados
Por Fernando Koyanagi 1

Por Fernando Koyanagi. ESP32 + chip SX1276

Por Fernando Koyanagi 1

Por Fernando Koyanagi

Por Fernando Koyanagi

Por Fernando Koyanagi

Por Fernando Koyanagi

Por Fernando Koyanagi 1

Por Fernando Koyanagi

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

Por Fernando Koyanagi

Over the Air OTA. Por Fernando Koyanagi

Curso introdutório de microcontroladores - Plataforma Arduino

Por Fernando Koyanagi

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

Kit controle remoto IR acionando 3 Led com Arduino

Arduino. Gilmar Aquino

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

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

Por Fernando Koyanagi

Por Fernando Koyanagi 1

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

Por Fernando Koyanagi

Por Fernando Koyanagi

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

Projeto No. 11 Display de Leds de 7 Segmentos

Projeto No. 17 Infravermelho

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

Discentes: Weverton Lima e Juliete Souza Disciplina: Sistemas Embarcados Professor Orientador: Ilton Barbacena

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

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

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

Arduino Aula 4 SHIELDS: BLUETOOTH, ETHERNET E EMG

Comunicação Serial 1

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

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

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

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

Disciplina: Laboratório de Fis26

Programação em Linguagem C

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

Por Fernando Koyanagi

Scaling Up Inclusion: Robotics, a STEM focused Project. Centro de Formação de Associação de Escolas Paços de Ferreira, Paredes e Penafiel

MINICURSO ARDUINO AVANÇADO

Oficina de Programação utilizando a plataforma Arduino

Projeto No. 12 Display de Led de 7 Segmentos

Laboratório Usando Wireshark para Examinar Quadros Ethernet

Laboratório Uso do Wireshark para examinar quadros Ethernet

Oficina de Programação utilizando a plataforma Arduino

Introdução. O que é o Arduino?

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

Conhecendo o ARDUINO LEGENDA

Projeto Final de Microcontroladores 2 Alarme de Temperatura

MINICURSO ARDUINO BÁSICO

TUTORIAL ALTÍMETRO LAE - P

Alarma Aê Projeto de alarme com envio de alerta para aplicativo para Smartphone.

Entrada de dados com botões

Este tutorial mostra como utilizar as ferramentas Send Mail e Web Commands.

Introdução ao Arduino. Pessanha Santos ASPOF EN-AEL

Depois de configurada nossa comunicação serial podemos enviar vários comandos para comunicação entre o computador e o Arduino:

Projeto No. 15 Sensor Óptico Reflexivo

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

arduino = new roboticalivre(); Arduino Marcus Fazzi

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

Programação Básica em Arduino Aula 2

Usando Display Gráfico com C18 e C30

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

PME-ESP8266 Guia do Usuário V1.0

Banrisul - Banco do Estado do Rio Grande do Sul UDS Unidade de Desenvolvimento de Sistemas

Arduino: primeiros passos para aprender e configurar.

Robótica com Arduino

MANUALDEGUSTAÇÃO ARDUINO KIT INICIANTE V4.0

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

Projeto No. 19 Contador Binário com Chave Rotativa

Estrutura de Condição. Professor Pedro

Robótica com Arduino Professor: Paulo Marcos Trentin

Programação Básica em Arduino Aula 2

3. Linguagem de Programação C

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

Manual Técnico Arduino Supervisório MODBUS & Conversor RS485

ARDUÍNO PROCEDIMENTOS BÁSICOS

Anhanguera Educacional S.A. Centro Universitário Ibero-Americano

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

STK - Setup da DR800 ETH na rede do cliente

Introdução do Arduino para aquisição de dados e controle de instrumentos

ALGORITMOS, ARQUITETURA E ARDUINO

Acendendo o Led com Arduino.

MINICURSO - PLATAFORMA ARDUINO Eixo de Informação e Comunicação Gil Eduardo de Andrade

Robótica com Arduino

Por Sergio Genilson Pfleger PLATAFORMA ROBÓTICA GENÉRICA BASEADA EM ARDUINO.

Curso: Tecnologias educacionais de baixo custo. Conector Ciência:

28. COMUNICAÇÃO WIRELESS

Transcrição:

Por Fernando Koyanagi 1

Intenção dessa aula 1. Mudança de frequência 2. Demonstrar um programa que modifica a frequência 3. Protocolo LoRaWan 4. Rádio Lora 5. Criptografia LoRaWan

Objetivo Nosso objetivo será criar um projeto no qual teremos dois ESP32 Lora se comunicando, e a cada vez que pressionarmos um botão que estará ligado ao EMISSOR, ele mudará a freqüência de comunicação, avisando através do pacote ao RECEPTOR para também mudar a freqüência mantendo assim a comunicação entre eles. //array de frequências válidas que utilizaremos para trocar long frequencia[6] = {915000000, 915125000, 868000000, 868125000, 433000000, 433125000; 3

LoRa - LoRaWAN - e as Frequências

Quando eu uso ESP32 Lora? media access control (MAC)

Criptografia LoRaWan LoRaWAN conhece três chaves de segurança distintas de 128 bits. A chave da aplicação AppKey só é conhecida pelo dispositivo e pelo aplicativo. Quando um dispositivo se une à rede (isto é chamado de associação ou ativação), uma chave de sessão de aplicativo AppSKey e uma chave de sessão de rede NwkSKey são geradas. O NwkSKey é compartilhado com a rede, enquanto o AppSKey é mantido em privado. Estas chaves de sessão serão usadas durante a duração da sessão. A figura ao lado mostra como essas chaves são usadas. O AppSKey é usado para criptografia de ponta a ponta da carga útil do quadro. O algoritmo usado para isso é AES-128, semelhante ao algoritmo usado no padrão 802.15.4. O NwkSKey conhecido é conhecido pela rede e pelo dispositivo e é usado para validar a integridade de cada mensagem pelo seu Código de integridade da mensagem (MIC). Este MIC é semelhante a uma soma de verificação, exceto que impede a adulteração intencional de uma mensagem. Para isso, o LoRaWAN usa AES-CMAC. https://www.thethingsnetwork.org/wiki/lorawan/home#lorawan_frequency-bands_china-779-787-mhz-and-470-510-mhz

LoRa - LoRaWAN - e as Frequências Site: www.teleco.com.br Frequências: Estados Unidos : 902-928 mhz Austrália : 915-928 mhz China : 779-787 e 470-510 mhz Europa : 863-870 e 433 mhz Brasil : 902-928 mhz No Brasil, a administração de frequências está sob a responsabilidade da Anatel. Para o caso brasileiro, a Anatel regulamentou a banda de 900 MHz para operação GSM conforme o esquema acima: Brasil USA 902 mhz 907,5 mhz 915 mhz 5,5 mhz 40 canais 7,5 mhz 13 mhz 64 canais 928 mhz Valido para a data de 15/02/2018 mas pode sofrer alteração conforme resolução da Anatel A ultima foi Resolução nº 680, de 27 de junho de 2017

Quando eu uso ESP32 Lora? 1) Precisa de velocidade tempo de resposta 2) Não quer pagar mensalidade ou tráfego 3) Não existe cobertura pública de gateways 4) Aplicação específica ex: Controle remoto 5) Sensores exóticos incompatíveis com hardware padrão Devem existir muitos mais motivos que apenas não me lembro agora.

Em www.fernandok.com Download dos arquivos PDF e.ino

Lora Esp32 Oled 10

Montagem 11

Bibliotecas Adicione a seguinte biblioteca Adafruit SSD1306. Basta acessar Sketch >> Incluir Bibliotecas >> Gerenciar Bibliotecas...

Programas Pacote : Sender Receiver byte 0: índice de frequência byte 1: # delimitador byte 2: unsigned int byte 3: unsigned int Criaremos 2 programas, um para o ESP32 Lora que trabalhará como EMISSOR e outro programa para o ESP32 Lora que trabalhará como RECEPTOR. //array de frequências válidas que utilizaremos para trocar long frequencia[6] = {915000000, 915125000, 868000000, 868125000, 433000000, 433125000; 13

Programa EMISSOR O programa EMISSOR ficará configurado para iniciar na freqüência 915Mhz e ficar enviando pacotes. A cada vez que o botão ligado a ele for pressionado, a freqüência mudará e um comando será enviado para o RECEPTOR mudar também. 14

Programa EMISSOR Sender #include <SPI.h> #include <LoRa.h> #include <Wire.h> #include "SSD1306.h //pino Botão #define PIN_BTN 23 //pino LED #define PIN_LED 22 // Pin definetion of WIFI LoRa 32 // HelTec AutoMation 2017 support@heltec.cn #define SCK 5 // GPIO5 -- SX127x's SCK #define MISO 19 // GPIO19 -- SX127x's MISO #define MOSI 27 // GPIO27 -- SX127x's MOSI #define SS 18 // GPIO18 -- SX127x's CS #define RST 14 // GPIO14 -- SX127x's RESET #define DI00 26 // GPIO26 -- SX127x's IRQ(Interrupt Request) #define PABOOST true //array de frequencias válidas que utilizaremos para trocar long frequencia[6] = {915000000, 915125000, 868000000, 868125000, 433000000, 433125000; //controla o indice da frequencia atual no array int indice = 0; unsigned int counter = 0; //um contador que servirá como dado para envio //armazenam estado do botão int estadobtn, ultimoestadobtn; SSD1306 display(0x3c, 4, 15); 15

Setup LoRa.begin(frequencia[indice],PABOOST) void setup() { pinmode(16,output); pinmode(2,output); // display OLED do Lora // Led interno do ESP32 Serial.begin(115200); pinmode(pin_btn, INPUT); pinmode(pin_led, OUTPUT); digitalwrite(16, LOW); // set GPIO16 low to reset OLED delay(50); digitalwrite(16, HIGH); // while OLED is running, must set GPIO16 in high display.init(); display.flipscreenvertically(); display.setfont(arialmt_plain_10); delay(1500); display.clear(); SPI.begin(SCK,MISO,MOSI,SS); LoRa.setPins(SS,RST,DI00); if (!LoRa.begin(frequencia[indice],PABOOST)) { display.drawstring(0, 0, "Starting LoRa failed!"); display.display(); while (1); LoRa.enableCrc(); // Por default é desativado display.drawstring(0, 0, "LoRa Initial success!"); display.display(); delay(1000); //define estado do botao como desligado estadobtn = ultimoestadobtn = LOW; digitalwrite(pin_led, LOW); 16

Loop void loop() { //recupera o estado do botao estadobtn = digitalread(pin_btn); //verifica se o estado do botão mudou e se mudou para LIGADO if( (estadobtn!= ultimoestadobtn) && (estadobtn == HIGH) ) { //liga o LED indicador de mudança de frequencia digitalwrite(pin_led, HIGH); //verificação para não estourar o indice do array if( (indice+1) > 5){ indice = 0; else { indice++; enviarpacote(); atualizardisplay(); mudarfrequencia(); // avisa que mudou frequência //caso nao tenha apertado o botão, ou seja, seu estado é DESLIGADO, então a frequencia permanece a mesma else { enviarpacote(); atualizardisplay(); //contador que é enviado (DADO) counter++; //copia o estado atual do botão na variável de verificação da mudança de estado ultimoestadobtn = estadobtn; //acende LED interno para indicar que enviou o pacote e da um delay digitalwrite(2, HIGH); delay(700); digitalwrite(2, LOW); delay(500); 17

mudarfrequencia e enviarpacote //muda a frequencia do Lora, a nova frequencia será de acordo com a variável "INDICE" //que pegará no array a nova frequencia void mudarfrequencia(){ if (!LoRa.begin(frequencia[indice],PABOOST)) { display.drawstring(0, 0, "Starting LoRa failed!"); display.display(); while (1); LoRa.enableCrc(); digitalwrite(pin_led, LOW); //desliga o LED indicador da mudança de frequência //envia o pacote na rede Lora void enviarpacote() { // envia um pacote LoRa.beginPacket(); LoRa.print(indice); //indice do array que contem as frequencias LoRa.print("#"); //delimitador LoRa.print(counter); //dado LoRa.endPacket(); 18

atualizardisplay //atualiza as informações no display void atualizardisplay() { display.clear(); display.settextalignment(text_align_left); display.setfont(arialmt_plain_10); display.drawstring(0, 0, "Enviando Pacote: "); display.drawstring(90, 0, String(counter)); display.drawstring(0, 20, String(frequencia[indice])); display.drawstring(90, 20, "I: "+String(indice)); display.display(); 19

Programa RECEPTOR O programa RECEPTOR ficará configurado para iniciar na freqüência 915Mhz e a cada pacote recebido, verificará se o comando para mudança de freqüência está presente para se reconfigurar. 20

#include <SPI.h> #include <LoRa.h> #include <Wire.h> #include "SSD1306.h Programa RECEPTOR // Pin definetion of WIFI LoRa 32 // HelTec AutoMation 2017 support@heltec.cn #define SCK 5 // GPIO5 -- SX127x's SCK #define MISO 19 // GPIO19 -- SX127x's MISO #define MOSI 27 // GPIO27 -- SX127x's MOSI #define SS 18 // GPIO18 -- SX127x's CS #define RST 14 // GPIO14 -- SX127x's RESET #define DI00 26 // GPIO26 -- SX127x's IRQ(Interrupt Request) #define PABOOST true //array de frequencias válidas que utilizaremos para trocar long frequencia[6] = {915000000, 915125000, 868000000, 868125000, 433000000, 433125000; //controla o indice da frequencia atual no array int indice = 0; SSD1306 display(0x3c, 4, 15); String rssi = "RSSI --"; String packsize = "--"; String packet ; 21

Setup void setup() { pinmode(16,output); pinmode(2,output); digitalwrite(16, LOW); // set GPIO16 low to reset OLED delay(50); digitalwrite(16, HIGH); // while OLED is running, must set GPIO16 in high display.init(); display.flipscreenvertically(); display.setfont(arialmt_plain_10); delay(1500); display.clear(); SPI.begin(SCK,MISO,MOSI,SS); LoRa.setPins(SS,RST,DI00); if (!LoRa.begin(frequencia[indice],PABOOST)) { display.drawstring(0, 0, "Starting LoRa failed!"); display.display(); while (1); LoRa.enableCrc(); display.drawstring(0, 0, "LoRa Initial success!"); display.drawstring(0, 10, "Wait for incomm data..."); display.display(); delay(1000); LoRa.receive(); 22

Loop e parserpacket void loop() { int packetsize = LoRa.parsePacket(); //imprime na tela a frequencia atual que está configurada display.drawstring(0,45,"freq: "+String(frequencia[indice])); display.display(); if (packetsize) { parserpacket(packetsize); //faz o parser do pacote recebido para tratar os dados void parserpacket(int packetsize) { packet =""; packsize = String(packetSize,DEC); // transforma em decimal for (int i = 0; i < packetsize; i++) { packet += (char) LoRa.read(); // lê byte a byte rssi = "RSSI " + String(LoRa.packetRssi(), DEC) ; // Valor em dbm verificafrequencia(); loradata(); 23

verificarfrequencia e loradata //verifica se no pacote recebido tem um comando para trocar de frequencia void verificafrequencia(){ //o primeiro byte do pacote tem o indice da frequencia que o emissor está usando, // colocamos esse valor em CMD para fazeras verificações String cmd = String(packet.charAt(0)); //se o indice recebido é diferente do atual, então trocamos a frequencia if(cmd.toint()!= indice) { if (!LoRa.begin(frequencia[cmd.toInt()],PABOOST)) { display.drawstring(0, 0, "Starting LoRa failed!"); display.display(); while (1); indice = cmd.toint(); LoRa.enableCrc(); //coloca os dados recebidos no display void loradata(){ display.clear(); display.settextalignment(text_align_left); display.setfont(arialmt_plain_10); display.drawstring(0, 15, "Received "+ packsize + " bytes"); display.drawstringmaxwidth(0, 26, 128, packet); display.drawstring(0, 0, rssi); display.display(); 24

Em www.fernandok.com Seu e-mail 25