ATV 10 — Da UART para a rede CAN
Seções A leitura por UART
A leitura por UART
Nesta prática, dois ESP32 trocam a leitura de um DHT11, primeiro por um fio de UART e depois por uma rede CAN. A informação é a mesma nos dois casos, temperatura e umidade; o que muda é o caminho e as regras do caminho. Em vez de ver a leitura pronta na tela, vocês vão ver os bytes que chegam e descobrir, a partir deles, o que foi enviado.
Os dois ESP32 têm papéis fixos. O transmissor é o que tem o DHT11 ligado: lê a temperatura e a umidade e envia as leituras. O receptor mostra no monitor serial exatamente o que chega, byte a byte, em hexadecimal. O sensor é só o DHT11.
Cada ESP32 pode ficar ligado por USB ao seu próprio computador, ou os dois ao mesmo. Com dois computadores, o terra das placas não passa mais pelo USB, e o fio de GND entre os dois ESP32 é o que dá a referência comum para os sinais. Ele aparece em todas as montagens e nunca sai.
Material:
- 2 ESP32 DevKit V1
- 2 módulos transceiver CAN WCMCU-230 (SN65HVD230)
- 1 DHT11
- fios, protoboard e multímetro
- o firmware, no anexo
atv10-firmware.zipdeste material: a pasta10 - firmware, um só código com quatro modos de gravação,transmissor-uart,receptor-uart,transmissor-canereceptor-can, que abre no Arduino IDE ou no PlatformIO
O firmware vem pronto. Ninguém programa nesta prática: nos modos CAN, o arquivo protocolo.h guarda só a configuração da rede (identificadores, posição dos bytes, taxa e filtro), e o que se faz nele é trocar valores. O monitor serial trabalha a 115200 bps nos dois ESP32.
Com os dois ESP32 no mesmo computador, cada um aparece numa porta, /dev/ttyUSB0 e /dev/ttyUSB1 no Linux ou COM3, COM4 no Windows. A ordem depende de qual USB foi ligado primeiro e muda quando se religa uma placa. Antes de cada gravação, confira qual porta é a do ESP32 do DHT11.
Gravar pelo Arduino IDE. Instale, uma vez, o pacote de placas esp32 da Espressif (Ferramentas > Placa > Gerenciador de placas) e as bibliotecas DHT sensor library e Adafruit Unified Sensor, da Adafruit (Gerenciador de bibliotecas). Abra 10 - firmware/atv10/atv10.ino; o protocolo.h abre junto, numa aba. Escolha a placa ESP32 Dev Module e a porta do ESP32 que vai gravar. O modo de gravação é escolhido no topo do atv10.ino: deixe ativa só a linha do modo, por exemplo #define TRANSMISSOR_UART, com as outras três começando por //, e clique em Carregar. Para gravar o outro ESP32, troque a linha ativa, troque a porta e carregue de novo. O monitor serial fica em Ferramentas > Monitor serial, a 115200.
Gravar pelo PlatformIO. Abra a pasta 10 - firmware. Cada modo é um ambiente, e a linha do topo do atv10.ino não vale: pio run -e transmissor-uart -t upload --upload-port /dev/ttyUSB0 grava e pio device monitor -p /dev/ttyUSB0 abre o monitor serial.
Nos dois casos, "grave receptor-can" quer dizer gravar com o modo RECEPTOR_CAN, e o protocolo.h é um só para os dois ESP32: depois de mudar um valor nele, grave de novo cada ESP32 que o passo pede.
Na UART, o transmissor escreve a leitura como uma linha de texto e manda essa linha caractere por caractere por um fio, do pino TX2 de um ESP32 ao RX2 do outro. Cada caractere viaja como um byte, e o valor de cada byte vem da tabela ASCII: a letra A é o byte 41, o algarismo 0 é o byte 30, tudo em hexadecimal. A linha termina com um caractere de quebra de linha, e é por ele que o receptor sabe onde uma leitura acaba e a outra começa.
É uma ligação ponto a ponto: um fio de ida, um transmissor e um receptor. Não há endereço nem confirmação de recebimento.
A tabela ASCII abaixo traz os caracteres que podem aparecer nesta prática, cada um com o seu byte em hexadecimal.
| Byte | Caractere | Byte | Caractere | Byte | Caractere | Byte | Caractere |
|---|---|---|---|---|---|---|---|
| 0A | quebra de linha (\n) |
34 | 4 |
44 | D |
4F | O |
| 20 | espaço | 35 | 5 |
45 | E |
50 | P |
| 25 | % |
36 | 6 |
46 | F |
51 | Q |
| 2C | , |
37 | 7 |
47 | G |
52 | R |
| 2D | - |
38 | 8 |
48 | H |
53 | S |
| 2E | . |
39 | 9 |
49 | I |
54 | T |
| 30 | 0 |
3A | : |
4A | J |
55 | U |
| 31 | 1 |
3B | ; |
4B | K |
56 | V |
| 32 | 2 |
3D | = |
4C | L |
57 | W |
| 33 | 3 |
41 | A |
4D | M |
58 | X |
| . | . | 42 | B |
4E | N |
59 | Y |
| . | . | 43 | C |
. | . | 5A | Z |
- Monte a ligação da figura.
- Grave
transmissor-uartno ESP32 do DHT11 ereceptor-uartno outro. - Abra o monitor serial do receptor. A cada 2 s chega uma linha de bytes. Anote três linhas e, com a tabela ASCII, descubra o texto, a temperatura e a umidade de cada uma.
- Desconecte o fio de dados do DHT11 e decodifique a linha que passa a chegar. Depois, reconecte o fio.
- Abra o monitor serial do transmissor. Ele mostra só
Leitura enviadaa cada envio. Tire o USB do receptor e veja o que muda no transmissor. Depois, religue o receptor.