Электронный компонент:Seeeduino Cloud
Seeeduino Cloud[1]
Seeeduino Cloud – это микроконтроллерная плата на базе модуля Dragino HE и процессора ATmega32u4. HE (переводе с китайского «HE» означает «сердцевина») – это недорогой и высокопроизводительный WiFi-модуль (150 м, 2.4 ГГц), на который установлена операционная система OpenWrt. Seeeduino Cloud совместима с платами Arduino и «шилдами» Arduino, на 100% совместима с Grove, а также с IDE Arduino (начиная с версии 1.5.3). Помимо стандартного интерфейса Arduino, Seeeduino Cloud также оснащена встроенной поддержкой Ethernet и WiFi, а также портом USB-A, что делает ее очень удобной для конструирования прототипов, которым требуется сетевое соединение и память большой емкости. Кроме того, Seeeduino Cloud отлично подойдет на роль межсетевого интерфейса для проектов в сфере интернета вещей.
Применение
- Интернет вещей
- Умный дом
- Обучение
Вот несколько интересных проектов с использованием Seeeduino Cloud:
Функции
- Совместимость с Arduino Yun
- Сделана на базе WiFi-модуля Dragino HE
- Операционная система OpenWrt (с открытым кодом)
- Поддержка WiFi (2.4 ГГц, 802.11 b/g/n)
- Поддержка Ethernet
- Поддержка USB 2.0
- Встроенные коннекторы Grove
Характеристики
Seeeduino Cloud оснащена двумя процессорами, поэтому эта глава поделена на две части – по каждой на процессор.
Модуль Dragino HE
Параметр | Значение |
---|---|
Процессор | ATHEROS AR9331 |
Тактовая частота | 400 МГц |
RAM | 64 Мб |
Flash-память | 16 Мб |
Операционная система | OpenWrt |
Интерфейсы | Два RJ45, один USB-хост, один UART, четырнадцать GPIO-контактов |
Питание | 3.3 вольта |
WiFi | 150 м, 2.4 ГГц, 802 b/g/n |
Микроконтроллер AVR
Параметр | Значение |
---|---|
Микроконтроллер | ATmega32u4 |
Flash-память | 32 Кб |
SRAM | 2,5 Кб |
EEPROM | 1 Кб |
Тактовая частота | 16 МГц |
Рабочее напряжение | 5 вольт |
Цифровые I/O контакты | 20 шт. |
Каналы ШИМ | 7 шт. |
Входные аналоговые каналы | 12 шт. |
Компоненты
На фото ниже изображены компоненты, установленные на Seeeduino Cloud.
- Ethernet-порт RJ45. Этот LAN-порт подключен к ATHEROS AR9331 и имеет собственный IP-адрес, который можно использовать для подключения к интернету и управления устройствами.
- Входной USB-порт. Позволяет подключить плату к ПК для программирования и питания. Micro USB – это широко распространенная версия USB, встречающаяся на телефонах Android и других устройствах. У вас дома наверняка можно найти большое количество кабелей этого типа.
- USB-хост. Позволяет подключаться к самым разнообразным USB-девайсам вроде веб-камер, USB-накопителей, клавиатур, джойстиков и т.д.
- Кнопка 32U4 RST. Нажатие на эту кнопку сбрасывает микроконтроллер ATmega32U4. Как правило, используется для перезапуска скетча.
- Кнопка SYS RST. Нажатие на эту кнопку перезагружает систему Linux (в виде дистрибутива OpenWRT).
- Кнопка WiFi RST. Нажатие на эту кнопку сбрасывает WiFi-настройки. Но есть один момент – кнопка поддерживает только долгое нажатие. Ее нужно зажать, держать в течение 5 секунд и лишь потом отпустить. Все другие настройки останутся без изменений. Если отпустить кнопку через 30 секунд после нажатия, это откатит ВСЕ настройки к фабричным значениям.
- Коннекторы Grove. Это коннекторы для интерфейсов UART и I2C. Коннектор I2C также подключен к аналоговым контактам A4 и A5 (для SDA и SCL) – на тот случай, если вы захотите использовать их для интерфейса I2C. Коннектор UART подключен к цифровым контактам 0 и 1 (для RX и TX).
- Порт ICSP. Это коннектор для ICSP-соединения ATmega32U4. Расположен на том месте, где у Arduino Uno, Due, Mega и Leonardo располагается стандартный гребешок ICSP/SPI. SPI-контакты этого порта (MISO, SCK и MOSI) также подключены к цифровым контактам 12, 13 и 11 (как на Arduino Uno).
- Контакты. К входным/выходным контактам процессора Atheros AR9331 доступа получить нельзя. Все они подключены к процессору ATmega32U4. Но все 20 цифровых контактов 32U4 можно использовать и в качестве входных, и в качестве выходных контактов – при помощи функций pinMode(), digitalWrite() и digitalRead(). Они работают на 5 вольтах. Кроме того, все эти контакты оснащены подтягивающими резисторами (по умолчанию отключены) на 20-50 кОм и могут дать/получить силу тока номиналом не более 40 мА. Кроме того, некоторые из этих контактов имеют специальные функции:
- Serial. Контакты 0 (RX) и 1 (TX). Используются для приема (RX) и отправки (TX) последовательных (TTL) данных при помощи аппаратного последовательного порта ATmega32U4. Обратите внимание, что на Seeeduino Cloud класс Serial используется для коммуникации по USB (CDC). Для TTL-коммуникации через контакты 0 и 1 используется класс Serial1. Аппаратные последовательные порты ATmega32U4 и AR9331 на Seeeduino Cloud подключены друг к другу и используются для коммуникации между этими двумя процессорами. Как обычно в системах Linux, последовательный порт AR9331 открыт для консоли, чтобы у пользователя был доступ к операционной системе. Это значит, что вы прямо из скетча можете получить доступ к программам и инструментам Linux.
- TWI. Контакты 2 (SDA) и 3 (SCL). Через них осуществляется коммуникация TWI при помощи библиотеки Wire.
- Внешние прерывания. Контакты 3 (прерывание 0), 2 (прерывание 1), 0 (прерывание 2), 1 (прерывание 3) и 7 (прерывание 4). Эти контакты можно настроить на срабатывание прерывания при переходе на значение LOW, при возрастающем/убывающем фронте импульса или при изменении значения. Более подробно читайте в статье о функции attachInterrupt(). Контакты 0 и 1 использовать для прерываний не рекомендуется, поскольку они также используются в качестве аппаратного последовательного порта, используемого для коммуникации с процессором Linux. Контакт 7 подключен к процессору AR9331 и в будущем, возможно, будет использоваться для квитирующего сигнала. Поэтому держите в уме, что использование этого контакта для прерывания когда-нибудь может привести к конфликту.
- ШИМ. Контакты 3, 5, 6, 9, 10, 11 и 13. Предназначены для выдачи 8-битной ШИМ при помощи функции analogWrite().
- SPI. Этот интерфейс находится на гребешке ICSP и на программном уровне осуществляется при помощи библиотеки SPI. Обратите внимание, что контакты SPI не соединены с цифровыми I/O контактами, как это сделано на Uno. Они доступны только на ICSP-коннекторе. Это значит, что если у вас есть «шилд», использующий SPI, но не оснащенный 6-контактным ICSP-коннектором, подключаемым к 6-контактому ICSP-коннектору на Seeeduino Cloud, этот «шилд» работать не будет. Контакты SPI также подключены к GPIO-контактам AR9331, благодаря чему процессоры ATmega32U4 и AR9331 также могут коммуницировать при помощи протокола SPI.
- Входные аналоговые контакты. Их 11 штук, и это A0-A5 (находятся на тех же местах, что и у Uno), A6-A11 (находятся на цифровых контактах 4,6, 8, 9, 10 и 12). Все входные аналоговые контакты можно также использовать в качестве обычных цифровых I/O контактов. Каждый из этих контактов имеет 10-битное разрешение (т.е. поддерживает 1024 разных значений). По умолчанию напряжение на этих контактах составляет от 0 до 5 вольт, но верхнюю границу вольтового диапазона можно поменять при помощи контакта AREF и функции analogReference().
- Контакт AREF. Опорное напряжение для входных аналоговых контактов. Используется вместе с функцией analogReference().
С чего начать
Seeeduino Cloud оснащена двумя процессорами. Первый – это ATmega32U4 как на Leonardo. Второй – Atheros AR9331, на котором работает Linux и беспроводной стек OpenWrt, благодаря которому плата может подключаться к сетям WiFi и Ethernet. Кроме того, благодаря библиотеке Bridge на Linux через IDE Arduino можно вызывать программы и скрипты, чтобы с их помощью подключаться к различным интернет-сервисам.
Программирование на ATmega32U4
Процессор ATmega32U4 программируется при помощи среды IDE Arduino. Если она у вас еще не установлена, то инструкции по установке можно почитать тут.
Установка драйвера
Во-первых, вам нужно:
- Взять кабель Micro-USB. Для этого подойдет, к примеру, кабель для передачи данных (такой обычно идет вместе с телефоном Android). Если у вас такого нет, то его можно купить тут.
Внимание! Пользуйтесь сокетом Micro USB как можно бережнее. Он хрупок, и его можно сломать.
- Подключить плату. Seeeduino Cloud автоматически тянет питание либо от USB-соединения с компьютером, либо от внешнего питания. Подключите плату к компьютеру при помощи USB-кабеля. В результате на плате должен загореться зеленый светодиод (с надписью «PWR»).
Для Windows
Версия IDE Arduino для Windows уже оснащена всеми необходимыми драйверами. Устанавливая ее, вы также разрешаете Windows установить и эти драйверы тоже. Подключите Seeeduino Cloud, и драйвера будут установлены автоматически.
Для MAC
Когда вы в первый раз подключите Seeeduino Cloud к Mac, запустится Keyboard Setup Assistant (мастер настройки параметров клавиатуры). Для Seeeduino Cloud ничего настраивать не нужно, поэтому вы можете закрыть этот диалог, просто нажав на красную кнопку в правом левом углу окна.
Для Linux
Для Ubuntu версии 10.0.4 и новее драйвера устанавливать не нужно, но убедитесь, что порт 5353 не блокируется фаерволлом.
Откройте первый скетч
Откройте в IDE Arduino скетч «Blink» (мигание светодиодом), кликнув на Файл > Примеры > 01.Basics > Blink (File > Examples > 01.Basics > Blink).
Выберите тип платы и порт
Далее кликните на Инструменты > Плата (Tools > Board) и выберите пункт, соответствующий вашей плате.
Теперь кликните на Инструменты > Порт (Tools > Port) и выберите порт, к которому подключена плата. Это будет, скорее всего, COM3 или выше (COM1 и COM2 обычно зарезервированы под аппаратные последовательные порты). Чтобы узнать, какой порт вам нужен, вы можете отключить свою плату, а затем снова открыть это меню – порт, который исчезнет. И будет портом, к которому подключена плата. Снова подключите плату и выберите нужный последовательный порт. Когда на вашей плате будет настроен WiFi, вы также увидите ее в разделе «Network ports», как на картинке ниже.
Загрузка программы
Теперь просто кликните на кнопку «Загрузка» («Upload») в IDE Arduino. Подождите несколько секунд – в результате на плате должны замигать светодиоды RX и TX. Если загрузка будет выполнена успешно, в статусной строке появится сообщение «Загрузка завершена» («Done uploading»).
Спустя несколько секунд после загрузки на плате должен замигать зеленый светодиод (он подключен к контакту D13). Если замигал, поздравляем! Настройка прошла успешно.
Программирование ATHEROS AR9331
Seeeduino Cloud оснащена интерфейсом WiFi и LAN-портом. Каждый из них имеет IP-адрес, который можно использовать для интернет-подключения и управления устройствами.
Настройка сети
Режим точки доступа WiFi
Когда вы в первый раз включите Seeeduino Cloud, она запустит открытую WiFi-сеть под названием «SeeeduinoCloud-AXXXX», которая будет отображаться в списке WiFi-соединений. Ваш компьютер получит IP-адрес этой сети, который будет выглядеть как «192.168.240.xxx». По умолчанию IP-адресом Seeeduino Cloud является «192.168.240.1».
Режим станции WiFi
После подключения к «SeeeduinoCloud-AXXXX» впишите в браузере «172.31.255.254» или «192.168.240.1», и вы подключитесь к веб-интерфейсу Seeeduino Cloud. Пароль по умолчанию – «seeeduino». Затем кликните на кнопку «LOG IN».
Далее кликните на «SYSTEM», выберите свою WiFi-сеть, введите пароль и кликните на «CONFIGURE & RESTART».
Встроенный Ethernet
Если подключить Seeeduino Cloud к проводной сети при помощи Ethernet-кабеля, она попробует автоматически подключиться при помощи DHCP. В этом случае плата будет отображаться в меню портов так же, как и при подключении по WiFi.
Терминал
Кроме того, вы можете получить доступ к терминалу Seeduino Cloud через SSH. Это позволит вам программировать и настраивать ATHEROS AR9331.
- Загрузите SSH-клиент вроде putty
- Воспользуйтесь IP-адресом Seeeduino Cloud и запустите SSH-клиент
username: root
password: seeeduino
Библиотека Yun Bridge
Эта библиотека упрощает коммуникацию между Seeeduino и Dragino HE. Команды Bridge от AVR интерпретируются Python’ом, установленным на модуль HE. Его роль в том, чтобы:
- выполнять программы на GNU/Linux, когда об этом попросит AVR
- обеспечивать общую память для обмена данными (вроде данных, считанных с датчиков) между Seeeduino и интернетом
- получать команды из интернета и передавать их напрямую Seeeduino
Подробное описание библиотеки Bridge, а также несколько скетчей-примеров можно найти тут. Ниже – несколько примеров использования библиотеки Bridge.
Пример 1: Скажи «Привет!» Linux
Скетч ниже – обмен приветствиями между Arduino и Seeediono Cloud. Пример можно открыть, кликнув в IDE Arduino на Файл > Примеры > Bridge > ConsoleRead (File > Examples > Bridge > ConsoleRead). Руководство по этому скетчу можно найти тут.
#include <Console.h>
String name;
void setup() {
// инициализируем консоль и ждем открытия порта:
Bridge.begin();
Console.begin();
// ждем подключения консольного порта:
while (!Console);
Console.println("Hi, what's your name?");
// "Привет, как тебя зовут?"
}
void loop() {
if (Console.available() > 0) {
char c = Console.read(); // считываем следующий
// присланный символ
// ищем символ новой строки (это последний символ в строке):
if (c == '\n') {
// печатаем текст с присланным именем:
Console.print("Hi "); // "Привет "
Console.print(name);
Console.println("! Nice to meet you!");
// "! Рад встрече!"
Console.println();
// еще раз спрашиваем имя и стираем старое имя:
Console.println("Hi, what's your name?");
// "Привет, как тебя зовут?"
name = ""; // очищаем строку с именем
}
else { // если буфер пуст, Console.read() вернет «-1»
name += c; // объединяем считанный символ из консоли
// со строкой, хранящей имя
}
}
}
Пример 2: Загрузка данных на сервер для интернета вещей
Этот скетч-пример показывает, как записывать логи на публичный сервер «Xively», предназначенный для интернета вещей. Этот скетч является модифицированной версией (чтобы адаптировать скетч для другой платы Arduino и включить отладку через WiFi, поменяйте Serial на Console) скетча, который можно открыть в IDE Arduino, кликнув на Файл > Примеры > Bridge > XivelyClient (File > Examples > Bridge > XivelyClient). Перед загрузкой скетча убедитесь, что…
- Seeeduino Cloud имеет доступ к интернету
- В скетче указаны ID «фида» и ключ API, причем ключ API должен быть закрыт в двойные кавычки
/*
Клиент, передающий строки на сервер Xively
Этот скетч использует Arduino Yun, чтобы подключить
аналоговый датчик к серверу Xively
Создан 15 марта 2010,
модифицирован 27 мая 2013 Томом Иго (Tom Igoe)
http://arduino.cc/en/Tutorial/YunXivelyClient
*/
#include <Process.h>
#include "passwords.h" // содержит мои пароли (см. ниже)
/*
Примечание: Файла «passwords.h» в этом репозитории нет,
потому что он содержит мои пароли. Вам нужно будет создать
собственную версию этого файла. Чтобы сделать это,
откройте в IDE Arduino новую вкладку, назовите ее «passwords.h»,
а затем впишите туда следующие переменные и константы:
#define APIKEY "foo" // для API-ключа Pachube
#define FEEDID 0000 // для ID «фида»
#define USERAGENT "my-project" // для названия проекта
*/
// задаем сетевую информацию для клиента:
const unsigned long postingInterval = 60000; // задержка между
// апдейтами xively.com
unsigned long lastRequest = 0; // время, когда был выполнен
// последний запрос
String dataString = "";
void setup() {
// запускаем последовательный порт:
Bridge.begin();
Serial.begin(9600);
while (!Serial); // ждем открытия последовательного порта
Serial.println("Xively client"); // "Клиент Xively"
// сразу же делаем первый запрос:
updateData();
sendData();
lastRequest = millis();
}
void loop() {
// извлекаем временную метку, чтобы можно было рассчитать
// интервалы для считывания и отправки данных:
long now = millis();
// если время отправочного интервала исчерпалось,
// подключаемся снова и отправляем данные:
if (now - lastRequest >= postingInterval) {
updateData();
sendData();
lastRequest = now;
}
}
void updateData() {
// конвертируем данные в строку и отправляем их:
dataString = "Temperature,"; // "Температура,"
dataString += random(10) + 20;
// добавляем данные о давлении:
dataString += "\nPressure,"; // "\nДавление,"
dataString += random(5) + 100;
}
// эта функция осуществляет HTTP-соединение к серверу:
void sendData() {
// делаем строку для API-ключа:
String apiString = "X-ApiKey: ";
apiString += APIKEY;
// делаем строку для URL:
String url = "https://api.xively.com/v2/feeds/";
url += FEEDID;
url += ".csv";
// отправляем запрос HTTP PUT:
// класс Process лучше объявить тут – чтобы после
// завершения функции sendData() ресурсы сразу же освободились;
// впрочем, можно объявить его и глобально – это тоже сработает:
Process xively;
Serial.print("\n\nSending data... ");
// "\n\Отправка данных... "
xively.begin("curl");
xively.addParameter("-k");
xively.addParameter("--request");
xively.addParameter("PUT");
xively.addParameter("--data");
xively.addParameter(dataString);
xively.addParameter("--header");
xively.addParameter(apiString);
xively.addParameter(url);
xively.run();
Serial.println("done!"); // "готово!"
// если через интернет-соединение пришли какие-то данные,
// отправляем их на Serial:
while (xively.available() > 0) {
char c = xively.read();
Serial.write(c);
}
}
Пример 3: Запись логов на USB-флэшку
Этот скетч аналогичен тому, о котором рассказывается тут. Там же можно найти его исходный код. Seeeduino Cloud автоматически монтирует USB-флэшку в директорию «/mnt/sda1». Скетч добавляет данные от датчика в файл «/mnt/sda1/data/datalog.csv», поэтому перед запуском скетча убедитесь, что на USB-флэшке есть такой файл.
#include <FileIO.h> // класс FileIO позволяет оперировать
// с файловой системой Linux
#include <Console.h> // класс Console обеспечивает взаимодействие
// между IDE Arduino и Yun Shield
void setup() {
// инициализируем консоль:
Bridge.begin();
Console.begin();
FileSystem.begin();
while(!Console); // ждем подключения последовательного порта
Console.println("Filesystem datalogger\n");
// "Запись логов в файловую систему"
}
void loop () {
// делаем строку, которая начинается с временной отметки,
// чтобы собрать данные в форму логов:
String dataString;
dataString += getTimeStamp();
dataString += " , ";
// считываем данные с трех датчиков и добавляем их в строку:
for (int analogPin = 0; analogPin < 3; analogPin++) {
int sensor = analogRead(analogPin);
dataString += String(sensor);
if (analogPin < 2) {
dataString += ","; // разделяем значения запятой }
}
// открываем файл; обратите внимание, что одновременно
// можно открыть только один файл, т.е. вам нужно сначала
// закрыть этот файл перед тем, как открыть другой;
// по умолчанию USB-Флэшка монтируется в «/mnt/sda1»:
File dataFile = FileSystem.open("/mnt/sda1/data/datalog.csv", FILE_APPEND);
// если файл доступен, записываем в него:
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
// также печатаем в последовательный порт:
Console.println(dataString);
}
// если файл не открыт, выдаем ошибку:
else {
Console.println("error opening datalog.csv");
// " ошибка при открытии datalog.csv"
}
delay(15000); // делаем запись логов каждые 15 секунд
}
// функция getTimeStamp() возвращает строку с временной отметкой;
// Yun Shield вызовет Linux-команду «date» и извлекает
// временную отметку:
String getTimeStamp() {
String result;
Process time;
// «date» - это утилита командной строки для извлечения
// даты и времени; формат данных задается с помощью
// опционального параметра:
time.begin("date");
time.addParameter("+%D-%T"); // параметр «D» для «мм/дд/гг»
// параметр «T» для «чч:мм:сс»
time.run(); // запускаем команду
// считываем данные, которые вернула команда «date»:
while(time.available()>0) {
char c = time.read();
if(c != '\n')
result += c;
}
return result;
}
Настройка сервера для интернета вещей
Страница этого сервера позволяет загружать данные на сайты вроде Xively, с помощью которых можно управлять устройствами, подключенными к интернету. Вам нужно лишь передавать данные от датчиков на последовательный порт.
Скетч показан ниже:
/*
Симуляция TX-данных, передаваемых на UART
Этот скетч симулирует данные о температуре и влажности,
чтобы передать их на UART.
Цель скетча – тестирование передачи данных через UART
для разных сервисов интернета вещей.
Создан 25 апреля 2014 года Dragino Technology Co., Limited
Ссылка:
http://wiki.dragino.com/index.php?title=Xively#Upload_data_to_Xively_use_Pass_Through_Mode
*/
String dataString = "";
void setup() {
Serial1.begin(115200);
}
void loop() {
dataString = "temp:";
dataString += random(10) + 20;
Serial1.println(dataString); // загружаем температурные данные
delay(20000);
dataString = "humidity:";
dataString += random(5) + 70; // загружаем данные влажности
Serial1.println(dataString);
delay(20000);
}
Полезные ссылки
Схема
Прошивка
Другое
- Как начать работать с Arduino
- Справочник языка Arduino
- Страница загрузки IDE Arduino
- FAQ по Arduino
- Введение в Arduino
- Об Arduino на Википедии
- Arduino Yun
- Как начать работать с Arduino Yun
- Библиотека Bridge
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Электронный компонент
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Seeeduino Cloud
- Платформа Arduino
- Arduino платформа
- Arduino