Manual
do
Maker
.
com
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.
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.
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ção | Tipo | Função |
---|---|---|
D3 | Digital | GPIO pin, Interrupt, PWM |
D4 | Digital | GPIO pin |
D5 | Digital | GPIO pin, PWM |
D6 | Digital | GPIO pin, PWM |
D7 | Digital | GPIO pin |
D8 | Digital | GPIO pin |
D9 | Digital | GPIO pin, PWM |
D10 | Digital | SPI (CS), GPIO pin, PWM |
D11 | Digital | SPI (COPI), GPIO pin, PWM |
D12 | Digital | SPI (CIPO), GPIO pin |
D13 | Digital | SPI (SCK), GPIO pin, Built-in LED |
A0 | Digital | Analog In, DAC |
A1 | Analog in | Analog In, OPAMP + |
A2 | Analog in | Analog In, OPAMP - |
A3 | Analog in | Analog In, OPAMP OUT |
A4 | Analog in | Analog In, SDA* |
A5 | Analog in | Analog 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);
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);
}
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.
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() {
}
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();
....
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.
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.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.