В жизни каждого тек гика наступает момент, когда обычных микроконтроллеров уже не хватает, а тратить деньги на Raspberry Pi жалко. Именно тут и выходит на сцену устройство под скромным названием Onion Omega 2. По размерам и цене близкий к микроконтроллерам, он обладает возможностями, сравнимыми с возможностями Raspberry Pi.
РЕКОМЕНДУЕМ: Espruino Pico: програмирование USB-микроконтроллера на JavaScript
Чем отличается микроконтроллер от микро-компьютера?
На мой взгляд, основное отличие микроконтроллера от мини-компьютера (одноплатника) — операционная система. На микроконтроллере есть программа, прошивка. Да, в некоторых контроллерных прошивках, например Micropython, реализована частичная функциональность операционной системы, работа с файлами, пользовательский интерфейс и прочее, но это не делает их (платы с такой прошивкой) компьютерами.
А поскольку на Omega 2 установлена облегченная версия Linux — LEDE (Linux Embedded Development Environment), базирующаяся на OpenWRT, то, несмотря на свой форм-фактор, Omega 2 — одноплатный компьютер. Кстати, компания-производитель позиционирует его как «самый маленький в мире компьютер с установленной Linux».
Что умеет Omega 2
Сейчас в продаже находится две версии Onion Omega: 2 и 2+. В данной статье рассматривается версия Onion Omega 2. Плата для обзора была любезно предоставлена магазином iarduino.
Итак, у нашего компьютера:
- 580 МГц CPU
- 64 Мбайт оперативной памяти
- 16 Мбайт флеш-памяти
- USB 2.0
- Wi-Fi
- 15 GPIO
- 2 PWM
- 2 UART
- 1 I2C
- 1 SPI
- 1 I2S
Как можно заметить на картинке, на самой плате есть только пины, нет даже входа для питания. Для того чтобы начать работать с платой, придется раскошелиться на док-станцию. Их существует целых пять штук, каждая удобна в своем случае. Я буду использовать Expansion dock. На ней расположены GPIO, USB-порт, RGB-светодиод, кнопка Reset, выключатель и порт microUSB для питания устройства.
Кроме док-станций, для Omega существуют различные стандартные модули: BLE-модуль, модуль для подключения Ethernet, GPS-модуль, модуль OLED-дисплея. Есть и различные шилды: для работы с RFID-метками, для управления реле и сервоприводами.
Начинаем работу с Omega 2
Очень много примеров работы с этой платой уже рассмотрено на форуме, поэтому я только пробегусь по основным пунктам настройки, а затем мы приступим уже к более-менее реальным проектам.
Вставляем плату в шилд, подключаем питание — и поехали!
Если питание благополучно подается, то в списке доступных Wi-Fi-сетей мы вскоре увидим сеть с названием Omega-XXXX, где вместо XXXX будет кусочек MAC-адреса (кстати, пароль стандартный — 12345678). Подключаемся к этой сети и с помощью любого браузера заходим по адресу 192.168.3.1, а дальше, следуя любезным инструкциям разработчиков платы, выполняем первичную настройку: подключаем плату к своему Wi-Fi, чтобы не переключаться между сетями, регистрируемся в облаке и устанавливаем консоль. Логин и пароль по умолчанию — root и onioneer соответственно.
После завершения настройки мы сможем попасть в панель управления Omega. Почему-то она называется консолью, но от привычного нам интерфейса командной строки она довольно далека :). На самом деле больше всего эта панель управления напоминает, по крайней мере мне, Launchpad на macOS. Давай попробуем разобраться, зачем нужна каждая из утилит.
- GPIO Tool позволяет каждому пину поставить в соответствие режим работы Input/Output и установить значение по умолчанию — 0 или 1.
- OLED Control — если ты купил еще и модуль с экраном, то эта программка поможет вывести на него текст или картинку.
- Settings — настройки, их можно посмотреть и отредактировать, в частности обновить прошивку или сбросить плату до заводских настроек.
- Relay Control — утилита для управления реле, опять же на дополнительном модуле.
- PWM Control — отличается от предыдущей утилиты лишь тем, что контролирует сервоприводы.
Эти программы поставляются вместе с прошивкой, оставшиеся же требуют отдельной установки.
- Terminal — привычный всем пользователям Linux интерфейс командной строки.
- Editor — минималистичный текстовый редактор и файловый менеджер.
- Webcam — утилита для стриминга с помощью обычной USB-веб-камеры.
Перед тем как начать работу, нужно решить, на мой взгляд, основную проблему — нехватку памяти. 16 Мбайт маловато. Поэтому подключаем флешку и переносим на нее системный раздел.
- Открываем терминал и обновляем список доступных пакетов командой
12[crayon-66288e14600b9655099875 inline="true" ]opkg update - Затем устанавливаем нужные нам пакеты:
12[crayon-66288e14600bc686248037 inline="true" ]opkg install e2fsprogs - Отмонтируем нашу флешку. Если выдаст ошибку — не переживай:
12[crayon-66288e14600be944962723 inline="true" ]umount USB-A1 - Форматируем флешку в ext4:
12[crayon-66288e14600c0469275138 inline="true" ]mkfs.ext4 /dev/sda1 - Ждем завершения форматирования.
- Создаем точку монтирования и монтируем в него нашу флешку:
123[crayon-66288e14600c2975999016 inline="true" ]mkdir /mnt/sda1mount /dev/<device name> /mnt/sda1 - Переносим каталог /overlay на флешку:
12[crayon-66288e14600c4071642268 inline="true" ]mount /dev/sda1 /mnt/ ; tar -C /overlay -cvf - . | tar -C /mnt/ -xf - ; umount /mnt/ - И устанавливаем автоматическое монтирование при включении:
123[crayon-66288e14600c6932405409 inline="true" ]opkg install block-mountblock detect > /etc/config/fstab
Открываем файлик /etc/config/fstab и заменяем в нем
- option target '/mnt/<device name>' на option target '/overlay';
- option enabled '0' на option enabled '1'.
Сохраняем и перезагружаемся. Ф-ф-фух! Теперь памяти у нас достаточно. И вот теперь мы действительно начинаем!
Omega 2 и Hello RGB & Node.js
Одно из больших преимуществ данной платы — возможность программировать ее на разных языках. Например, Node.js. Установим его, а также несколько дополнительных пакетов:
1 2 3 4 |
opkg install nodejs opkg install npm opkg install blynk-library npm install --save rgb-hex |
В качестве демонстрации разберем, как работает управление Omega 2 с помощью Blynk. Напомню, что Blynk — это облачный сервис, имеющий iOS- и Android-приложения для управления микроконтроллерами (Arduino, ESP8266, Raspberry и подобные) через интернет. Управлять мы будем встроенным в мой шилд RGB-светодиодом. Для работы с ним есть встроенная утилита expled. В качестве параметра подается значение цвета в формате Hex.
Сначала создадим проект в Blynk. Выбираем из доступных плат Onion Omega.
Затем добавляем виджеты zeRGBa (виджет выбора цвета) и Styled Button. Настраиваем виджет zeRGBa: выбираем виртуальные пины для подключения (я выбрал 15 для красного цвета, 16 для зеленого и 17 для синего) и диапазон для цвета — от 0 до 255. Styled Button мы просто подключаем к виртуальному пину 0.
И теперь самое главное — зайдя в настройки проекта, скопируй или отправь на email свой AUTH TOKEN.
Теперь вернемся к Omega. Откроем Editor, создадим папку Scripts, а в ней файлик main.js c вот таким содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
const exec = require('child_process').exec; const rgbHex = require('rgb-hex'); var BlynkLib = require('/usr/bin/blynk-library'); var blynk = new BlynkLib.Blynk("<YOUR AUTH TOKEN>"); var v15 = new blynk.VirtualPin(15); var v16 = new blynk.VirtualPin(16); var v17 = new blynk.VirtualPin(17); var v0 = new blynk.VirtualPin(0); var R = 0; var G = 0; var B = 0; v15.on('write', function(param) { R = parseInt(param); }); v16.on('write', function(param) { B = parseInt(param); }); v17.on('write', function(param) { B = parseInt(param); }); v0.on('write', function(param) { exec("expled 0x"+rgbHex(R,G,B)); }); |
Разберемся, что происходит.
Вначале подключаются необходимые модули. В exec заносится функция вызова утилиты из консоли, в rgbHex — функция конвертации цвета из RGB в Hex, а в blynk — подключение к нашему Blynk-проекту.
Затем объявляются виртуальные пины: 15, 16 и 17 для получения RGB, 0 для обработки кнопки. В три переменные, R, G и B, будут заноситься значения соответствующих составляющих цвета.
А затем описывается, что происходит при отправке данных на каждый виртуальный пин. Функции для трех цветовых составляющих идентичны, отличается лишь переменная, в которую записывается число. Когда пользователь нажимает на кнопку — вызывается функция expled, а в качестве параметра поступает шестнадцатеричное значение цвета.
Выводим сообщения на экран
Хотя уже достаточно давно появилась возможность прослушивать входящие сообщения, например с помощью Siri или Алисы, прочитать сообщение все же для многих быстрее. Хорошо, если ты докупил шилд с экраном, а если нет? Будем выкручиваться! На помощь нам приходит один из самых распространенных модулей для Arduino — I2C LCD Display.
Поскольку с Node.js мы уже работали, этот проект напишем на Python. Для установки достаточно ввести уже привычное opkg install python. Очень часто можно встретить предложение установить так называемый python-light — легкую сборку. Да, можно установить и третью версию питона, но часть библиотек для работы непосредственно с Omega 2+ не устанавливается на нее. Так что будем работать с версией 2.7.
Не забываем установить привычный любому разработчику на Python менеджер пакетов pip: opkg install python-pip, а также все, что необходимо для работы с I2C: opkg install git git-http pyOnionI2C.
Итак, пускай на экран выводится все, что приходит в наш телеграм-бот (благо, несмотря на обещанную блокировку, он продолжает работать).
Устанавливаем PyTelegramBotApi с помощью pip, скачиваем с официального сайта Omega 2 библиотеку git clone https://bitbucket.org/fires/fireonion_i2c_lcd. Подключаем пины на мониторе к соответствующим пинам на плате.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import lcdDriver import telebot bot = telebot.TeleBot("TOKEN") lcdAddress = 0x3f lcd = lcdDriver.Lcd(lcdAddress) lcd.backlightOn() @bot.message_handler(func=lambda message: True) def echo_all(message): lcd.lcdDisplayStringList([message.chat.first_name,message.text])) if __name__ == '__main__': bot.polling(none_stop=True) |
Все очень просто: подключаем необходимые библиотеки, когда приходит сообщение — выводим его на экран вместе с именем отправителя.
Заключение, размышления и выводы
Omega 2 действительно неплохое устройство, но, как и у любого Linux-based устройства, у него есть недостатки.
Во-первых, хорошо работают лишь устройства, подключаемые через модули, запустить внешний OLED-экран через I2C у меня так и не получилось. Во-вторых, несмотря на достаточно обширную документацию аж на трех языках, все какое-то еще сырое. Периодически приходится устанавливать другие библиотеки, рыться на форумах. Кроме того, изначально цена платы колебалась около 5 долларов, а сейчас, чтобы начать работать с платой Omega 2, придется выложить минимум 20,75 доллара, что с учетом курса уже дороговато.
Для чего же хороша эта плата? Для небольших домашних проектов, когда не хочется паять и проще купить модуль, — определенно да. Набор языков программирования, привычный интерфейс командной строки. В качестве небольшого сервера в том случае, если мощностей Omega 2 хватает, — нет смысла покупать более дорогую Raspberry Pi.
РЕКОМЕНДУЕМ: Обзор, установка и программирование на ESP32
Позновательно. Спасибо!
Автор статьи, исправьте пожалуйста ошибку в 8-м пункте.
С block detect > /etc/config/fstab на block detect > /etc/config/fstab