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:
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
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.