Я хотел как можно дешевле построить портативный прототип с подключением к Wi-Fi. Omega2 показалась мне идеальной, но я никогда не работал с чем-то меньшим, чем ноутбук! Для тех, кто хочет заняться прототипированием портативных мобильных устройств, я предлагаю это удобное для новичков введение в настройку Omega2 и его использование для простого портативного устройства: дисплея часов в реальном времени.

В этом руководстве я предполагаю базовые знания командной строки Linux, хотя при появлении этих тем я буду ссылаться на ресурсы для новичков.

Зачем использовать Omega2?

Omega2 - это золотая середина между простейшим микропроцессором Arduino и более тяжелой ОС Raspberry Pi. Как и Raspberry Pi, Omega2 имеет полноценную операционную систему Linux, которая позволяет выполнять сложные вычисления на устройстве. Что касается быстрого начала работы, Omega2 имеет встроенный передатчик Wi-Fi, что делает его идеальным для определенного типа проекта: небольшие мобильные устройства с батарейным питанием, встроенным Wi-Fi и процессором для выполнения значительных вычислений на устройстве. .

Onion продает и чипы Omega2, и Omega2 +. Хотя я использую Omega2 +, для этого урока подойдет любой из них. Самые большие различия между Omega2 и Omega2 + заключаются в увеличенном внутреннем хранилище и оперативной памяти, а также в добавлении слота для SD-карты для еще большего объема памяти.

Настройка Omega2 +

Первоначальная настройка Omega2 требует подключения к сети Wi-Fi, чтобы обновить прошивку и начать использовать ее функции.

Если вы пытаетесь подключиться в университете или другой среде с порталом входа, вам нужно будет обойти этот портал. В Университете Миннесоты мне удалось зарегистрировать MAC-адрес Omega2 напрямую в ИТ-отделе университета, минуя портал входа в систему.

Используйте переключатель на боковой стороне док-станции, которую вы используете с Omega2, чтобы включить устройство; вы должны увидеть оранжевый светодиод на Omega2.

Хотя док-станция питается от USB-соединения, для подключения к устройству мы должны использовать собственную сеть Wi-Fi Omega2. По умолчанию эта сеть называется Omega-XXXX, где последние четыре символа - это последние четыре цифры MAC-адреса Omega2 (обозначенного на устройстве). Со своего ноутбука я подключился к сети Wi-Fi Omega-5827, которая обычно появлялась примерно через минуту после включения Omega2. Затем я смог получить доступ к Omega2 через SSH: ssh [email protected]

Как только я был подключен к Omega2, я обновил пароль с помощью passwdcommand, чтобы изменить значения по умолчанию для Omega2 (имя пользователя: root, пароль: onioneer).

Первым шагом после подключения является обновление прошивки Omega2, что выполняется командой oupgrade. Поскольку прошивка на моем Omega2 устарела, автоматическое обновление не удалось. Пришлось загружать и устанавливать прошивку вручную, скачивая самые свежие образы прошивки Omega2 отсюда.

Подключение аккумулятора к док-станции Omega2 Power Dock

Хотя Omega2 может питаться без док-станции, это сложно и не нужно: Onion продает различные док-станции для Omega2, которые упрощают питание устройства. Поскольку я хотел создать мобильный прототип, я использовал Power Dock, чтобы легко подключиться к Omega2 и использовать внешний аккумулятор.

С тех пор, как я впервые заказал док-станцию ​​Omega2 Power Dock, компания Onion выпустила док-станцию ​​Power Dock 2, которая имеет несколько преимуществ перед док-станцией Power Dock. Наиболее заметным отличием является возможность программного доступа к оставшемуся заряду, что может быть полезно по разным причинам.

Я потратил 10 долларов на батарею LiPo 3,7 В, емкостью 1800 мАч, которую отправили за два дня (спасибо Amazon!).

Другие предупреждали, что необходимо перепроверить конфигурацию проводов на разъеме аккумулятора, поскольку дешевые LiPo аккумуляторы часто дешево собираются. Действительно, у батареи, которую я получил, концы поменяли местами в 2-контактном разъеме JST-PH; Я использовал канцелярскую скрепку, чтобы опустить металлические клапаны, фиксирующие провода питания, и поменял их местами.

Как только контакты были поменяны местами, док-станция питания немедленно начала заряжать аккумулятор. Я никогда не делал полного изложения, но у меня хватило как минимум 4–6 часов автономной работы при запуске программы часов, которую мы создадим позже в этом руководстве. Переключиться на питание от батареи так же просто, как отсоединить USB-кабель от док-станции; все переключения мощности происходят полностью автоматически!

Подключение SPI LCD к Omega2

Чтобы продемонстрировать, как делать что-то полезное с Omega2, мы подключим ЖК-экран для отображения информации. Один из самых дешевых вариантов - использовать ЖК-дисплей на основе SPI. SPI - Serial Peripheral Interface - протокол связи для всевозможных устройств ввода / вывода. Многие ЖК-дисплеи реализуют протокол SPI, что упрощает их подключение к Omega2, поскольку Omega2 имеет четыре цифровых контакта, которые также могут служить SPI-подключениями к периферийному устройству.

Хотя SPI определяет протокол для отправки и получения байтов между Omega2 и ЖК-дисплеем, нам все же нужно знать, какие байты отправлять. Для этого нам нужно знать драйвер, используемый дисплеем, и использовать библиотеку на Omega2 для связи с этим драйвером. Я купил дисплей, использующий драйвер ILI9225.

В следующем разделе мы поговорим о библиотеке, которая нам нужна на Omega2, но сначала давайте подключим этот ЖК-дисплей SPI к Omega2. Библиотека, которую мы используем, позволяет нам настроить контакты, которые мы будем использовать на стороне Omega2 для связи с ЖК-дисплеем, но нам нужно убедиться, что мы подключаемся к правильным контактам на ЖК-дисплее. Чтобы правильно выполнить разводку, я в значительной степени полагался на этот список из 11 контактов ЖК-дисплея и их дескрипторов, чтобы я мог соответствующим образом сопоставить их с контактами Omega2.

Сначала я подключил ЖК-дисплей к небольшому макету, чтобы мне не пришлось паять. Затем я использовал короткие провода для соединения контактов док-станции Omega2 Power Dock с рядами на макетной плате, соответствующими 11 контактам ЖК-дисплея. Мы подключаемся от контактов ЖК-дисплея к контактам SPI MOSI, CLK и CS1, обозначенным 8, 7 и 6 на плате питания Omega2, а также к цифровому контакту (в данном случае контакту 1 на Omega2).

Из приведенной выше схемы распиновки Omega2 мы видим, что вывод SPI с пометкой «MISO» не используется в нашей проводке. Почему? MISO означает «Главный вход, подчиненный выход»; это то, как устройство SPI будет отправлять сигналы обратно на «главный» контроллер, Omega2. Но наше устройство SPI представляет собой ЖК-дисплей, поэтому нет причин получать какие-либо данные!

Я подключил шестой контакт ЖК-дисплея, который питает подсветку, прямо к источнику питания. Но вы можете подключить его к другому цифровому выводу на Omega2, если хотите регулировать яркость дисплея.

Управление ЖК-дисплеем SPI с помощью Omega2

Теперь, когда у нас есть ЖК-экран SPI, подключенный к Omega2, как мы можем контролировать то, что на нем отображается? Хотя Omega2 предлагает параметры нижнего уровня для отправки пакетов байтов на устройства SPI, мы хотим использовать библиотеку, которая позволяет легко сообщать ЖК-дисплею напишите текст или нарисуйте этот прямоугольник. К счастью, для работы с дисплеями на базе ILI9225 была написана библиотека. К сожалению, чтобы эта библиотека работала на Omega2, потребуется некоторая настройка.

Библиотека написана на C, и ее необходимо скомпилировать в соответствии с набором инструкций процессора Omega2. Из-за большого количества зависимостей, необходимых для выполнения этой компиляции, Onion рекомендует выполнить сборку на другом компьютере и затем передать скомпилированный исполняемый файл на Omega2. Это означает, что нам придется выполнить кросс-компиляцию от процессора нашего компьютера к процессору Omega2. Зачем нам это нужно? Потому что Omega2 имеет процессор MIPS, а не более распространенные процессоры x86 или ARM. Это означает, что многие программы и драйверы, написанные для других процессоров, не будут работать с Omega2!

Чтобы настроить кросс-компиляцию на вашем компьютере, Onion предоставляет образ Docker и лучшие инструкции по его настройке, чем я могу предоставить здесь. Предупреждение: компиляция системы сборки Omega2 может занять несколько часов даже на приличной системе, и что-то может пойти не так, если вы не используете Docker в операционной системе Linux! Сборка на моем рабочем столе Ubuntu заняла около часа.

После завершения сборки я выполнил инструкции библиотеки ILI9225 для создания демонстрационного исполняемого файла. Помимо использования настройки Docker, я обнаружил, что эта информация о настройке путей для кросс-компиляции важна для создания правильной среды для успешной сборки.

Я установил Git на Omega2 напрямую и использовал его для переноса встроенного исполняемого файла в Omega2. Я запустил исполняемый файл (./displayDemo) из своего сеанса SSH и получил следующее приветствие:

Успех! У нас есть рабочая система сборки для библиотеки ILI9225, и теперь мы можем использовать ее для написания кода C для отображения пользовательского контента.

Кодирование дисплея часов

Теперь давайте расширим библиотеку ILI9225 SPI нашим собственным кодом, чтобы отобразить что-то более сложное: растровое изображение по нашему выбору и отображение времени в реальном времени. Мы будем использовать библиотеку SPI, которую мы использовали в предыдущем разделе, чтобы написать наш собственный код отображения, но сначала нам нужно сделать две вещи: (1) установить часовой пояс на нашем Omega2, чтобы отображаемое время было точным, и (2) получить растровое изображение, которое мы хотим отобразить.

Мы можем установить часовой пояс для Omega2, отредактировав файл /var/TZ на Omega2. По умолчанию часовой пояс GMT0, но я проконсультировался с этим списком часовых поясов, чтобы перейти на центральное время США.

В библиотеке ILI9225 SPI нет встроенной утилиты для отображения общих изображений, но она может отображать растровые изображения, представленные в виде массивов. Загрузка растрового изображения в качестве соответствующего массива байтов казалась мне непосильной, но, к счастью, Adafruit предоставляет прекрасную утилиту для преобразования изображений в uint8_t растровые массивы, которые ожидает библиотека SPI. Я выбрал логотип Университета Миннесоты.

Я построил свой код на примере, поставляемом с библиотекой SPI.

Я назначил сгенерированный растровый код массиву const uint8_t ili9225_umnlogo_img[], а затем использовал команды библиотеки SPI для его отображения:

ILI9225_ClearFramebuffer();
ILI9225_SetBackgroundColor(COLOR_BLACK);
ILI9225_DrawBitmap(0,0,ili9225_umnlogo_img,180,220,COLOR_RED);
ILI9225_CopyFramebuffer();

Последнее, что нужно сделать, - это написать несколько строк кода C для отображения времени примерно каждую секунду:

while (1) {
  // Get the current time
  time_t rawtime;
  time ( &rawtime );
  struct tm * timeinfo = localtime ( &rawtime );
  
  // Format the current time as a string
  char time_buf [20];
  strftime(time_buf, 20, "%I:%M:%S %p", timeinfo);
  // Draw the text using the SPI library
  ILI9225_DrawText2(10, 10, &time_buf[0]);
  ILI9225_CopyFramebuffer();
  
  // Sleep between refreshes
  usleep(1000 * 1000);
 }

И это все, что нам нужно, чтобы закончить код для нашего прототипа!

Компилировать код C в исполняемый файл - это своего рода зверюга:

mipsel-openwrt-linux-gcc -o displayTime -O3 -ggdb -g -Wall -Wextra -I /root/source/staging_dir/target-mipsel_24kc_musl-1.1.16/usr/include -I /root/omega2-libs/omega_includes -L /root/source/staging_dir/target-mipsel_24kc_musl-1.1.16/usr/lib -L /root/omega2-libs/omega_libs -L. ili9225_lcd_demo.c -lili9225 -loniondebug -lonionspi -lugpio

К счастью, команда сборки была сгенерирована для меня образцом Makefile из библиотеки ILI9225. Этот Makefile служит хорошим шаблоном для развития. Я перенес бинарный файл, созданный при сборке, на Omega2 и подтвердил, что все работает должным образом. Я не собираю никаких футляров для этого урока, но я использовал кабельную стяжку, чтобы быстро и грязно сделать карманный компьютер.

Заключение

Я был в восторге от того, что заработал простой прототип с батарейным питанием, но мы могли сделать гораздо больше!

Один из очевидных шагов - сделать небольшую коробку для компонентов и сделать этот прототип достаточно прочным для изучения пользователем. Лазерная резка - хороший вариант: из одного из этих материалов планирую сделать шкатулку.

Макетная плата отлично подходит для быстрого прототипирования и быстрого добавления и вычитания периферийных устройств ввода / вывода, но было бы разумно припаять некоторые соединения, чтобы сделать более прочный элемент.

Мы также могли бы написать более сложный код, который использует встроенное соединение Wi-Fi, что является одним из больших преимуществ использования Omega2 в качестве прототипа. Конкретным следующим проектом может быть добавление кнопок ввода и упаковка Omega2 в тот же форм-фактор, что и исходный Gameboy, в качестве расширения этого потрясающего проекта Omega2. Играйте в оригинальные игры Gameboy на ходу менее чем за 40 долларов!

Подсказка Максимилиану Герхардту за предоставленный код и полезные примеры проектов; Без сообщений Макс на форуме для такого новичка, как я, было бы невозможно проникнуть в это пространство и настроить работающий дисплей ILI9225 с Omega2.