• Nenhum resultado encontrado

Por Fernando Koyanagi 1

N/A
N/A
Protected

Academic year: 2021

Share "Por Fernando Koyanagi 1"

Copied!
25
0
0

Texto

(1)
(2)

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

(3)

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.

3

//array de frequências válidas que utilizaremos para trocar

(4)
(5)

Quando eu uso ESP32 Lora ?

(6)

Criptografia LoRaWan

https://www.thethingsnetwork.org/wiki/LoRaWAN/Home#lorawan_frequency-bands_china-779-787-mhz-and-470-510-mhz

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.

(7)

LoRa® - LoRaWAN™ - e as Frequências

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

928 mHz 902 mHz 907,5 mHz 915 mHz

Brasil

USA

Site: www.teleco.com.br

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:

40 canais 7,5 mHz

5,5 mHz 13 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

(8)

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

(9)

Em

www.fernandok.com

(10)

Lora Esp32 Oled

(11)

Montagem

(12)

Bibliotecas

Adicione a seguinte biblioteca “Adafruit SSD1306”.

(13)

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

.

13

//array de frequências válidas que utilizaremos para trocar

(14)

Programa EMISSOR

14

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.

(15)

Programa EMISSOR Sender

15

#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

);

(16)

Setup

16

void setup() {

pinMode(16,OUTPUT); // display OLED do Lora

pinMode(2,OUTPUT); // 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); }

(17)

Loop

17

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(); // avisa que mudou frequência

atualizarDisplay();

mudarFrequencia(); }

//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); }

(18)

18

//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

();

}

(19)

atualizarDisplay

19

//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

();

}

(20)

Programa RECEPTOR

20

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.

(21)

Programa RECEPTOR

21

#include <SPI.h> #include <LoRa.h> #include <Wire.h> #include "SSD1306.h“

// 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 = "--";

(22)

Setup

22

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

();

(23)

Loop e parserPacket

23

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

();

}

(24)

verificarFrequencia e loraData

24

//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

();

(25)

25

Seu e-mail

Referências

Documentos relacionados

Preâmbulo Tendo como antecedente a Declaração do México subscrita pelos representantes dos organismos desportivos governamentais da Argentina, Bolívia, Colômbia, Costa Rica,

“Porque quando um homem fala pelo poder do Espírito “Porque quando um homem fala pelo poder do Espírito Santo, o poder do Espírito Santo leva as suas palavras ao Santo, o poder

Em ampla pesquisa realizada sobre dormente de concreto sob ação de impacto, WANG (1996) estudou um modelo de dormente de concreto com: a) 1% por volume de fibras de aço

 quando a citação ou intimação for por oficial de justiça, da data de juntada aos autos do mandado cumprido;..  quando houver vários réus, da data de juntada aos autos do

O consumo minimalista, por vezes, é descrito como uma forma de viver simples ou frugal. Craig-Lees et al. 191) resumiram os temas comuns atribuídos aos

( ) um sentimento. B) Copie o trecho do verbete com o significado da palavra raiva presente no cartaz. 19 – E então, você tem animal de estimação? Sem sim, desenhe você e ele.

Diante da polêmica e de posições divergentes sobre a flexibilização de diferentes atividades no âmbito do Estado de Pernambuco e, na última etapa, a tentativa de

de Transformação (Olivicultura) Transformação de azeitona, conservação e comercialização de azeite; DÁSPERA - Cooperativa Agrícola, CRL Simadas - Dáspara