Arduino Uno R4 WiFi и Minima: отличия от R3 и первый проект
Что нового в Arduino Uno R4 Minima и WiFi по сравнению с R3? 32-битный RA4M1, 12-битный ЦАП, лимит 8 mA на пин, совместимость библиотек и проект с Wi-Fi на светодиодной матрице.
Arduino Uno R4 — четвёртая ревизия Uno, самой популярной в мире отладочной платы, и первая Uno с 32-битным процессором вместо 8-битного AVR. Есть две модели: простая и более дешёвая Uno R4 Minima и Uno R4 WiFi с Wi-Fi, Bluetooth и светодиодной матрицей 12x8. Обе сохраняют размер R3, расположение пинов и рабочее напряжение 5 V, поэтому большинство шилдов и схем подключаются как есть. При этом памяти программ в 8 раз больше, процессор в 3 раза быстрее, а ещё добавились настоящий аналоговый выход (ЦАП), шина CAN, встроенные часы (RTC) и поддержка USB-клавиатуры и мыши.
В этом руководстве разберём, чем именно R4 отличается от R3, как выбрать между Minima и WiFi, какие старые скетчи и библиотеки работают без проблем, а какие не компилируются, и почему важно соблюдать лимит 8 mA на пин. В конце соберём твой первый проект: светодиодная матрица и Wi-Fi платы R4 WiFi вместе, с управлением с телефона.

Что такое Arduino Uno R4? Модели Minima и WiFi
В основе обеих моделей — микроконтроллер Renesas RA4M1 (R7FA4M1AB3CFM): ядро Arm Cortex-M4 на 48 MHz с блоком вычислений с плавающей точкой (FPU). В отличие от большинства 32-битных плат, эта микросхема работает от 5 V, и именно поэтому Arduino выбрала RA4M1 для R4. На Minima стоит только эта микросхема. В модели WiFi есть ещё модуль ESP32-S3-MINI-1: он даёт Wi-Fi и Bluetooth, а заодно служит мостом, который общается с компьютером по USB. ESP32-S3 работает от 3,3 V, поэтому между двумя микросхемами стоит преобразователь уровней.
| Характеристика | Uno R4 Minima | Uno R4 WiFi |
|---|---|---|
| Основной процессор | RA4M1, 32 бит, 48 MHz | RA4M1, 32 бит, 48 MHz |
| Wi-Fi и Bluetooth | Нет | ESP32-S3: Wi-Fi 4 (2,4 GHz) и Bluetooth 5 LE |
| Светодиодная матрица | Нет | 12x8, 96 красных светодиодов |
| Разъём Qwiic | Нет | Есть (Wire1, только 3,3 V) |
| Подключение по USB | Собственный USB у RA4M1 | Через мост на ESP32-S3 |
| Пины CAN | D4 (TX), D5 (RX) | D10 (TX), D13 (RX) |
| Отладочный разъём | Разъём SWD | Разъём ESP32-S3 (3,3 V) |
| Дополнительные пины | Нет | OFF (выключение платы) и VRTC (батарейка часов) |
| Пин 3,3 V | От встроенного USB-стабилизатора RA4M1, малый ток | Отдельный стабилизатор 3,3 V |
Отличия Uno R3 от Uno R4
| Характеристика | Uno R3 | Uno R4 (Minima и WiFi) |
|---|---|---|
| Процессор | ATmega328P, 8 бит, 16 MHz | RA4M1 Cortex-M4, 32 бит, 48 MHz, FPU |
| Флеш (память программ) | 32 КБ | 256 КБ |
| SRAM | 2 КБ | 32 КБ |
| EEPROM | 1 КБ | 8 КБ (флеш для данных) |
| Рабочее напряжение | 5 V | 5 V |
| Ток на пин | 20 mA рекомендуется, 40 mA абсолютный максимум | 8 mA |
| Аналоговый вход (АЦП) | 6 каналов, 10 бит | 6 каналов, до 14 бит (по умолчанию 10 бит) |
| Аналоговый выход (ЦАП) | Нет | 1 канал, 12 бит (A0) |
| ОУ | Нет | Встроенный (A1, A2, A3) |
| Шина CAN | Нет | Есть (нужен внешний трансивер) |
| Часы реального времени (RTC) | Нет | Встроенные |
| USB | USB-B, мост на ATmega16U2 | USB-C, поддержка клавиатуры и мыши (HID) |
| Входное напряжение VIN | 7–12 V рекомендуется | 6–24 V |
| Последовательный порт | Serial: USB и D0/D1 общие | Serial: USB, Serial1: D0/D1 |
Самые важные строки таблицы — память и скорость. 2 КБ SRAM у R3 забиваются несколькими переменными String и буфером дисплея; в проектах с OLED-дисплеем, длинными массивами или разбором JSON плата начинает случайно зависать или перезагружаться. 32 КБ у R4 почти полностью снимают эту проблему. Благодаря FPU вычисления с float (калибровка датчиков, PID, тригонометрия) выполняются аппаратно и в разы быстрее, чем на R3. Сильно изменилось и питание: линейный стабилизатор R3 греется на 12 V, а в R4 стоит импульсный понижающий преобразователь, поэтому плата принимает до 24 V и греется намного меньше.
Новое железо в R4
- 12-битный ЦАП (A0): в отличие от ШИМ, выдаёт настоящее аналоговое напряжение; подходит для звука, синусоиды и простого генератора сигналов. Библиотека analogWave из пакета платы генерирует синус, меандр и пилу одной строкой.
- 14-битный АЦП: с analogReadResolution(14) читаются значения от 0 до 16383; при опорном напряжении 5 V один шаг — примерно 0,3 mV, а на R3 — 4,9 mV. Чтобы старые скетчи не сломались, разрешение по умолчанию по-прежнему 10 бит.
- Встроенный ОУ: на пинах A1 (+), A2 (–) и A3 (выход); слабые сигналы датчиков можно усилить без дополнительной микросхемы. Основы — в статье Что такое операционный усилитель?
- Шина CAN: надёжная шина связи, которую используют в автомобилях и промышленности; работает с модулем-трансивером вроде SN65HVD230 или TJA1050 и библиотекой Arduino_CAN из пакета платы.
- RTC: хранит дату и время без дополнительного модуля (библиотека RTC.h). Если на R4 WiFi подключить к пину VRTC батарейку на 1,6–3,6 V, часы продолжат идти даже при отключении питания платы.
- USB HID: плата может определяться на компьютере как клавиатура или мышь; раньше для этого нужна была Leonardo (USB-клавиатура на Arduino Leonardo).
- Ёмкостное касание: некоторые пины могут работать как сенсорные кнопки без дополнительного модуля, с библиотекой Arduino_CapacitiveTouch.
Две из этих возможностей можно попробовать прямо сейчас. Скетч ниже выдаёт с ЦАП постепенно растущие напряжения и считывает то же напряжение обратно 14-битным АЦП. Достаточно соединить пины A0 и A1 перемычкой и открыть монитор порта на скорости 115200 бод:
1// A0 (DAC) ile A1'i bir jumper kabloyla bağla / connect A0 (DAC) to A1 with a jumper wire
2
3void setup() {
4 Serial.begin(115200);
5 while (!Serial) {} // USB seri port açılana kadar bekle / wait for the USB serial port
6 analogWriteResolution(12); // DAC: 0–4095
7 analogReadResolution(14); // ADC: 0–16383
8}
9
10void loop() {
11 for (int value = 0; value < 4096; value += 512) {
12 analogWrite(DAC, value); // A0'dan gerçek analog gerilim / true analog voltage on A0
13 delay(10);
14 int raw = analogRead(A1); // 14 bit okuma / 14-bit reading
15 float volts = raw * 5.0 / 16383.0; // 5 V referans / 5 V reference
16 Serial.print("DAC: ");
17 Serial.print(value);
18 Serial.print(" ADC: ");
19 Serial.print(raw);
20 Serial.print(" V: ");
21 Serial.println(volts, 3);
22 delay(500);
23 }
24}В выводе видно, что каждый раз, когда значение ЦАП растёт на 512, показание растёт примерно на 2048: один шаг 12-битного выхода равен 4 шагам 14-битного входа. В расчёте в коде взято значение 5.0, но при питании от USB линия 5 V из-за защитного диода проседает примерно до 4,7 V. Если нужны точные измерения, измерь напряжение на пине 5V мультиметром и подставь это значение в формулу вместо 5.0. Строка while (!Serial) не даёт потеряться первым строкам до открытия монитора порта; если плата будет работать без компьютера, удали эту строку, иначе программа будет ждать на ней вечно. Основы аналогового чтения — в статье АЦП и аналого-цифровое преобразование.
Лимит тока пина: почему на R4 всего 8 mA?
Это отличие при переходе на R4 упускают чаще всего. ATmega328P на R3 спокойно отдаёт 20 mA на пин (абсолютный максимум 40 mA), поэтому в большинстве примеров в интернете светодиод подключают прямо к пину через резистор 220 Ω. Для R4 же Arduino советует брать с пина не больше 8 mA. Посчитаем по закону Ома: красный светодиод (около 2 V) от пина 5 V через 220 Ω даёт (5 − 2) / 220 ≈ 13,6 mA, почти вдвое больше лимита R4. Светодиод, скорее всего, загорится, но пин со временем может повредиться, и такие повреждения обычно накапливаются незаметно.

| Резистор светодиода | Ток (красный светодиод, 5 V) | Uno R3 | Uno R4 |
|---|---|---|---|
| 220 Ω | ≈ 13,6 mA | Подходит | Выше лимита |
| 330 Ω | ≈ 9,1 mA | Подходит | Немного выше лимита |
| 470 Ω | ≈ 6,4 mA | Подходит | Подходит |
| 1 kΩ | ≈ 3 mA | Подходит | Подходит, светодиод по-прежнему хорошо виден |
Работают ли старые скетчи и библиотеки на R4?
Короткий ответ: в большинстве случаев да. Скетчи на стандартных командах Arduino, таких как digitalWrite, analogRead, millis, Serial, Wire (I2C), SPI, EEPROM, Servo и tone, компилируются на R4 без изменений. Проблемы возникают в коде, который обращается напрямую к железу ATmega328P: быстрые операции с пинами через регистры вроде PORTB и DDRD, настройки Timer1, заголовочные файлы, начинающиеся с avr/, и библиотеки, которые их используют, на R4 не компилируются. Например, скетч с PORTB выдаёт ошибку 'PORTB' was not declared in this scope (PORTB не объявлен).
| Библиотека или код | Статус на R4 | Примечание |
|---|---|---|
| Servo, Wire, SPI, EEPROM, SoftwareSerial | Работает | Официальная поддержка R4 |
| Adafruit NeoPixel, FastLED | Работает | Установи последние версии |
| Библиотека DHT sensor library | Работает | Библиотека Adafruit |
| IRremote | Работает частично | Версии 4.x на R4 читают ИК-приёмник; по документации библиотеки, на R4 WiFi отправка не работает |
| LiquidCrystal I2C, MFRC522 | Работает, но с предупреждением | Предупреждение об архитектуре безвредно |
| TimerOne | Не компилируется | Вместо неё используй класс FspTimer из пакета платы |
| Регистры PORTB, DDRD, PIND | Не компилируется | Используй digitalWrite и digitalRead |
| serialEvent() | Не вызывается | Проверяй Serial.available() внутри loop |
При компиляции может появиться предупреждение вроде WARNING: library LiquidCrystal I2C claims to run on avr architecture(s) and may be incompatible with your current board which runs on renesas_uno architecture(s) (библиотека заявляет поддержку только архитектуры AVR и может быть несовместима с платой на архитектуре renesas_uno). Это не ошибка: автор библиотеки просто указал в списке поддерживаемых архитектур только AVR. Если скетч загружается и работает, всё в порядке. Если появляется настоящая ошибка, сначала установи последнюю версию библиотеки (как добавить библиотеку в Arduino); если не помогает, поищи альтернативу с поддержкой R4.
Есть ещё одно отличие, за которым стоит следить: у R3 один последовательный порт, подключённый и к USB, и к пинам D0/D1. На R4 Serial — это только USB, а пины D0 и D1 работают отдельно как Serial1. Старый скетч, который читает через Serial модуль вроде Bluetooth HC-05 или GPS на D0/D1, на R4 не получит ничего. Скетч-мост ниже передаёт данные от модуля в монитор порта, а то, что набрано в мониторе порта, — в модуль:
1// R4'te Serial = USB, Serial1 = D0 (RX) ve D1 (TX) / on the R4, Serial = USB, Serial1 = D0 (RX) and D1 (TX)
2
3void setup() {
4 Serial.begin(115200); // bilgisayar (Seri Monitör) / computer (Serial Monitor)
5 Serial1.begin(9600); // D0/D1'e bağlı modül, örn. HC-05 / module on D0/D1, e.g. HC-05
6}
7
8void loop() {
9 if (Serial1.available()) {
10 Serial.write(Serial1.read()); // modülden bilgisayara / module to computer
11 }
12 if (Serial.available()) {
13 Serial1.write(Serial.read()); // bilgisayardan modüle / computer to module
14 }
15}Настройка Uno R4 в Arduino IDE
- Установи или обнови Arduino IDE 2 (установка Arduino IDE).
- Открой слева «Менеджер плат» (Boards Manager), введи UNO R4 и установи пакет Arduino UNO R4 Boards. Это официальный пакет, поэтому дополнительную ссылку добавлять не нужно.
- Подключи плату кабелем USB-C с передачей данных и выбери Arduino UNO R4 Minima или Arduino UNO R4 WiFi в «Инструменты › Плата» (Tools › Board).
- Выбери порт платы в «Инструменты › Порт», открой «Файл › Примеры › 01.Basics › Blink» и загрузи скетч. Встроенный светодиод на D13 начнёт мигать.
- Если порт не появляется или загрузка обрывается на середине, быстро нажми кнопку RESET два раза: плата перейдёт в режим загрузчика (bootloader), и порт снова появится. Все проблемы с загрузкой разобраны в руководстве Ошибки загрузки кода в Arduino.
Uno R4 WiFi: ESP32-S3 и светодиодная матрица 12x8
По умолчанию ESP32-S3 на R4 WiFi работает с прошивкой от Arduino, которая превращает команды от RA4M1 в операции Wi-Fi и Bluetooth. Скетч ты по-прежнему пишешь для RA4M1: для Wi-Fi используется библиотека WiFiS3 из пакета платы, для Bluetooth — библиотека ArduinoBLE. Есть два важных ограничения: модуль подключается только к сетям 2,4 GHz, а поскольку Wi-Fi и Bluetooth делят одну антенну, одновременно их использовать нельзя. Некоторым новым функциям нужна свежая прошивка ESP32-S3; обновить её можно в IDE через «Инструменты › Firmware Updater» (обновление прошивки).
Матрица на лицевой стороне платы — это 96 красных светодиодов в 8 строках и 12 столбцах. Когда плату впервые достают из коробки, на ней играет анимация «Тетриса». Светодиоды подключены к 11 внутренним пинам RA4M1 по схеме чарлиплексинга; эти пины не выведены на разъёмы, так что матрица не занимает ни одного из D0–D13 или A0–A5. Библиотека Arduino_LED_Matrix из пакета платы принимает кадр (frame) в двух форматах: байтовый массив 8x12 или три 32-битных числа. Массив читать проще, потому что фигура из единиц видна прямо в коде:
1#include "Arduino_LED_Matrix.h" // kart paketiyle gelir / ships with the board package
2
3ArduinoLEDMatrix matrix;
4
5// 8 satır x 12 sütun: 1 = LED yanar / 8 rows x 12 columns: 1 = LED on
6uint8_t kalp[8][12] = {
7 { 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0 },
8 { 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0 },
9 { 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0 },
10 { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
11 { 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 },
12 { 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0 },
13 { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0 },
14 { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
15};
16
17void setup() {
18 matrix.begin();
19}
20
21void loop() {
22 matrix.renderBitmap(kalp, 8, 12); // kendi çizimin / your own drawing
23 delay(1000);
24 matrix.loadFrame(LEDMATRIX_EMOJI_HAPPY); // kütüphanedeki hazır kare / ready-made frame from the library
25 delay(1000);
26 kalp[7][11] = 1; // tek bir LED'i yak: satır 7, sütun 11 / turn on one LED: row 7, column 11
27}renderBitmap() показывает нарисованный тобой массив, а loadFrame() загружает готовые кадры из библиотеки: LEDMATRIX_HEART_BIG, LEDMATRIX_EMOJI_HAPPY, LEDMATRIX_EMOJI_SAD и LEDMATRIX_DANGER — лишь некоторые из них. С loadSequence() и play() можно запускать готовые анимации вроде LEDMATRIX_ANIMATION_TETRIS или LEDMATRIX_ANIMATION_WIFI_SEARCH. Чтобы выводить на матрицу текст и прокручивать его, нужно установить библиотеку ArduinoGraphics через «Менеджер библиотек» (Library Manager). Если нужен дисплей побольше, загляни в статьи Светодиодная матрица MAX7219 и WS2812B NeoPixel.
Первый проект: управление светодиодной матрицей с телефона
Теперь объединим обе возможности. Пока плата подключается к домашней сети, на матрице идёт анимация поиска Wi-Fi; после подключения она показывает IP-адрес бегущей строкой. Если открыть этот адрес в браузере телефона в той же сети, появятся кнопки: с их помощью можно показать на матрице сердце, весёлое или грустное лицо, снова прокрутить IP-адрес или выключить матрицу. Кроме платы, никаких деталей не нужно.
- Установи библиотеку ArduinoGraphics через «Менеджер библиотек»; WiFiS3 и Arduino_LED_Matrix входят в пакет платы.
- Замени имя сети и пароль в скетче на свои; следи за регистром букв.
- Выбери плату Arduino UNO R4 WiFi, загрузи скетч и открой монитор порта на скорости 115200 бод.
- Введи в браузере телефона IP-адрес, который бежит по матрице или выведен в мониторе порта.
- Нажимай кнопки на странице: матрица меняется мгновенно.
1#include "ArduinoGraphics.h" // Arduino_LED_Matrix'ten ÖNCE eklenmeli / must come BEFORE Arduino_LED_Matrix
2#include "Arduino_LED_Matrix.h"
3#include "WiFiS3.h"
4
5char ssid[] = "AgAdi"; // Wi-Fi adın / your Wi-Fi name
6char pass[] = "Sifre123"; // Wi-Fi şifren / your Wi-Fi password
7
8ArduinoLEDMatrix matrix;
9WiFiServer server(80);
10
11void scrollText(String text) {
12 matrix.beginDraw();
13 matrix.stroke(0xFFFFFFFF);
14 matrix.textScrollSpeed(60); // her adım 60 ms / 60 ms per step
15 matrix.textFont(Font_5x7);
16 matrix.beginText(0, 1, 0xFFFFFF);
17 matrix.print(" " + text + " ");
18 matrix.endText(SCROLL_LEFT); // yazıyı sola kaydır / scroll the text to the left
19 matrix.endDraw();
20}
21
22void sendPage(WiFiClient &client) {
23 client.println("HTTP/1.1 200 OK");
24 client.println("Content-Type: text/html; charset=utf-8");
25 client.println("Connection: close");
26 client.println();
27 client.println("<!DOCTYPE html><html><head><meta name='viewport' content='width=device-width'></head><body>");
28 client.println("<h2>UNO R4 WiFi</h2>");
29 client.println("<p><a href='/kalp'><button>Kalp / Heart</button></a></p>");
30 client.println("<p><a href='/mutlu'><button>Mutlu / Happy</button></a></p>");
31 client.println("<p><a href='/uzgun'><button>Uzgun / Sad</button></a></p>");
32 client.println("<p><a href='/ip'><button>IP</button></a></p>");
33 client.println("<p><a href='/kapat'><button>Kapat / Off</button></a></p>");
34 client.println("</body></html>");
35}
36
37void setup() {
38 Serial.begin(115200);
39 matrix.begin();
40
41 if (WiFi.status() == WL_NO_MODULE) { // ESP32-S3 yanıt vermiyor / ESP32-S3 not responding
42 Serial.println("WiFi modulu bulunamadi / WiFi module not found");
43 matrix.loadFrame(LEDMATRIX_DANGER);
44 while (true) {}
45 }
46
47 matrix.loadSequence(LEDMATRIX_ANIMATION_WIFI_SEARCH); // bağlanırken animasyon / animation while connecting
48 matrix.play(true);
49
50 while (WiFi.begin(ssid, pass) != WL_CONNECTED) {
51 Serial.println("Baglaniyor / connecting...");
52 delay(5000);
53 }
54 while (WiFi.localIP() == IPAddress(0, 0, 0, 0)) { // DHCP adresini bekle / wait for the DHCP address
55 delay(100);
56 }
57
58 server.begin();
59 Serial.print("IP: ");
60 Serial.println(WiFi.localIP());
61 scrollText(WiFi.localIP().toString()); // IP adresini matriste göster / show the IP on the matrix
62 matrix.loadFrame(LEDMATRIX_EMOJI_HAPPY);
63}
64
65void loop() {
66 WiFiClient client = server.available();
67 if (!client) {
68 return;
69 }
70
71 String request = client.readStringUntil('\n'); // ör. "GET /kalp HTTP/1.1" / e.g. "GET /kalp HTTP/1.1"
72 while (client.available()) {
73 client.read(); // kalan başlıkları at / discard the remaining headers
74 }
75
76 bool showIp = false;
77 if (request.indexOf("GET /kalp") >= 0) {
78 matrix.loadFrame(LEDMATRIX_HEART_BIG);
79 } else if (request.indexOf("GET /mutlu") >= 0) {
80 matrix.loadFrame(LEDMATRIX_EMOJI_HAPPY);
81 } else if (request.indexOf("GET /uzgun") >= 0) {
82 matrix.loadFrame(LEDMATRIX_EMOJI_SAD);
83 } else if (request.indexOf("GET /kapat") >= 0) {
84 matrix.clear();
85 } else if (request.indexOf("GET /ip") >= 0) {
86 showIp = true;
87 }
88
89 sendPage(client);
90 delay(10);
91 client.stop(); // bağlantıyı kapat / close the connection
92
93 if (showIp) {
94 scrollText(WiFi.localIP().toString()); // sayfa gittikten sonra kaydır / scroll after the page is sent
95 }
96}Логика простая: WiFi.begin() повторяется, пока не установится соединение, затем скетч ждёт, пока DHCP выдаст IP-адрес, и запускает веб-сервер на порту 80. Он читает первую строку запроса от телефона (например, «GET /kalp HTTP/1.1»), с помощью indexOf() определяет, какая кнопка нажата, и загружает на матрицу нужный кадр. endText(SCROLL_LEFT) блокирует программу, пока текст прокручивается, поэтому IP-адрес снова прокручивается только после отправки страницы и закрытия соединения. Если матрица показывает знак опасности и замирает, ESP32-S3 не отвечает; отключи и снова подключи USB-кабель платы и обнови прошивку. Если соединение так и не устанавливается, проверки 2,4 GHz и пароля из статьи ESP32 не подключается к Wi-Fi работают и здесь.
Питание: пины VIN, 5V и 3,3 V
R4 принимает 6–24 V на гнездо питания (DC) или пин VIN; встроенный понижающий преобразователь снижает это напряжение до 5 V. По документации Arduino к R4 WiFi, при питании от VIN с пина 5V можно взять около 1,2 A; при питании от USB сама плата выдерживает до 2 A, но реальный предел задаёт USB-порт компьютера. Этот ток рассчитан на датчики и небольшие модули, а не на моторы и сервоприводы. Пин 3,3 V на Minima питается от встроенного стабилизатора RA4M1, поэтому его хватает только на небольшие датчики; не питай от него модули с большим потреблением, например ESP-01 или nRF24L01 с антенной PA+LNA. На R4 WiFi есть ещё пин OFF (если соединить его с GND, питание платы 5 V отключается) и пин VRTC для батарейки RTC. Все варианты питания разобраны в статье Как питать Arduino.
Идеи проектов на Uno R4
- Метеостанция с Wi-Fi: показывай температуру, измеренную DHT11, и бегущей строкой на матрице, и на странице, которая открывается на телефоне.
- Игры на матрице: змейка, «Тетрис» или прыгающий мяч на матрице 12x8; больше идей — в статье Игровые проекты на Arduino.
- Часы из интернета: получай время из интернета (NTP), записывай его во встроенные RTC и сохраняй при отключении питания с батарейкой на пине VRTC.
- USB-клавиатура для макросов: собери клавиатуру из четырёх кнопок, которая запускает сочетания клавиш на компьютере; благодаря поддержке HID у R4 Leonardo не нужна.
- Звук через ЦАП: генерируй синусоиду на A0 с библиотекой analogWave и собери простой синтезатор с усилителем звука и динамиком.
- Управление лампой с телефона: объедини веб-сервер из этой статьи с модулем реле и включай лампу удалённо.
Частые ошибки и их решение
| Симптом | Причина | Решение |
|---|---|---|
| 'PORTB' was not declared in this scope (PORTB не объявлен) | Код напрямую использует регистры AVR | Перепиши его на digitalWrite и digitalRead |
| 'class TimerOne' has no member named 'initialize' (нет метода initialize) | TimerOne знает только таймеры AVR | Используй класс FspTimer из пакета платы |
| 'class ArduinoLEDMatrix' has no member named 'beginDraw' (нет метода beginDraw) | Нет ArduinoGraphics или она подключена после библиотеки матрицы | Установи ArduinoGraphics и подключи её до Arduino_LED_Matrix |
| Ошибки вида 'D24' was not declared в файлах WiFiS3 | В качестве платы выбрана R4 Minima | Выбери R4 WiFi в «Инструменты › Плата» |
| Нет данных от модуля на D0/D1 | На R4 Serial — это только USB | Используй Serial1 вместо Serial |
| Нет порта, или загрузка обрывается на середине | Работающий скетч заблокировал USB, или кабель только для зарядки | Нажми RESET дважды и используй кабель с передачей данных |
| Пин перестал работать | Пин нагрузили сверх лимита 8 mA | Ставь для светодиодов 470 Ω–1 kΩ, а мощными нагрузками управляй через транзистор |
| Датчик на разъёме Qwiic не находится | Qwiic подключён ко второй шине I2C (Wire1) | Используй в коде Wire1 вместо Wire |
Что купить: R3, R4 Minima или R4 WiFi?
- Uno R4 WiFi: лучший выбор, если проекты будут подключаться к интернету, телефону или по Bluetooth и хочется иметь готовый индикатор прямо на плате. Новичкам тоже интересно: работу своего кода сразу видно на матрице.
- Uno R4 Minima: подходит, если беспроводная связь не нужна, а нужны больше памяти, скорость, ЦАП и USB-C. Благодаря разъёму SWD это ещё и хороший вариант, если хочется подключить внешний отладчик и выполнять код по шагам.
- Uno R3 или совместимый клон: по-прежнему имеет смысл, если есть старые проекты на библиотеках под AVR, хочется повторять примеры из учебника один в один или нужна минимальная цена; его пины спокойно держат 20 mA.
- ESP32: если нужен Wi-Fi с большим числом пинов и дешевле, стоит присмотреться и к плате ESP32; только помни, что она работает от 3,3 V (Arduino или ESP32?).
Итак, Uno R4 — это обновление, которое сохраняет привычную простоту Uno и добавляет память, скорость и новое железо; главное — помнить о лимите 8 mA и отличии Serial1. Чтобы подробно разобраться с пинами платы, загляни в статью Распиновка Arduino Uno. В приложении BlueGrays есть проекты со светодиодами, кнопками, датчиками, LCD и светодиодной матрицей для Arduino Uno с пошаговыми схемами подключения и кодом; они написаны на стандартных командах, поэтому работают и на R4, нужно лишь увеличить резисторы светодиодов до 470 Ω.
Частые вопросы
Чем Arduino Uno R4 отличается от R3?
Вместо 8-битного ATmega328P на 16 MHz, как у R3, в Uno R4 стоит 32-битный Renesas RA4M1 на 48 MHz. Флеш-память выросла с 32 КБ до 256 КБ, SRAM — с 2 КБ до 32 КБ, а ещё добавились 12-битный ЦАП, 14-битный АЦП, CAN, RTC, USB-C и поддержка USB-клавиатуры и мыши. Размер платы, расположение пинов и рабочее напряжение 5 V остались прежними.
Работают ли скетчи для Arduino Uno R3 на R4?
Большинство скетчей и библиотек на стандартных командах Arduino работают без изменений. Код, который напрямую обращается к регистрам AVR вроде PORTB, настройкам Timer1 или заголовочным файлам avr/, не скомпилируется. Кроме того, в скетчах, которые читают модули на D0/D1, нужно писать Serial1 вместо Serial.
Что взять: Arduino Uno R4 WiFi или Minima?
Бери R4 WiFi, если проектам нужны Wi-Fi, Bluetooth или управление с телефона; встроенная светодиодная матрица и разъём Qwiic идут бонусом. Если беспроводная связь не нужна, Minima дешевле и даёт ту же производительность на том же процессоре.
Какой ток может дать пин Arduino Uno R4?
Arduino рекомендует брать не больше 8 mA с пина Uno R4, тогда как у R3 это 20 mA. Поэтому для светодиодов ставь не 220 Ω, а минимум 470 Ω, а нагрузками вроде реле, моторов и зуммеров управляй через транзистор или MOSFET.
Подходят ли шилды для Arduino R3 к Uno R4?
Да. У R4 Minima и R4 WiFi тот же размер платы, то же расположение разъёмов и тот же логический уровень 5 V, что и у R3, поэтому большинство шилдов с драйверами моторов, реле и датчиками ставятся напрямую. Обновление программной части может понадобиться, только если библиотека шилда содержит код под AVR.
Поддерживает ли Arduino Uno R4 WiFi Bluetooth?
Да, встроенный модуль ESP32-S3 поддерживает Bluetooth 5 LE и работает с библиотекой ArduinoBLE. Но Wi-Fi и Bluetooth делят одну антенну, поэтому одновременно они не работают. Классическое последовательное Bluetooth-соединение, как у HC-05, не поддерживается; приложение на телефоне должно использовать BLE.
Что собрать после прочтения
Все проекты
Мигающий светодиод
Самое первое «привет» в электронике: включение и выключение одного светодиода. Arduino включает и выключает светодиод через короткие промежутки, поэтому свет быстро мигает. Ты самым простым способом в

Светофор
Крошечная копия светофора, который ты каждый день видишь на дороге. Красный горит две секунды, жёлтый мигает на мгновение, зелёный горит две секунды, затем через жёлтый снова возвращается красный, и т

Управление светодиодом кнопкой (удержание)
Как дверной звонок: свет горит, пока ты нажимаешь, и гаснет, когда отпускаешь. Arduino всё время слушает кнопку; пока она нажата, светодиод горит, а как только ты убираешь палец, он гаснет. Эта просте

Измерение расстояния HC-SR04 (вывод в порт)
Датчик HC-SR04 работает совсем как летучая мышь, которая находит дорогу в темноте: он посылает звук, которого ты не слышишь, слушает эхо и измеряет, насколько далеко предмет перед ним. Arduino каждые

Температура и влажность с DHT11
Насколько тепло в твоей комнате и влажный ли воздух или сухой? Датчик DHT11 измеряет температуру и влажность, а Arduino выводит значения на двухстрочный LCD-экран и обновляет их каждые пару секунд. Ес

Часы и календарь на матрице (MAX7219, DS1307)
Светящееся табло для стола или стены, которое показывает время и дату бегущей строкой. На светодиодном дисплее 8x32 крупные цифры часов, а две точки между ними мигают каждую секунду; в начале каждой м

Пиксельная змейка на матрице 8x8
Собери классическую игру «Змейка» своими руками и сыграй в неё. На цветной светодиодной матрице 8x8 ты джойстиком управляешь зелёной змейкой и ешь красные яблоки; с каждым яблоком змейка растёт, немно

Анимация и текст на 4 матрицах 32x8
Сложи четыре длинных светодиодных матричных модуля друг на друга, и получится квадратный экран из более чем тысячи светящихся точек. Сначала буквы сыплются сверху, как дождь в кино, затем открывается
Другие статьи
Приложение BlueGrays
Собери эту схему шаг за шагом в телефоне
Схема подключения, код и список деталей на одном экране. 200+ проектов на Arduino, ESP32 и Pico готовы к сборке.
Наведи камеру телефона
Наведи камеру на код — откроется магазин приложений на телефоне.
или открыть магазин

