Данная статья поможет Вам наладить связь между микрокомпьютером Omega2 и платой Arduino Uno, чтобы совместить последнюю с интернетом вещей (IoT), а заодно и с преимуществами, которые он дает.
Вам понадобятся следующие компоненты:
Плата Arduino Uno
Микрокомпьютер Onion Omega2+
Резистор номиналом 3,3 кОм
Резистор номиналом 1,7 кОм
Перемычки типа "папа-папа"
Беспаечная макетная плата
Предыстория
Как только я узнал, что самая популярная у мейкеров плата Arduino и самый доступный микрокомпьютер Omega2+ поддерживают связь по UART интерфейсу, то мне сразу же захотелось связать оба этих устройств, чтобы совместить их преимущества воедино! Таким образом можно будет создать проект на Arduino, а затем совместить его с возможностями Омега2 — на базе первой создаем колесного робота, а вторую используем, чтобы добавить в проект управление по Wi-Fi или облачное хранилище (например, от Amazon).
А вообще UART (Universal Asynchronous Receiver-Transmitter: универсальный асинхронный приемопередатчик) — это последовательный интерфейс передачи данных между двумя устройствами, которые взаимодействуют по трем каналам. Первый служит для передачи данных, второй, соответственно, для приема данных, а третий — для общей связи (можно сказать, ищет точки соприкосновения) между этими устройствами.
Шаг 1: Подключение
Ниже на схеме показано такое соединение. Резисторы нам понадобятся для того, чтобы собрать что-то вроде делителя напряжения, поскольку пятивольтовое (5V) напряжение на контактах платы Arduino совершенно не подходит для Omega2: его необходимо преобразовать в 3,3V. Подключать Омега2+ желательно через док-станцию, но если ее нет, то следуйте этой инструкции.
Шаг 2: Включение
Подключите плату Arduino Uno к компьютеру через USB порт, а затем включить микрокомпьютер Omega2+.
Шаг 3: Программный код
Откройте на компьютере Arduino IDE, а затем загрузите через нее в плату Arduino следующий код:
#include <SoftwareSerial.h>
SoftwareSerial gtSerial(8, 7);
void setup() {
Serial.begin(9600);
gtSerial.begin(9600);
}
byte rx_byte = 0;
void loop() {
if (Serial.available()) {
rx_byte = Serial.read();
gtSerial.write(rx_byte);
}
if (gtSerial.available()) {
rx_byte = gtSerial.read();
Serial.write(rx_byte);
}
}
Отлично! Плата Arduino готова к работе.
Шаг 4: Тестирование
Для проверки связи через последовательный порт воспользуемся монитором порта (открывается через раздел "инструменты" в Arduino IDE, либо сочетанием клавиш (Ctrl + Shift + M).
Для того, чтобы написать и загрузить программу для Омега2, можно воспользоваться протоколом SSH, либо использовать утилиту терминала по настройке Omega2+. Для этого можете воспользоваться следующей инструкцией.
Введите в терминал следующие команды, чтобы установить инструмент "экран".
opkg update
opkg install screen
Для мониторинга данных с последовательного порта, подключенного к плате Arduino, введите следующую команду:
screen /dev/ttyS1 9600
После запуска этой команды Вы увидите пустой экран. Попробуйте что-нибудь набрать на этом экране — эти данные отобразятся на мониторе порта в Arduino IDE. Точно также это работает и в обратном порядке: если отправить в последовательный порт информацию через поле для ввода в мониторе порта, то на пустом экране Вы увидите то же самое. Работает! Вы успешно установили UART соединение между двумя устройствами!
Для более подробного ознакомления с возможностями UART протокола можно узнать здесь.
Шаг 5: Используем библиотеку pySerial
На практике чаще всего приходится работать с датчиками, обрабатывать массивы данных и прочее. Это лучше всего делать через скрипт, написанный на языке Python, поскольку он подходит для работы как с Arduino, так и с Omega2.
На помощь приходит библиотека pySerial, которая включает в себя основные команды и функции. К примеру, можно использовать ее для программы считывания данных с датчиков и отправки полученных значений в облачное хранилище (например, AWS) через протокол MQTT.
Для демонстрации возможностей этой библиотеки я написал простой код на Python, который считывает однозначные целые числа с последовательного сигнала с Arduino и отображает на экране консоли. Он показан ниже. Можете смело использовать его в своих проектах и экспериментировать с ним.
import serial
ser = serial.Serial('/dev/ttyS1', 9600, timeout = None)
while True:
input = ser.read()
print(int(input))
На этом у меня все. Желаю успехов и удачной компиляции!