Руководство пользователя Arduino UNO R4 WiFi
Узнайте, как настроить Arduino UNO R4 WiFi — четвёртую ревизию нашей самой популярной и важной платы для разработки.
Arduino UNO — наша самая популярная и узнаваемая во всём мире плата для разработки, ставшая основой мейкерского сообщества и образования с момента выпуска. Плата Arduino UNO R4 WiFi относится к 4-й ревизии плат UNO и является первой, оснащённой 32-битным микроконтроллером (серия RA4M1 от Renesas).
Данный документ представляет собой техническое руководство по UNO R4 WiFi, где вы найдёте ссылки на ресурсы и руководства, которые помогут вам начать работу над следующим проектом.
Модуль ESP32 и чип Renesas RA4M1 являются частью сложной USB-Serial системы, которая обладает высокой гибкостью и адаптивностью, позволяя использовать функции HID, сохраняя при этом возможность программирования как основного микроконтроллера, так и ESP32, если вы того пожелаете (хотя это продвинутый вариант, требующий определённых навыков).
Важно
Встроенный модуль ESP32 по умолчанию работает с прошивкой, которая обеспечивает подключение для UNO R4 WiFi. Вам может потребоваться обновить эту прошивку для включения новых функций или устранения ошибок и других проблем. Существует несколько способов обновления прошивки, и все они подробно описаны в статье центра поддержки.
Вы также можете посетить платформу документации для Arduino UNO R4 WiFi.
Техническое описание (Datasheet)
Полное техническое описание доступно для скачивания в формате PDF по ссылке ниже:
Питание
Плата может питаться через вывод VIN с поддержкой напряжения в диапазоне от 6 до 24 В. Вывод VIN также подключён к разъёму DC (штекерный разъём типа «бочонок»).
При питании через вывод VIN вы используете встроенный стабилизатор напряжения для снижения напряжения до 5 В, что означает, что вывод 5 V может обеспечить ток до 1,2 А. Имейте в виду, что этот стабилизатор также питает остальную часть платы, включая микроконтроллер, светодиоды и другие компоненты.
Предупреждение
Внешние устройства с высоким потреблением тока (например, сервомоторы) никогда не следует питать через вывод 5 V. Он предназначен в основном для устройств с низким потреблением тока, таких как модули датчиков.
Если вы используете разъём USB-C, необходимо обеспечить питание 5 В.
При питании через USB встроенный стабилизатор напряжения полностью обходится. В этом случае вывод 5 V может обеспечить ток до 2 А без повреждения платы.
Пакет платы (Board Package)
UNO R4 WiFi основан на пакете платы Arduino UNO R4.
Установка
UNO R4 WiFi можно программировать через Arduino IDE, Arduino Cloud Editor или Arduino CLI.
Arduino IDE
Для использования платы в Arduino IDE необходимо установить последнюю версию пакета Arduino UNO R4 Boards из менеджера плат.
Подробнее читайте в руководстве Начало работы с UNO R4 WiFi.
Arduino Cloud Editor
Cloud Editor — это онлайн-IDE, которая включает все официальные платы, и установка пакета платы не требуется. Для использования Cloud Editor необходимо установить Create Plugin на ваш компьютер.
Подробнее читайте в руководстве Начало работы с Cloud Editor.
Arduino Cloud
Arduino UNO R4 WiFi совместим с Arduino Cloud — облачным сервисом, который позволяет создавать IoT-приложения за считанные минуты.
Совет
Посетите руководство Начало работы с Arduino Cloud для получения дополнительной информации.
Renesas RA4M1
UNO R4 WiFi оснащён мощным и надёжным микроконтроллером Renesas, который также установлен на UNO R4 Minima. Микроконтроллеры Renesas известны своей высокой производительностью и надёжностью, включая встроенный набор периферийных устройств.
Эти периферийные устройства включают аналого-цифровые преобразователи, таймеры, блоки широтно-импульсной модуляции (ШИМ), интерфейсы связи (такие как UART, SPI и I2C) и многое другое.
Микроконтроллер на UNO R4 WiFi
Память
Плата оснащена:
32 КБ SRAM
256 КБ Flash
8 КБ памяти данных (EEPROM)
Выводы (Pins)
UNO R4 WiFi предоставляет доступ ко множеству различных выводов, и многие из них имеют специальные функции, которые будут рассмотрены в следующих разделах этой статьи. Продолжайте чтение, чтобы узнать, что вы можете с ними делать.
Если вам нужен быстрый обзор функциональности выводов, ниже представлена полная таблица всех выводов ввода-вывода на UNO R4 WiFi.
Вывод |
Тип |
Функция |
|---|---|---|
D0 |
Цифровой |
Приём UART |
D1 |
Цифровой |
Передача UART |
D2 |
Цифровой |
GPIO, прерывание |
D3 |
Цифровой |
GPIO, прерывание, ШИМ |
D4 |
Цифровой |
GPIO |
D5 |
Цифровой |
GPIO, ШИМ |
D6 |
Цифровой |
GPIO, ШИМ |
D7 |
Цифровой |
GPIO |
D8 |
Цифровой |
GPIO |
D9 |
Цифровой |
GPIO, ШИМ |
D10 |
Цифровой |
SPI (CS), GPIO, ШИМ |
D11 |
Цифровой |
SPI (COPI), GPIO, ШИМ |
D12 |
Цифровой |
SPI (CIPO), GPIO |
D13 |
Цифровой |
SPI (SCK), GPIO, встроенный светодиод |
A0 |
Аналоговый |
Аналоговый вход, DAC OUT |
A1 |
Аналоговый вход |
Аналоговый вход, OPAMP + |
A2 |
Аналоговый вход |
Аналоговый вход, OPAMP - |
A3 |
Аналоговый |
Аналоговый вход, OPAMP OUT |
A4 |
Аналоговый вход |
Аналоговый вход, SDA* |
A5 |
Аналоговый вход |
Аналоговый вход, SCL* |
Примечание
*Выводы A4 и A5 подключены к одной и той же шине I2C.
Аналоговые выводы
UNO R4 WiFi имеет шесть аналоговых входов (A0-A5), которые можно считывать с помощью функции analogRead().
Вывод |
Тип |
Функция |
|---|---|---|
A0 |
Аналоговый |
Аналоговый вход, DAC |
A1 |
Аналоговый |
Аналоговый вход, OPAMP + |
A2 |
Аналоговый |
Аналоговый вход, OPAMP - |
A3 |
Аналоговый |
Аналоговый вход, OPAMP OUT |
A4 |
Аналоговый |
Аналоговый вход, SDA* |
A5 |
Аналоговый |
Аналоговый вход, SCL* |
Примечание
*Выводы A4 и A5 подключены к одной и той же шине I2C.
value = analogRead(pin);
Опорное напряжение по умолчанию для этих выводов составляет 5 В, но его можно изменить следующим образом:
analogReference(AR_DEFAULT)— опорное напряжение по умолчанию 5 ВanalogReference(AR_INTERNAL)— встроенное опорное напряжение 1,5 В
Разрешение по умолчанию установлено на 10 бит, но его можно увеличить до 12 и 14 бит. Для этого используйте следующий метод в setup() вашего скетча:
analogReadResolution(10)— по умолчаниюanalogReadResolution(12)analogReadResolution(14)
Чтобы узнать больше о возможностях АЦП UNO R4 WiFi, ознакомьтесь с руководством по разрешению АЦП.
Выводы OPAMP
RA4M1 имеет встроенный операционный усилитель (OPAMP), который доступен на UNO R4 WiFi следующим образом:
Вывод |
OPAMP |
|---|---|
A1 |
OPAMP + |
A2 |
OPAMP - |
A3 |
OPAMP OUT |
Цифровые выводы
UNO R4 WiFi имеет 14 цифровых выводов. Некоторые из них выполняют другие функции и не должны использоваться для GPIO, если у вас есть другие свободные выводы.
Вывод |
Функция |
Примечания |
|---|---|---|
0 |
RX |
Последовательная связь |
1 |
TX |
Последовательная связь |
2 |
GPIO |
Цифровой вывод |
3 |
ШИМ |
Цифровой вывод, ШИМ |
4 |
GPIO |
Цифровой вывод |
5 |
ШИМ |
Цифровой вывод, ШИМ |
6 |
ШИМ |
Цифровой вывод, ШИМ |
7 |
GPIO |
Цифровой вывод |
8 |
GPIO |
Цифровой вывод |
9 |
ШИМ |
Цифровой вывод, ШИМ |
10 |
ШИМ |
Цифровой вывод, ШИМ |
11 |
ШИМ |
Цифровой вывод, ШИМ |
12 |
GPIO |
Цифровой вывод |
13 |
GPIO |
Цифровой вывод |
Опорное напряжение всех цифровых выводов составляет 5 В.
ШИМ (PWM)
ШИМ (широтно-импульсная модуляция) позволяет цифровому выводу эмулировать аналоговый выход за счёт очень быстрого переключения между включённым и выключенным состояниями, что позволяет, помимо прочего, регулировать яркость светодиодов, подключённых к цифровым выводам.
UNO R4 WiFi поддерживает ШИМ на выводах, отмеченных значком ~ на разъёмах. Официально поддерживаемые выводы:
Вывод |
RA4M1 |
Таймер |
|---|---|---|
D3 |
P105 |
GTIOC1A |
D5 |
P107 |
GTIOC0A |
D6 |
P111 |
GTIOC3A |
D9 |
P303 |
GTIOC7B |
D10 |
P103 |
GTIOC2A |
D11 |
P411 |
GTIOC6A |
Вы можете использовать их как аналоговые выходы с помощью функции:
analogWrite(pin, value);
По умолчанию разрешение составляет 8 бит (0-255). Вы можете использовать analogWriteResolution() для его изменения, поддерживая разрешение до 12 бит (0-4096).
analogWriteResolution(resolution);
Обратите внимание, что следующие выводы поддерживают ШИМ, но могут конфликтовать с другими функциями платы UNO R4 WiFi. При написании библиотечных функций не используйте их, так как они не являются официально поддерживаемыми выводами ШИМ.
Вывод |
RA4M1 |
Таймер |
|---|---|---|
D0 |
P301 |
GTIOC4B |
D1 |
P302 |
GTIOC4A |
D2 |
P104 |
GTIOC1B |
D4 |
P106 |
GTIOC0B |
D7 |
P112 |
GTIOC3B |
D8 |
P304 |
GTIOC7A |
D12 |
P410 |
GTIOC6B |
D13 |
P102 |
GTIOC2B |
D18 / SDA |
P101 |
GTIOC5A |
D19 / SCL |
P100 |
GTIOC5B |
LED-матрица
LED-матрица на UNO R4 WiFi доступна для использования в вашей программе: для отображения статичной графики, анимаций и даже игр. Пакет платы UNO R4 включает библиотеку Arduino_LED_Matrix для вывода кадров на матрицу.
Чтобы подробнее узнать о LED-матрице, ознакомьтесь с руководством по LED-матрице.
Arduino_LED_Matrix matrix— инициализирует LED-матрицу.Arduino_LED_Matrix.load()— загружает кадр в буфер кадров.
Вот базовый пример:
// создаёт массив из двух кадров
const uint32_t frames[][4] = {
{
0x0,
0x0,
0xc00c0000,
150
},
{
0x0,
0x1e01,
0x201201e0,
150
}
}
// загружает кадры в буфер матрицы
matrix.load(frames);
DAC
UNO R4 WiFi также имеет ЦАП (цифро-аналоговый преобразователь) с разрешением до 12 бит, который может работать как настоящий аналоговый выход, что делает его ещё более функциональным по сравнению с выводами ШИМ.
analogWrite(pin, value);
Вывод DAC
Разрешение записи по умолчанию для этого вывода DAC составляет 8 бит. Это означает, что записываемые значения должны находиться в диапазоне 0-255.
Однако вы можете изменить разрешение записи при необходимости, вплоть до 12 бит, и в этом случае записываемые значения должны находиться в диапазоне 0-4096.
analogWriteResolution(12);
Чтобы узнать больше о возможностях ЦАП UNO R4 WiFi, ознакомьтесь с руководством по DAC.
RTC (Часы реального времени)
Часы реального времени (RTC) используются для измерения времени и полезны в любых приложениях, связанных с отслеживанием времени.
Важно
UNO R4 WiFi имеет вывод VRTC, который используется для поддержания работы встроенного RTC даже при отключении питания платы. Для этого подайте напряжение в диапазоне 1,6-3,6 В на вывод VRTC.
Ниже приведён минимальный пример, показывающий, как получить дату и время от RTC:
#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;
// Получаем текущее время от RTC
RTC.getTime(currenttime);
// Выводим дату (ДД/ММ/ГГГГ)
Serial.print(currenttime.getDayOfMonth());
Serial.print("/");
Serial.print(Month2int(currenttime.getMonth()));
Serial.print("/");
Serial.print(currenttime.getYear());
Serial.print(" - ");
// Выводим время (ЧЧ:ММ:СС)
Serial.print(currenttime.getHour());
Serial.print(":");
Serial.print(currenttime.getMinutes());
Serial.print(":");
Serial.println(currenttime.getSeconds());
delay(1000);
}
Чтобы узнать больше о возможностях RTC UNO R4 WiFi, ознакомьтесь с руководством по RTC.
EEPROM
EEPROM, также называемая памятью «данных», — это тип памяти, который может сохранять данные даже после выключения платы.
EEPROM.write(address, val);
EEPROM.read(address);
Она имеет ограниченное количество циклов записи, что означает, что она лучше всего подходит для приложений, работающих в основном на чтение. Убедитесь, что вы никогда не используете write() внутри void loop(), так как вы можете исчерпать все циклы записи микросхемы.
Подробнее читайте в руководстве по EEPROM.
Чтобы узнать больше о возможностях EEPROM UNO R4 WiFi, ознакомьтесь с руководством по EEPROM.
SPI
Выводы SPI
UNO R4 WiFi оснащён шиной последовательного периферийного интерфейса (SPI). Шина (разъём) „SPI“ использует следующие выводы:
(COPI) — D11
(CIPO) — D12
(SCK) — D13
(CS) — D10
Следующий пример показывает, как использовать SPI:
#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
I2C позволяет подключать несколько совместимых устройств I2C последовательно, используя всего два вывода. Контроллер отправляет информацию через шину I2C на 7-битный адрес, что означает, что техническое ограничение составляет 128 устройств I2C на одной линии. На практике вы никогда не достигнете 128 устройств до того, как вступят в силу другие ограничения.
UNO R4 WiFi имеет одну шину I2C, обозначенную SCL и SDA. Они совмещены с A4 (SDA) и A5 (SCL), что знакомо владельцам предыдущих версий UNO. Подтягивающие резисторы не установлены на печатной плате, но имеются посадочные места для их монтажа при необходимости.
Выводы, используемые для I2C на UNO R4 WiFi:
SDA — D18
SCL — D19
Выводы I2C
Для подключения устройств I2C необходимо подключить библиотеку Wire в начале скетча.
#include <Wire.h>
Внутри void setup() необходимо инициализировать библиотеку и указать порт I2C, который вы хотите использовать.
Wire.begin() //SDA & SDL
Wire1.begin(); //SDA1 & SDL1
Wire2.begin(); //SDA2 & SDL2
Для записи данных на устройство, подключённое через I2C, можно использовать следующие команды:
Wire.beginTransmission(1); //начать передачу на устройство 1
Wire.write(byte(0x00)); //отправить байт инструкции
Wire.write(val); //отправить значение
Wire.endTransmission(); //завершить передачу
Разъём QWIIC
Разъём Qwiic на UNO WiFi R4
Важно
Разъём Qwiic на UNO R4 WiFi подключён к вторичной шине I2C (IIC0), которая использует объект Wire1, а не объект Wire. Обратите внимание, что разъём Qwiic работает только с напряжением 3,3 В.
UNO R4 WiFi оснащён разъёмом Qwiic/STEMMA, который можно использовать для подключения модулей, часто позволяя соединять несколько модулей последовательно и управлять ими через один разъём.
Qwiic и STEMMA — это названия типов разъёмов, разработанных компаниями SparkFun и Adafruit соответственно, которые объединяют выводы I2C платы разработки и модулей расширения. Это означает, что если у вас есть плата разработки (например, Arduino UNO R4 WiFi) и модуль расширения, и оба имеют разъём Qwiic или STEMMA, вы можете соединить их вместе и при минимальном количестве проводов быстро создавать многофункциональные проекты.
Если ваш модуль расширения имеет более одного такого разъёма (как у многих), вы можете использовать второй для последовательного подключения ещё одного модуля Qwiic, чтобы добавить ещё один интерактивный узел в ваш проект.
UNO R4 WiFi имеет две шины I2C, и разъём Qwiic подключён к вторичной. Это означает, что при использовании библиотеки Wire вам нужно использовать объект Wire1, а не объект Wire, как в следующем примере:
#include <Wire.h>
void setup(){
Wire1.begin();
Wire1.beginTransmission(1); //начать передачу на устройство 1
Wire1.write(byte(0x00)); //отправить байт инструкции
Wire1.write(val); //отправить значение
Wire1.endTransmission(); //завершить передачу
}
USB Serial и UART
Плата UNO R4 WiFi имеет 2 отдельных аппаратных последовательных порта.
Один порт доступен через USB-C, и
Один доступен через выводы RX/TX.
Это одно из немногих существенных отличий UNO R3 от UNO R4, так как UNO R3 имеет только один аппаратный последовательный порт, который подключён одновременно к USB-порту и выводам RX/TX на плате.
Выводы, используемые для UART на UNO R4 WiFi:
Вывод |
Функция |
|---|---|
D0 |
RX (приём) |
D1 |
TX (передача) |
Native USB
Отправка последовательных данных на компьютер выполняется с помощью стандартного объекта Serial.
Serial.begin(9600);
Serial.print("hello world");
Для отправки и получения данных через UART сначала необходимо установить скорость передачи данных (baud rate) внутри void setup().
UART
Выводы, используемые для UART на UNO R4 WiFi:
Вывод |
Функция |
|---|---|
D0 |
RX0 |
D1 |
TX0 |
Для отправки и получения данных через UART сначала необходимо установить скорость передачи данных внутри void setup(). Обратите внимание, что при использовании UART (выводов RX/TX) мы используем объект Serial1.
Serial1.begin(9600);
Для чтения входящих данных можно использовать цикл while для чтения каждого отдельного символа и добавления его в строку.
while(Serial1.available()){
delay(2);
char c = Serial1.read();
incoming += c;
}
Для отправки данных можно использовать следующую команду:
Serial1.write("Hello world!");
Serial Event
Метод serialEvent() поддерживается на более ранних версиях платы UNO, но не поддерживается на платах UNO R4 (и на любых других новых платах Arduino).
Однако, поскольку этот метод используется только для обнаружения последовательных данных и выполнения функции, вы также можете использовать Serial.available() для определения наличия новых данных:
if(Serial.available() > 0) {
//код здесь
}
Таймеры
В Arduino API есть класс FspTimer, который предоставляет весь необходимый функционал для использования таймеров в скетче.
UNO R4 WiFi имеет два периферийных устройства таймеров: асинхронный таймер общего назначения (AGT) и таймер ШИМ общего назначения (GPT). На плате есть два таймера AGT, один из которых используется для методов измерения времени, таких как millis() и microseconds().
На плате имеется 7 таймеров GPT для выполнения задач ШИМ, например, вычисления коэффициента заполнения путём измерения времени активности сигнала. Можно использовать эти зарезервированные таймеры ШИМ с помощью упомянутой ранее библиотеки FspTimer. Использование этой функции явно запросит таймер ШИМ:
FspTimer::force_use_of_pwm_reserved_timer();
При использовании функций таймера библиотеки необходимо указать тип таймера — AGT или GPT. Это можно объявить в скетче следующим образом:
uint8_t gpt_timer_type = GPT_TIMER;
uint8_t agt_timer_type = AGT_TIMER;
SerialUSB
UNO R4 WiFi имеет расширенный набор методов Serial, которые можно включить при подключении библиотеки <HID.h> в вашем скетче.
Serial.baud()— возвращает текущую скорость передачи данных (int).Serial.stopbits()— возвращает количество стоп-битов (int), используемых в связи.Serial.paritytype()— возвращает тип чётности (int), используемый в связи.Serial.numbits()— возвращает количество бит данных (int), используемых в связи.Serial.dtr()— возвращает статус сигнала Data Terminal Ready (DTR) (bool) и также устанавливает флаг ignore_dtr в true, если сигнал DTR активно используется.Serial.rts()— возвращает статус сигнала Request to Send (RTS) (bool).
Библиотека <HID.h> переназначает объект Serial на SerialUSB, что включает эти дополнительные функции.
Полезные ссылки:
SerialUSB.h (Github)
USB HID
Примечание
Обратите внимание, что из-за особенностей реализации USB-порта на UNO R4 WiFi при использовании HID плата может отображаться как другой USB-порт. Если это произойдёт, просто дважды нажмите кнопку сброса и выберите плату снова.
Эта плата может работать как HID-устройство (клавиатура/мышь) и отправлять нажатия клавиш или координаты на компьютер через нативный USB.
keyboard.press('W');
mouse.move(x,y);
Эта поддержка обеспечивается библиотеками keyboard и mouse, которые можно установить из менеджера библиотек в IDE.
Чтобы узнать больше о возможностях HID UNO R4 WiFi, ознакомьтесь с руководством по HID.
Serial Remap
При подключении библиотеки <HID.h> в скетче объект serial переключается с Serial на SerialUSB для поддержки функций HID. Это включает дополнительные методы, перечисленные в разделе SerialUSB.
Полезные ссылки:
HID.h (Github)
Модуль CAN
Встроенный модуль CAN микроконтроллера RA4M1 на UNO R4 WiFi соответствует стандартам CAN 2.0A/CAN 2.0B.
Выводы CANRX и CANTX можно подключить к приёмопередатчику CAN, например, к микросхемам MCP2551 или TJA1050.
Вывод |
Функция |
|---|---|
D10 |
CANTX |
D13 |
CANRX |
Для связи с другими CAN-устройствами используется встроенная библиотека Arduino_CAN.
//устанавливаем скорость передачи CAN и инициализируем библиотеку
//выбирайте из BR_125k, BR_250k, BR_500k, BR_1000k
CAN.begin(CanBitRate::BR_250k);
Создание и отправка CAN-сообщения:
uint8_t const msg_data[] = {0xCA,0xFE,0,0,0,0,0,0};
memcpy((void *)(msg_data + 4), &msg_cnt, sizeof(msg_cnt));
CanMsg msg(CAN_ID, sizeof(msg_data), msg_data);
CAN.write(msg);
Чтение входящего CAN-сообщения:
CanMsg const msg = CAN.read(); //чтение
Предупреждение
Без CAN-приёмопередатчика невозможно обмениваться данными с другими CAN-устройствами.
Чтобы узнать больше о возможностях CAN UNO R4 WiFi, ознакомьтесь с руководством по CAN.
ESP32-S3-MINI-1-N8
По умолчанию модуль ESP32-S3 на плате UNO R4 WiFi работает как мост Serial, обеспечивая подключение к вашему компьютеру. Он также управляет перезагрузкой основного микроконтроллера Renesas RA4M1, когда это необходимо, например, при получении нового скетча и сбросе.
На UNO R3 аналогичную роль выполняет ATMEGA16U2. Встроенный модуль ESP32 — это более продвинутая СнК (система на кристалле), добавляющая плате возможности Wi-Fi и Bluetooth.
ESP32 также предоставляет доступ к линиям данных ESP32, так что вы можете программировать ESP32 напрямую. Эти линии данных доступны через разъём 3x2 в верхней части платы или через контактные площадки на нижней стороне.
Предупреждение
Обратите внимание, что ESP32 имеет прошивку по умолчанию, настроенную для связи с чипом RA4M1. Любое прямое программирование ESP32 перезапишет эту прошивку, и связь между чипами может быть нарушена до восстановления прошивки по умолчанию.
UNO R4 и UNO R3
USB-мост
По умолчанию ESP32 работает как мост serial между компьютером и микроконтроллером RA4M1. Линии данных USB проходят через переключатели, и по умолчанию эти переключатели настроены для связи через модуль ESP32.
Переключатели для последовательной связи
При желании вы можете изменить это и получить прямой доступ к шине serial микроконтроллера RA4M1 программно или аппаратно. Смотрите инструкции ниже:
Программно — установив D21 в состояние HIGH, вы замкнёте цепь, управляющую тем, какой микроконтроллер подключён к USB. Пока D21 в состоянии HIGH, RA4M1 подключён к последовательному порту USB, а пока D21 в состоянии LOW, подключён ESP32, как в конфигурации по умолчанию. Для этого добавьте следующий код в
void setup():
pinMode(21, OUTPUT);
digitalWrite(21, HIGH);
На задней стороне UNO R4 WiFi вы найдёте контактные площадки с надписью «RA4M1 USB». Если вы создадите короткое замыкание между этими площадками, например, соединив их припоем, RA4M1 будет подключён к последовательному порту USB вместо ESP32.
Контактные площадки RA4M1 USB
Wi-Fi
ESP32 на плате UNO R4 WiFi обеспечивает возможности Wi-Fi. Модуль Wi-Fi имеет скорость передачи данных до 150 Мбит/с. Модуль ESP32 имеет встроенную трассовую антенну, что означает, что внешняя антенна для использования функций связи не требуется. Однако эта трассовая антенна используется совместно с модулем Bluetooth, что означает, что вы не можете использовать Bluetooth и Wi-Fi одновременно.
Для использования функций Wi-Fi UNO R4 WiFi используйте библиотеку WiFiS3, которая встроена в пакет платы UNO R4.
Чтобы узнать больше о возможностях Wi-Fi UNO R4 WiFi, попробуйте примеры работы с сетью.
Bluetooth
Благодаря модулю ESP32 плата UNO R4 WiFi поддерживает Bluetooth LE и Bluetooth 5 со скоростью до 2 Мбит/с. Модуль ESP32 имеет встроенную трассовую антенну, что означает, что внешняя антенна для использования функций связи не требуется. Однако эта трассовая антенна используется совместно с модулем Bluetooth, что означает, что вы не можете использовать Bluetooth и Wi-Fi одновременно.
Ниже приведён пример скетча, который сканирует устройства Bluetooth:
#include <ArduinoBLE.h>
void setup() {
Serial.begin(9600);
while (!Serial);
// начало инициализации
if (!BLE.begin()) {
Serial.println("starting Bluetooth® Low Energy module failed!");
while (1);
}
Serial.println("Bluetooth® Low Energy Central - Peripheral Explorer");
// начинаем сканирование периферийных устройств
BLE.scan();
}
void loop() {
// проверяем, было ли обнаружено периферийное устройство
BLEDevice peripheral = BLE.available();
if (peripheral) {
// обнаружено периферийное устройство, выводим адрес, локальное имя и UUID сервиса
Serial.print("Found ");
Serial.print(peripheral.address());
Serial.print(" '");
Serial.print(peripheral.localName());
Serial.print("' ");
Serial.print(peripheral.advertisedServiceUuid());
Serial.println();
// проверяем имя периферийного устройства
if (peripheral.localName() == "<PERIPHERAL_NAME>") {
// останавливаем сканирование
BLE.stopScan();
explorerPeripheral(peripheral);
// периферийное устройство отключено, мы закончили
while (1) {
// ничего не делаем
}
}
}
}
void explorerPeripheral(BLEDevice peripheral) {
// подключаемся к периферийному устройству
Serial.println("Connecting ...");
if (peripheral.connect()) {
Serial.println("Connected");
} else {
Serial.println("Failed to connect!");
return;
}
// обнаруживаем атрибуты периферийного устройства
Serial.println("Discovering attributes ...");
if (peripheral.discoverAttributes()) {
Serial.println("Attributes discovered");
} else {
Serial.println("Attribute discovery failed!");
peripheral.disconnect();
return;
}
// читаем и выводим имя устройства
Serial.println();
Serial.print("Device name: ");
Serial.println(peripheral.deviceName());
Serial.print("Appearance: 0x");
Serial.println(peripheral.appearance(), HEX);
Serial.println();
// перебираем сервисы периферийного устройства
for (int i = 0; i < peripheral.serviceCount(); i++) {
BLEService service = peripheral.service(i);
exploreService(service);
}
Serial.println();
// исследование завершено, отключаемся
Serial.println("Disconnecting ...");
peripheral.disconnect();
Serial.println("Disconnected");
}
void exploreService(BLEService service) {
// выводим UUID сервиса
Serial.print("Service ");
Serial.println(service.uuid());
// перебираем характеристики сервиса
for (int i = 0; i < service.characteristicCount(); i++) {
BLECharacteristic characteristic = service.characteristic(i);
exploreCharacteristic(characteristic);
}
}
void exploreCharacteristic(BLECharacteristic characteristic) {
// выводим UUID и свойства характеристики
Serial.print("\tCharacteristic ");
Serial.print(characteristic.uuid());
Serial.print(", properties 0x");
Serial.print(characteristic.properties(), HEX);
// проверяем, читаема ли характеристика
if (characteristic.canRead()) {
// читаем значение характеристики
characteristic.read();
if (characteristic.valueLength() > 0) {
// выводим значение характеристики
Serial.print(", value 0x");
printData(characteristic.value(), characteristic.valueLength());
}
}
Serial.println();
// перебираем дескрипторы характеристики
for (int i = 0; i < characteristic.descriptorCount(); i++) {
BLEDescriptor descriptor = characteristic.descriptor(i);
exploreDescriptor(descriptor);
}
}
void exploreDescriptor(BLEDescriptor descriptor) {
// выводим UUID дескриптора
Serial.print("\t\tDescriptor ");
Serial.print(descriptor.uuid());
// читаем значение дескриптора
descriptor.read();
// выводим значение дескриптора
Serial.print(", value 0x");
printData(descriptor.value(), descriptor.valueLength());
Serial.println();
}
void printData(const unsigned char data[], int length) {
for (int i = 0; i < length; i++) {
unsigned char b = data[i];
if (b < 16) {
Serial.print("0");
}
Serial.print(b, HEX);
}
}
Если вы хотите узнать больше о Bluetooth LE, ознакомьтесь с нашей статьёй о Bluetooth.
Программирование ESP32 (Продвинутый уровень)
Модуль ESP32 и чип Renesas RA4M1 являются частью сложной USB-Serial системы, которая обладает высокой гибкостью и адаптивностью, позволяя использовать функции HID, сохраняя при этом возможность программирования как основного микроконтроллера, так и ESP32, если вы того пожелаете. По умолчанию ESP32 используется в основном как радиомодуль для Wi-Fi и Bluetooth.
Перезапись прошивки ESP32 нарушает связь между двумя микроконтроллерами, но позволяет им работать независимо. Если вы хотите восстановить плату в исходное состояние, вы можете выполнить шаги для espflash в статье центра поддержки.
Примечание
Для перепрограммирования модуля ESP32 необходимо замкнуть вывод ESP_Download на GND при сбросе платы. Это переведёт модуль ESP32 в режим загрузчика, в котором можно установить соединение с ним и перепрограммировать модуль.
Для перепрограммирования платы ESP32 вы можете использовать контактные площадки UART рядом с модулем ESP32, расположенные так, как показано на изображении ниже:
Контактные площадки данных ESP32
или вы можете использовать выводы, доступные непосредственно на разъёме ESP32, показанные здесь:
Разъём выводов данных ESP32