E vamos a uma rápida análise no outro modelo da Arduino Uno R4, a WiFi. Como o nome indica, o ponto principal deste segundo modelo é a inclusão da comunicação WiFi (e Bluetooth). Vamos aos detalhes?
Acrescentando WiFi
Existem várias formas de acrescentar comunicação WiFi a uma placa com microcontrolador. A primeira é usar um microcontrolador que já tenha este recurso internamente, como é o caso do ESP32. Isto significa que tudo está no microcontrolador: o hardware, o driver e as camadas de protocolo. Uma segunda forma, usada na Raspberry Pi Pico, é acrescentar um chip dedicado. Este chip contém o hardware e o driver e o stack TCP/IP fica no microcontrolador. A terceira forma é colocar um segundo microcontrolador, com capacidade de comunicação WiFi. Aí toda a pilha roda nele.
O R4 WiFi adota esta última opção. O que surpreende é a escolha do microcontrolador secundário: um ESP32-S3, que talvez seja mais poderoso que o microcontrolador principal da R4 (o Renesas RA4M1). A própria EspressIf tem modelos mais simples e bem mais em conta, como o ESP32-C3.
A Matriz de LEDs
Uma surpresa que chamou a atenção foi a inclusão de uma matriz de 8x12 LEDs. Ao ligar a placa pela primeira vez é apresentada uma curta animação. A Arduino fornece uma biblioteca para apresentar imagens na matriz e um site para edição destas imagens.
A forma de implementação da matriz é interessante. É claro que um I/O para cada LED seria inviável. Uma matriz convencional com 8 linhas de 12 colunas, exigiria 20 I/Os. A R4 WiFi usa uma técnica chamada Charlieplexing, que reduz os I/Os a 11.
Na matriz convencional, temos "n" linhas e "m" colunas, com um LED em cada cruzamento de linha com coluna, num total de n*m.
O Charlieplexing aproveita que cada pino de I/O pode ter três estados: ALTO, BAIXO e alta impedância (quando o pino está configurado para entrada). Isto permite que se ative apenas um par de pinos de cada vez. E podemos colocar dois LED em cada cruzamento, com polaridade trocada. Ligando cada um dos "n" pinos a todos os outros, chegamos a 2*((n-1)+(n-2)+...2) = n*(n-1) LEDs (a demonstração fica como exercício, lembrem-se da soma dos termos de uma PA).
Os LEDs chamam bastante atenção, existem alguns usos práticos e com certeza vai ter gente que vai comprar a placa por causa disso. Mas existem desvantagens. A primeira é que em certas condições você não vai poder enxergar os LEDs: se colocar um shield por cima ou se colocar a placa em uma caixa fechada. E você vai estar sempre pagando por estes 96 LEDs.
Diferenças entre a Minima e a WiFi
Se eu fosse projetar estas placas, eu projetaria primeiro a WiFi e depois retiraria algumas coisas para chegar na Minima. Não foi bem isso que foi feito pela Arduino.
O primeiro ponto é que algumas conexões do microcontrolador aos conectores padrão Arduino são diferentes. Para quem programar com a biblioteca Arduino isto é transparente, mas vai ser um problema para quem quiser programar em um nível mais baixo.
O segundo é que o conector de debug (SWD) da Minima foi retirado na WiFi. Os sinais correspondentes estão ligados ao ESP32, o que sugere que alguém poderia fazer um firmware para o ESP32 funcionar como um depurador para o RA4M1. Curiosamente, a interface USB do ESP32 está ligada junto com a do RA4M1 no conector USB-C.
Tem também dois conectores adicionais no modelo WiFi que poderiam estar na Minima:
- O primeiro conector possui dois sinais. O primeiro permite desligar a placa e o segundo fornece a alimentação backup (bateria) para o RTC do RA4M1. Na Minima não há acesso a este pino de bateria e, portanto, data e hora são perdidos quando a placa é desligada (lembrando que a WiFi pode obter a data e hora de um servidor NTP ).
- O segundo conector é um conector Qwiic, um padrão da Sparkfun para ligação simples de módulos I2C. Além deste conector não estar presente na Minima, ele está ligado em uma segunda interface I2C, acessível na biblioteca Arduino como Wire1. Como muitas bibliotecas assumem o uso do objeto Wire, vai demorar um tempo para termos suporte generalizado a este conector.
- Uno R4: 2,8 MIPS
- Raspberry Pi Pico: 10,4 MIPS
- ESP32: 15,7 MIPS
Nenhum comentário:
Postar um comentário