Планшет / телефон в качестве экрана Arduino и осциллограф за 2 доллара

29,899

65

17

Введение: планшет/телефон В качестве экрана Arduino и осциллографа за 2 доллара

Хотя для проекта на базе Arduino можно купить дешевый сенсорный ЖК-экран 320×240, он может Будет более удобным — особенно для прототипирования и тестирования эскиза — использовать планшет или телефон как сенсорный экран и источник питания для проекта. У вас может быть гораздо более высокое разрешение и более красивый дисплей на вашем устройстве Android (например, все ваши строки будут сглажены).

Экран на базе Android может быть подключен через последовательный порт USB, Bluetooth или Wi-Fi (например, ESP8266).

С этой целью я написал VectorDisplay (источник здесь), приложение для Android, которое сочетается с библиотекой Arduino, которая реализует большую часть интерфейса Adafruit GFX. Вы можете написать код, который затем можно будет легко перенести на автономный экран, или продолжать использовать эскиз с дисплеем на базе Android. И вы можете отправлять команды из приложения Android для управления эскизом Arduino. Библиотека Arduino в значительной степени не зависит от платы: она должна работать с любой платой, которая предоставляет объект последовательного порта USB с именем Serial , или с ESP8266 через Wi-Fi или с Bluetooth (сначала выполните сопряжение платы).

В качестве доказательства концепции приложения я портировал простой проект STM32-O-Scope для использования VectorDisplay вместо дисплея ILI9341. В результате получился портативный (грубоватый) портативный осциллограф с питанием от батареи 1,7 МС/с, для которого не требуется ничего, кроме платы STM32F103C за 2 доллара (с использованием ядра Arduino на основе libmaple), двух проводов, кабеля USB OTG и устройства Android. . Конечно, все, что вы получаете с этим, — это диапазон от 0 до примерно 3,3 В.

Шаг 1: Установка программного обеспечения

Я предполагаю, что у вас есть IDE Arduino, настроенная для вашей любимой платы, и что ваша любимая плата имеет последовательный интерфейс USB.

Перейдите в Sketch | Включить библиотеку | Управляйте библиотеками . Поместите «VectorDisplay» в область поиска и нажмите «Установить», как только он будет найден.

Загрузите архив библиотеки отсюда.

Разархивируйте в папку внутри вашего Папка Arduino/libraries .

Загрузите VectorDisplay из Google Play и установите его на свое устройство Android. Возможно, вам потребуется включить установку из неизвестных источников на вашем устройстве Android. Приложение Android использует библиотеку UsbSerial, и отправной точкой было одно из примеров приложений для библиотеки.

Шаг 2: Демо-эскиз

Подключите вашу доску (в режиме загрузки, если необходимо) к компьютеру и перейдите в Файл | Примеры | VectorDisplay | круги в вашей Arduino IDE. Нажмите кнопку загрузки (стрелка вправо).

Запустите приложение VectorDisplay на вашем устройстве Android. Подключите плату к устройству Android через кабель USB OTG.. (Если на вашей плате есть микро-порт USB, убедитесь, что сторона хоста USB OTG подключена к устройству Android). Теперь вы должны получить запрос разрешения для VectorDisplay. Нажмите OK .

Если все пойдет хорошо, VectorDisplay теперь покажет две кнопки в левой части экрана: круг и цвет. Нажатие Circle рисует на экране случайный круг, а Color меняет цвет на случайный цвет перед следующим кругом.

Если вы посмотрите на эскиз кругов в среде IDE, вы увидите, что последовательное векторное отображение объявлено с помощью:

 SerialDisplayClass Display; 

, а затем инициализируется в setup () с помощью:

 Display.begin (); 

Затем запрашиваются командные кнопки с помощью Display.addButton () . Затем loop () вызывает Display. readMessage () для поиска команд, отправляемых через командные кнопки.

По умолчанию система координат для отображения — 240×320. Однако линии и текст рисуются с использованием полного разрешения экрана вашего устройства Android со сглаживанием для хорошего внешнего вида. Вот почему приложение называется VectorDisplay.

Step 3: API

API в библиотеке находится в файле VectorDisplay.h. Вам необходимо сначала инициализировать объект Display. Для использования USB сделайте это с помощью:

 SerialDisplayClass Display; 

Инициализируйте соединение с помощью Display.begin () .

В объекте SerialDisplayClass доступны два набора методов: один набор использует 32-битный цвет (включая альфа-канал) и команды, которые довольно близки к последовательному протоколу USB. который использует мое приложение VectorDisplay, а другой набор является подмножеством стандартных методов библиотеки Adafruit GFX, использующих 16-битный цвет. По большей части вы можете свободно смешивать два набора команд, за исключением того, что если вы используете методы, совместимые с Adafruit, вы должны вместо этого использовать 16-битные цветовые команды, имена которых заканчиваются на 565 . из 32-битных.

Вы можете установить систему координат с помощью Display.coordinates (width, height) . По умолчанию ширина = 240, а высота = 320. Если вы хотите имитировать отображение с неквадратными пикселями, вы можете использовать Display.pixelAspectRatio (ratio) .

Некоторые методы, включая pixelAspectRatio () , принимает аргумент FixedPoint32. Это 32-битное целое число, представляющее число с плавающей запятой, где 65536 представляет 1,0. Чтобы преобразовать число x с плавающей запятой в FixedPoint32, выполните: (FixedPoint32) (65536. * X) (или просто TO_FP32 (x) ).

Помимо возможности отправлять команды с кнопок Android, события касания экрана также отправляются в MCU.

Для использования WiFi см. пример circle_esp8266. Вам нужно будет нажать кнопку USB в приложении, чтобы переключиться в режим Wi-Fi..

Для Bluetooth вы должны уметь:

 SerialDisplayClass Display (MyBluetoothSerial); ... MyBluetoothSerial.begin (115200); Display.begin ();  

, а затем действуйте так же, как в случае последовательного порта USB, где MyBluetoothSerial — это любой объект Stream (например, Serial2 ). подключен к адаптеру Bluetooth.

Шаг 4: Осциллограф $ 2

Для быстрого и грязного осциллографа вам понадобится синяя или черная (с которой проще иметь дело) плата таблетки STM32F103C8, которую вы можете купить на Aliexpress менее чем за 2 доллара. Я описываю, как подготовить плату к использованию со средой Arduino для нее, и установить здесь скетчи.

Загрузите этот набросок на плату, который представляет собой модифицированную версию эскиза STM32-O-Scope от Pingumacpenguin. Отредактируйте строку #define BOARD_LED, чтобы она соответствовала вашей плате. Я использую черную таблетку со светодиодом PB12. У синих таблеток (и некоторых черных таблеток с той же распиновкой, что и у синей таблетки) есть светодиод на PC13.

Подключите один провод — заземляющий щуп — к заземлению платы, а другой провод к вывод B0 платы. Подключите плату к устройству Android с запущенным VectorDisplay, и у вас будет портативный осциллограф с питанием от батареи.

На фотографии у меня осциллограф подключен к фототранзистору. След на экране от инфракрасного пульта дистанционного управления телевизора.

Участвовал в
Конкурсе микроконтроллеров

Поделитесь первым

    Рекомендации

    Цифровой измерительный ролик с использованием Microbit & Tinkercad в инструментах
    6 405
    Карманные кости! Электронные кости для лжецов, кости и другое в электронике
    98 9,0K
    Схема поиска светодиодов без микросхемы в светодиодах
    149 19K
    Очки RGB в светодиодах
    65 11K
    • Конкурс Make it Glow

    • Конкурс первого автора

    • PCB Challenge

    17 Обсуждений

    Привет, vectordisplay — отличное решение, которое я искал. Реализует все потребности, о которых говорилось.
    По этому у меня есть вопрос, но пока не нашел решения в обсуждениях. Можно ли при использовании vectordisplay разместить «командные» кнопки также в нижней строке дисплея? Или, может быть, возможно вернуть нажатую позицию касания (x, y) обратно в Arduino для работы?
    Спасибо большое за ответ и помощь.
    vaitfi

    Текущий код этого не делает. Вы можете добавить его в код.

    Привет, очень хорошая идея, у меня похожие идеи (только с NodeJS). Очень нравится старания, отличный старт, очень умно! Загрузите все это и заставьте его работать с использованием Samsung J8 и Arduino (ATMega328p) Nano, однако не все работает должным образом.

    Скетч verctordisplaytest работает, но на экране появляется странный синий (становится красным при захвате экрана, возможно, проблема с прорисовкой экрана Android), и нажатие кнопки не работает. На втором круглом скетче показан только черный экран, без кнопок. Я вижу, что при нажатии на экран происходит некоторое (тяжелое) взаимодействие, но ничего не происходит.

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

    Фигуры очень простые, поэтому взаимодействие может быть очень простым. Я не знаю, используете ли вы какое-то обнаружение ошибок в данных, потому что есть вероятность, что что-то потеряно или получено с ошибками. Я тоже этого не сделаю, если вы реализуете двоичный формат (не ASCII) для передачи информации между обоими устройствами, это уменьшит количество необходимых байтов.

    В целом отличная идея и первая реализация, я думаю, когда вы исправите ошибки (и некоторые проблемы со скоростью), ее можно будет очень удобно использовать. Может быть, мои опубликованные комментарии помогут, а также предоставят снимки экрана.

    С уважением,
    codebeat.

    Отличная идея!
    Собираетесь ли вы расширить это проект для работы напрямую с esp8266 или esp32 (не с платой STM32)? Это была одна из тех вещей, которые я давно искал. Я хотел бы использовать эти экраны планшетов с Arduino для создания, например, метеостанций, а также для представления изображений и прокрутки текста с помощью ESP.
    Если у вас есть что-нибудь или какие-либо идеи по этому поводу, я очень вам благодарен много.

    Теоретически библиотека должна работать с esp8266, но некоторые другие комментарии указывают на то, что это не так.

    1. Я загрузил приложение VectorDisplay на телефон Samsung A410F и планшет Notes. Приложение не взаимодействует с векторным скетчем (круг скомпилирован и выгружен в arduino uno). Кнопки появляются только на время, но даже если я коснусь кнопки, кружок и т. Д. Не отображается. Отображается только меню Hlep, USB и т.д., остальной экран черный.
    2. при компиляции эскиза Picoscope произошла ошибка с библиотекой libdma.
    3. Компиляция circle_esp8266 содержит несколько ошибок!

    Будьте очень любезны и помогите. Спасибо.

    С каким микроконтроллером вы это используете?

    Arduino UNO
    ESP32 DEVKIT V12 DOIT

    Что ошибки с circle_esp8266?

    Здравствуйте! Библиотека VectorDisplay не работает в NODE MCU V3.

    Какой адрес хоста вам нужно указать?

    Думаю, IP-адрес телефона.

    Расскажите подробнее.

    После загрузки скетча на плату Wi-Fi не включается, поэтому я не могу подключиться к плате с телефона.

    В скетче вы установили ssid и пароль в соответствии с вашей сетью WiFi, а затем хост IP, соответствующий вашему телефону?

    MCU узла

    не раздает Wi-Fi. Вероятно, библиотека работает некорректно.

    Включил в телефоне точку доступа WIFI, прописал в скетче имя сети и пароль. На телефоне отображается, что NODE MCU подключен к точке доступа. Но программа говорит, что плата не подключена.



    Создание приложения Bluetooth для Android для управления платой Arduino

    Блог Droiduino
    17 сентября 2020 г. · 6 мин. чтения

    Это руководство посвящено созданию собственного Android-приложения для подключения к плате Arduino с помощью Bluetooth.. Следовательно, для того, чтобы следовать этому руководству, требуются некоторые базовые знания программирования Android.

    Но не волнуйтесь, если у вас нет базовых знаний о программировании Android, но вы все же хотите создать свой собственный Bluetooth. app, то вы можете пройти Базовое программирование Android для производителей Arduino, которое доступно в Udemy. Вы узнаете, как создать приложение Bluetooth, которое может взаимодействовать с вашей платой Arduino с нуля и без предварительных знаний в области программирования Android.

    Коды, представленные в этом руководстве, являются минимальными кодами, которые позволяют использовать Android телефон и плата Arduino для отправки и получения сообщений (которые могут быть преобразованы в команды) друг с другом через Bluetooth.

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

    1. Samsung Galaxy S8 с версией Android 9.
    2. Android Studio версии 3.6.3 с совместимая версия Gradle.
    3. Минимальная версия SDK: 19 (необходимо выбрать это при создании нового проекта с помощью Android Studio).
    4. Mac OS 10.15.4 (Windows машины также отлично работают)

    Это приложение создаст соединение Bluetooth с ближайшей платой Arduino, которая была подключена к модулю Bluetooth HC05. Он создан для совместимости с платой Arduino из этого руководства. Однако код легко изменить так, чтобы его можно было использовать вместе с платами Arduino с разными конфигурациями.

    Изображение для сообщения

    Простое приложение Bluetooth

    Чтобы проверить функциональность соединения Bluetooth, вы можете нажать кнопку в этом приложении, чтобы управлять встроенным светодиодом на плате Arduino. Как только предопределенное командное сообщение получено от Android, Arduino передаст ответное сообщение Android в виде сообщения о состоянии.

    Прежде чем мы углубимся в часть кодирования, я хотел бы описать пошаговый процесс для создания Bluetooth-соединения на Android. Это краткое изложение более подробной документации от Google.

    1. Инициализируйте адаптер (устройство) Bluetooth по умолчанию на вашем телефоне Android.
    2. Получите MAC-адрес удаленного устройства, к которому вы подключаетесь. В этом случае MAC-адрес модуля Bluetooth HC05, подключенного к плате Arduino.
    3. Создайте отдельный поток в вашем коде, чтобы инициировать соединение с использованием MAC-адреса, который мы получили ранее. Этот поток будет управлять тем, что произойдет, если соединение установлено или не удалось установить. Он также обрабатывает, если мы хотим закрыть соединение Bluetooth.
    4. После успешного установления соединения поток выполнит обратный вызов для кодов, которые управляют обменом данными (передача и прием между двумя устройствами). Для этого нам нужно создать еще один поток.
    5. Этот поток будет читать входящие данные и анализировать их при необходимости (или вы можете анализировать их где-нибудь в коде) и передавать сообщение или команду, созданную приложением Android.

    Теперь приведенный выше поток необходимо преобразовать в коды.

    Создайте новый проект с пустым шаблоном действия и выберите подходящее имя для своего приложения. Для этого приложения мы создадим 2 действия и 2 класса Java:

    1. MainActivity. Он создается автоматически при создании нового проекта. Здесь происходит большая часть взаимодействий.
    2. SelectDeviceActivity. Пользовательский интерфейс, в котором вы выбираете устройство Bluetooth, которое хотите подключить.
    3. DeviceListAdapter. Класс для отображения списка сопряженных устройств Bluetooth, которые вы можете подключить. Список будет отображаться в SelectDeviceActivity.
    4. DeviceInfoModel. Класс, который действует как заполнитель для информации об удаленном устройстве.

    После того, как вы создали все действия и классы выше, ваш файл AndroidManifest.xml будет выглядеть примерно так:

    Обратите внимание, что вам следует добавить разрешение Bluetooth, чтобы иметь доступ к устройству Bluetooth вашего телефона.

    MainActivity — это основной пользовательский интерфейс, в котором вы можете взаимодействовать с интерфейсами, которые подключат вас к удаленному устройству Bluetooth и будут управлять им.

    Изображение для сообщения

    Макет главного экрана

    XML-код для макета выше выглядит следующим образом:

    Это действие отобразит список удаленных устройств Bluetooth, которые уже сопряжены с вашим телефоном. Он отображается при нажатии кнопки «Подключить» в MainActivity. XML-код макета для этого действия выглядит следующим образом:

    Теперь мы продолжим код. Код в MainActivity — это код, создающий Bluetooth-соединение с удаленным устройством. Вы можете просто скопировать и вставить приведенный ниже код в свой проект. К коду были добавлены некоторые комментарии, чтобы вы могли лучше понять его.

    Я вношу небольшие изменения стиля в цвет ресурсы.

    Это действие работает с классами DeviceListAdapter и DeviceInfoModel для отображения списка сопряженных устройств.

    DeviceListAdapter .java

    DeviceInfoModel.java

    Весь проект Android также доступен на Github.

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

    Примечание. Из-за периодического обновления приложения версия Github может немного отличаться от кода в этом сообщении. Но основная функция осталась прежней.

    Нам нужно внести небольшие изменения в код Arduino из этого руководства. Вы можете создать новый эскиз Arduino и скопировать и вставить приведенный ниже код.

    Не забудьте скомпилировать и загрузить код вашей платы Arduino. Вы также можете перейти на Github, чтобы получить этот код.

    Выполните следующие действия, чтобы подключить свой телефон к плате Arduino.

    1. Подключите модуль HC05 к плату Arduino, как описано в предыдущем посте, затем подключите ее к источнику питания. Светодиод на модуле HC05 должен быстро мигать.
    2. Активируйте Bluetooth на своем телефоне и выполните сопряжение HC05 с телефоном. Имя устройства, которое вы ищете, — «HC-05». Вам пока не нужно ваше приложение для сопряжения с HC05.
    3. Теперь откройте приложение и нажмите кнопку «Подключить». На экране отобразится список сопряженных устройств. Если вы измените имя устройства при сопряжении с HC05, вы фактически измените только псевдоним. В вашем приложении отображается только имя устройства, поэтому выберите «HC-05».
    4. После подключения HC05 на панели инструментов отобразится статус и загорится светодиодная кнопка. Вы знаете, когда HC05 подключен, когда светодиод на HC05 медленно мигает.

    Теперь вы можете нажать кнопку светодиода и наблюдать, как встроенный светодиод на Arduino включается и выключается. Визуально вы также можете увидеть, как изображение лампочки на вашем телефоне меняет цвет, показывая состояние светодиода. Цвет меняется, когда ваш телефон получает сообщение о состоянии от Arduino, поэтому вы можете заметить некоторую задержку между сменой светодиода на Arduino и изображением лампочки на вашем телефоне.

    Теперь вы поняли одно из способы подключения вашего телефона Android к плате Arduino. Теперь вам доступны новые захватывающие возможности. Например, вы можете:

    1. Улучшить приложение, чтобы оно показывало предупреждение, когда функция Bluetooth на вашем телефоне еще не активирована.
    2. Добавить еще коды на Arduino, поэтому теперь ваше приложение может управлять 2 светодиодами.
    3. Подключите простой датчик на Arduino, например датчик приближения и считайте значения на вашем телефоне.
    4. И многое другое. Если вы можете вообразить это, вы можете создать его.

    Если вы считаете, что это руководство слишком сложно для понимания или если у вас нет предварительных знаний в области программирования для Android, вы можете всегда проходите курс «Основы программирования Android для разработчиков Arduino» в Udemy, который поможет вам создать собственное приложение Bluetooth с нуля.

    Оцените статью
    logicle.ru
    Добавить комментарий