quinta-feira, agosto 03, 2023

Análise: Arduino Uno R4 WiFi

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

No artigo anterior eu falei no desempenho em cálculos com inteiros. Mas o Uno R4 usa um Cortex-M4 que tem ponto flutuante, vamos ver como ele se sai? Eu adaptei um bechmark padrão, o Whetstone. O resultado não foi muito bom:
  • Uno R4: 2,8 MIPS
  • Raspberry Pi Pico: 10,4 MIPS
  • ESP32: 15,7 MIPS
Talvez seja necessário algum procedimento especial para usar o ponto flutuante no R4 ou talvez o pessoal da Raspberry tenha escrito rotinas matemáticas muito boas (apesar de rodar a 125MHz, o RP2040 não tem hardware de ponto flutuante).

Preço

Na loja oficial da Arduino, o Uno R4 WiFi está US$ 27,50. Isto é 10 cents mais barato que o Uno R3 é US$ 7,50 mais caro que a Minima.

No Brasil, a Maker Hero estava vendendo a R4 WiFi por R$ 320, mas esgotou (mais devem estar chegando). A R4 Minima está por R$210.

Placas baseadas no ESP32 e a Raspberry Pi Pico tem preços bem menores.

Conclusão

A Arduino Uno R4 WiFi é uma placa de qualidade, com muitos recursos atraentes. O preço, nem tanto. Mas acho que a força do nome Arduino vai garantir o seu sucesso.


Observação: Desde 2018 eu contribui com artigos para a Maker Hero, que é agora revendedora oficial da Arduino. O meu Uno R4 WiFi foi enviado pela Maker Hero em troca de artigos futuros.


Nenhum comentário: