Manual

do

Maker

.

com

Review do Arduino UNO R4

Review do Arduino UNO R4

Após ter escrito vários artigos, acabei optando por fazer um review do Arduino UNO R4 com minha percepção até o momento. Também disporei minhas considerações de prós e contras, tudo de forma bem resumida.

Híbrido

Eu acho muito interessante o fato de o Arduino UNO R4 ser um híbrido - isso é, tem 2 processadores diferentes. Foi o caso do Arduino Industrial 101, que roda Linux em um processador MIPS e dispõe uma MCU ATmega32u4. Escrevi diversos artigos a respeito e é uma das minhas placas preferidas.

O Arduino UNO R4 tem um processador ARM e um ESP32. Dois processadores de 32 bits, mas estranhamente o Arduino UNO R4 não está rodando RTOS nativamente. Tentei criar uma task para testar e não funcionou. Vi em um sketch de exemplo nativo da interface que é necessário fazer o include do header RTOS pra poder usar. Também, minha primeira desconfiança é que a USB estivesse dando acesso prioritário ao ESP32, porque a conexão WiFI é feita através do sketch do Arduino, como mostrei nesse artigo, onde pego o IP público de saída do modem (que é o IP que sai para a Internet). Bem, considerando que o ESP32 não é o processador primário e que o ARM não está rodando RTOS (ou pelo menos não temos os recursos nativamente), a placa me parece subutilizada. Ao longo do tempo terei mais intimidade com a placa, já que no momento consigo dar uns tapas só depois do trabalho, umas duas ou três vezes por semana. Daí talvez eu traga outra visão, mas no momento é isso.

Pinos

Memória ela tem bastante, mas como é um recurso padrão e esperado o aumento, não tem novidade. Já os pinos, obviamente teve diferença na estrutura de configuração dos registradores, mas que foi abstraído pelo framework. O legal está no que o novo hardware oferece!

InterrupçãoTipoFunção
D3DigitalGPIO pin, Interrupt, PWM
D4DigitalGPIO pin
D5DigitalGPIO pin, PWM
D6DigitalGPIO pin, PWM
D7DigitalGPIO pin
D8DigitalGPIO pin
D9DigitalGPIO pin, PWM
D10DigitalSPI (CS), GPIO pin, PWM
D11DigitalSPI (COPI), GPIO pin, PWM
D12DigitalSPI (CIPO), GPIO pin
D13DigitalSPI (SCK), GPIO pin, Built-in LED
A0DigitalAnalog In, DAC
A1Analog inAnalog In, OPAMP +
A2Analog inAnalog In, OPAMP -
A3Analog inAnalog In, OPAMP OUT
A4Analog inAnalog In, SDA*
A5Analog inAnalog In, SCL*

Essa tabela é um "Ctrl+Chups" da documentação oficial. O que gostaria de denotar aqui são as portas analógicas. Repare o amplificador na porta A1 e A2, saindo na A3. Talvez seja bem legal o recurso e pode sair uns projetos, mas ainda não consigo pensar em algo para esse momento. Porém, agora o ADC é de 12 bits em 5V, o que dá uma amostragem magnífica de 4096 valores de resolução.

analogWrite(pin, value);

O A0 é um DAC, que pode atuar como um pino analógico de saída. Por padrão, 8 bits, mas pode ser mudado para 12 bits:

analogWriteResolution(12);

RTC nativo

Ele possui também um RTC, o que achei particularmente surpreendente. E a própria documentação oficial do Arduino UNO R4 mostra como configurá-lo de modo extremamente simples:

#include "RTC.h"

void setup() {
  Serial.begin(9600);

  RTC.begin();
  RTCTime mytime(30, Month::JUNE, 2023, 13, 37, 00, DayOfWeek::WEDNESDAY, SaveLight::SAVING_TIME_ACTIVE);

  RTC.setTime(mytime);
}

void loop() {
  RTCTime currenttime;

 // Get current time from RTC
  RTC.getTime(currenttime);
  
  // Print out date (DD/MM//YYYY)
  Serial.print(currenttime.getDayOfMonth());
  Serial.print("/");
  Serial.print(Month2int(currenttime.getMonth()));
  Serial.print("/");
  Serial.print(currenttime.getYear());
  Serial.print(" - ");

  // Print time (HH/MM/SS)
  Serial.print(currenttime.getHour());
  Serial.print(":");
  Serial.print(currenttime.getMinutes());
  Serial.print(":");
  Serial.println(currenttime.getSeconds());

  delay(1000);
}

EEPROM

Temos 8K de EEPROM, mas prefiro muito usar o LittleFS no ESP32 do que gravar na EEPROM assim:

EEPROM.write(address, val);
EEPROM.read(address);

A própria documentação sugere que seu uso seja priorizado para leitura, porque tem um ciclo de vida curto. Então se precisar usar para guardar parâmetros de programas para leituras no boot, é um bom negócio, mas se quiser utilizar com um HD, a placa vai embora cedo. Se rodar dentro da função loop sem querer, adeus.

SPI

Do 10 ao 13, temos o SPI, que pode ser configurado de forma bem fácil:

#include <SPI.h>

const int CS = 10;


void setup() {
  pinMode(CS, OUTPUT);

  SPI.begin();

  digitalWrite(CS, LOW);

  SPI.transfer(0x00);
  
  digitalWrite(CS, HIGH);
}

void loop() {
}

I2C

Quanto ao I2C, temos nas duas bordas da placa; no analógico e do lado oposto, na borda de cima, passando ali pelo pino 13, os últimos 2 pinos.

A configuração é direta também:

#include <Wire.h>
...
    Wire.begin();
...
    Wire.beginTransmission(1);
    Wire.write(byte(0x00)); 
    Wire.write(val);
    Wire.endTransmission();
....

USB HID

A placa pode atuar como teclado e mouse. Dá pra fazer umas brincadeiras interessantes.

keyboard.press('W');
mouse.move(x,y);

O Arduino UNO R4 WiFi cede alguns recursos para a comunicação com o ESP32. Já o Minima dispõe de uma porta SWD para debug, que é um recurso espetacular para usar em projetos complexos. Já escrevi diversos artigos usando debuggers, SWD, OpenOCD etc. Use a caixa de pesqusa para as respectivas palavras chaves.

Matrix de LEDs

O Arduino UNO R4 WiFi tem uma matriz de LEDs que dá pra usar para umas brincadeiras, mas não é um recurso importante de fato. Talvez um OLED monocromático 32x64 fosse mais útil. A porta USB-C é a melhor coisa que poderia ter no momento. Perdemos (somados) dias de vida com o ritual do encaixe à porta USB, que curiosamente dava errado na primeira vez, mesmo quando estava do lado certo.

A tensão de entrada tem uma range bem melhor, mas não é tão importante também. Enfim, a placa é boa, tem recursos pra brincar por muito tempo, mas o preço é altíssimo. Por esse valor dá pra comprar uma Orange Pi, por exemplo. E nesse caso, roda Linux! - Fique claro que não deixei de comprar, afinal é uma nova experiência.

Nome do Autor

Djames Suhanko

Autor do blog "Do bit Ao Byte / Manual do Maker".

Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.