Trabalhando com bits e Bytes ▶︎

Para enviar e receber dados em uma rede LoRaWAN, você precisará saber como usar bits e Bytes. Como o tamanho do pacote é muito limitado com LoRaWAN (cerca de 200 Bytes com alta taxa de dados e cerca de 50 bytes com baixa taxa de dados), você deve ser muito inteligente sobre o tipo de dados que envia.

O que é um Byte?

Um Byte é um grupo de oito bits. Um bit é a unidade de dados mais básica e pode ser 1 ou 0. Um Byte não é apenas um conjunto de oito valores entre 0 e 1, mas 256 (28) valores diferentes, variando de 00000000 a 11111111 em binário. Dadas essas combinações, cada Byte pode representar um número decimal entre 0(00) e 255.

Intrigado? Lembre-se de que três números decimais não representam apenas três valores entre 0 e 9, mas 1000 (103) permutações de 0 a 999.

Saiba mais em Como funcionam os bits e Bytes e no playground do Arduino: BitMath Tutorial.

O que é um Buffer de Bytes?

Pense em um buffer como apenas outra palavra para uma matriz ou lista. Onde um Byte é um grupo de oito bits, um buffer é um grupo de um número predefinido de Bytes. Se tivermos um grupo de três Bytes, isso pode representar três valores entre 0 e 255 ou um único valor entre 0 e 16777216 (2563).

Consegue ver o padrão? O número de escolhas por posição (n) elevado à potência do número de posições (r) é o número de permutações: nr. Saiba mais em MathIsFun.com.


O que é Hexadecimal?

Freqüentemente, você verá um grupo de Bytes exibido como:

FF F0 0F 11

Um Byte não era um grupo de oito 0s e 1s? Exatamente certo. No entanto, como vimos, podemos traduzir o Byte 11111111 to 255 no bom e velho sistema decimal, também podemos traduzi-lo para FF F0 0F 11 no sistema hexadecimal, onde cada posição possui 16 valores possíveis (0-9 e A-F). A vantagem do hex é que ele é mais curto e mais explícito sobre o valor máximo (por exemplo, 257 não é uma opção).

Se traduzirmos FF F0 0F 11 para o sistema decimal e pad para facilitar a leitura, obteremos

255 240 015 017

Para indicar que você quer dizer 11 em hexadecimal e não dois bits ou o número onze, você o prefixa com o formatador 0x. Para dizer isso, você quer dizer uso binário B, conforme indicado na tabela a seguir.

Code Valor do Byte Valor Decimal Valor Hexadecimal (Hex)
11 00001011 11 B
0x11 00010001 17 11
B11 00000011  3 3

Vejamos mais um exemplo:

byte data[] = { 0xFF,
0xF0, 0x0F, 0x11 };
// identical: { 255, 240, 15, 17 };
// identical: { B11111111, B11110000, B00001111, B00010001 };
ttn.sendBytes(data, sizeof(data));

Usar 0x não significa apenas que é mais curto escrever do que um decimal, mas também muito mais fácil de converter o número em binário. Por isso, é uma boa opção na maioria das vezes.


Last modified: Tuesday, September 27, 2022, 5:03 PM