Официальный сайт компании Arduino по адресу arduino.cc
Дисплей высокого разрешения за четыре доллара
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Наигравшись за осень и зиму с разными TFT-дисплеями, я решил подойти к дачному сезону с более удобным вариантом. Естественным образом выбор пал на Android-смартфон (в связке с ESP):
- за редким исключением смартфоны находятся под рукой и у меня, и у жены, так пусть послужат;
- у смартфона (не говоря уж о планшете) достаточно большой по размеру и оставляющий далеко позади все дисплейчики в плане разрешения и яркости красок экран;
- индуктивный сенсорный экран, опять же, позволяет управлять пальцем;
- WIFI-канал обеспечивает устойчивую связь по всему участку.
Из обширного ассортимента ESP-шек выбор пал на Witti Cloud – недорогой и удобный в программировании (за счет USB-TTL-переходника и разведенных линий Reset/Flash на отдельной платке) модуль. Еще один достойный кандидат – модуль Lua, но он побольше в размерах.
ESP-модуль работает в режиме точки доступа и постоянно готов к общению. Поэтому жрет достаточно много и запитываться должен от сети или от емкого аккумулятора. Соответственно, смартфон общается с ним в режиме клиента, все, что необходимо сделать для сеанса связи – подключиться к соответствующей точке доступа.
На смартфоне реализован тонкий клиент (демо-приложение можно сгрузить здесь). То есть, вся логика работы программируется в ESP-модуле и - возможно - присоединенных к нему Ардуинах. Смартфон лишь отрисовывает поступающие на него графические команды, а при нажатии на расположенные внизу экрана кнопки отправляет ESP-модулю восемь фиксированных ответов:
fun1 | fun4 | drw |
fun2 | fun5 | redrw |
fun3 | fun6 |
Нажатие на девятую кнопку “SnSht” позволяет сделать снимок экрана.
Сейчас реализовано несколько простейших команд:
FG | Задание цвета точек/прямых (выбор между 16 стандартными цветами) |
FD | Задание цвета переднего и заднего фона дисплея |
FZ | Задание цвета для вывода текста (шрифт и фон) |
GD | Рисование прямой по двум точкам |
GR | Рисование прямоугольника по двум противоположным вершинам |
GW | Рисование прямой из текущей точки в точку с указанными координатами |
ZL | Вывод текста с выравниванием влево |
ZC | Вывод текста с выравниванием по центру |
ZR | Вывод текста с выравниванием вправо |
DL | Заливка графической области дисплея цветом заднего фона |
DS | Заливка графической области дисплея цветом переднего фона |
RF | Заливка прямоугольной области |
RL | Стирание прямоугольной области (заливка цветом заднего фона) |
RS | Заливка прямоугольной области цветом переднего фона |
В планах стоит расширение списка команд, управление ресурсами (изображения, шрифты, структуры данных), а также создание стандартных инструментов типа балочных и стрелочных индикаторов. Но уже существующего набора достаточно, чтобы создать информативную статичную картинку с динамичным реагированием на команды пользователя.
a
Результат работы команд FG, GD, GR, RF - выбор цвета, отрисовка отрезка, заполненного и незаполненного квадратика | а здесь добавлено рисование параболы с помощью отрезков (команда GD) по рассчитанным в цикле координатам |
![]() |
![]() |
Ну да, емкостный...
Чет я не понял, а где, собственно, дисплей за $4? Или Вы оцениваете смартфон в $4? Или название служит исключительно для привлечения внимания, ничего не имея общего с проектом?
Так написано же в самом начале - смартфоны лежат в карманах. И у меня, и у жены и у сына. Планшет тоже вопиет о том, чтобы испльзовать его более интенсивно. Вложение трех-четырех долларов в покупку esp8266-модуля позволяет превратить смартфон/планшет во вполне себе функциональный терминал для микроконтроллера.
При этом подключение дисплея и блока кнопок не стоит ничего (в смысле пинов), если характеристик самого модуля (десять цифровых входов/выходов и один аналоговый вход) будет достаточно для приложения. Либо оно произойдет ценой двух цифровых входов/выходов, если модуль, подключенный к основному микроконтроллеру по UART-каналу, будет работать в качестве посредника между смартфоном и микроконтроллером.
step962, вы бы хоть какой действующий пример выложили. С вашей колокольни оно наверное всё выглядит иначе, но глазами стороннего пользователя ПОКА виден просто художественный абстракционизм. Я конечно понимаю, что нетерпится поделится задумкой, но всё таки рановато :) Так же технические детали не ясны, например по какому протоколу всё это работает, порты, и прочее..
Ваша правда - исправляюсь. Вот тот скетч, с помощью которого генерятся вышеприведенные изображения:
В нем используется только часть упомянутых ранее (и уже реализованных) команд. Как можно уяснить из скетча, формат каждой отправляемой команды:
<стартовый символ><команда><параметры><стоповый символ>
В качестве стартового символа используется решетка ("#"), в качестве стопового - точка с запятой (";"). Команда всегда представляет комбинацию двух латинских букв в верхнем регистре, наличие и размер блока параметров зависит от команды, параметры отделяются друг от друга запятыми.
Например:
#RL1,1,-1,-1; - заливка всего дисплея фоновым цветом с помощью команды заливки фоновым цветом (RL) прямоугольной области с координатами (1,1)-(-1,-1). С левым верхним углом все понятно: начало координат в верхнем левом углу экрана, значения абсцисс увеличиваются вправо, значения ординат - вниз. Ну а правый нижний угол здесь задан парой (-1,-1), поскольку в Android-приложении отрицательные координаты интерпретируются как откладываемые от правой стороны экрана влево и от нижней стороны - вверх. Такая схема позволяет без особых ухищрений более-менее равномерно заполнять экран на устройствах с различным разрешением.
...
Я конечно понимаю, что нетерпится поделится задумкой, но всё таки рановато :) Так же технические детали не ясны, например по какому протоколу всё это работает, порты, и прочее..
Можно, конечно, сразу расписать простыню на полдюжины экранов, но ведь все равно те или иные вопросы останутся неосвещенными. И при наличии интереса уточняющие вопросы будут. Так пусть их будет чуть побольше...
Протокол - HTTP, порт - 80.
Прочее... А что именно? Привести кодировку цветов, или расписать, как загружаются Android-приложения из сторонних источников? Опять же, вопрос вывода текстовой информации может для кого-нибудь иметь первостепенное значение...
КГ/АМ
Все это делается в броузере. И работает на любой платформе, хоть на холодильнике, а не только в смартфоне с спецсофтом. И число кнопок и вобще контролы получаются произвольные. И обмен по WebSocket быстрый и простой в реализации. А уж протокол какой захочется - примитивы на канву или высокоуровневые команды - ну как душе угодно, канва все стерпит.
Автору разобратся не только с типами тачскринов, но и с ESP, какие они бывают.
Да уж, заголовок статьи абсолютно не соотверствует содержанию... Каждый, как и я, надеялся увидеть здесь подключение большого дисплея к Ардуино, а не связь мобильника по вайфаю, "лежащего в кармане"...а жаль
Так написано же в самом начале - смартфоны лежат в карманах...
А почему Вы не написали: "Дисплей высокого разрешения + процессор 1.5 ГГц + 16 Гбайт бесплатно"?
Ведь это все уже лежит в кармане. И пользоваться можно без каких либо дополнительных затрат (ну при условии, что сим-карта тоже в кармане).
А почему Вы не написали: "Дисплей высокого разрешения + процессор 1.5 ГГц + 16 Гбайт бесплатно"?
Ведь это все уже лежит в кармане. И пользоваться можно без каких либо дополнительных затрат (ну при условии, что сим-карта тоже в кармане).
Не совсем так - у ответной части (МК) бедновато по части организации интерфейса "человек-машина" (ЧМИ). Если задача требует постоянного или даже спорадического общения с микропрограммой, к микроконтроллеру придется подключить модуль, дающий возможность связываться с внешним миром - а он, как правило, не лежит в кармане. Приходится либо простейший LCD-дисплейчик подключать с какой-никакой клавиатурой, либо к графических дисплеям с сенсорной панелью. Каждый из этих вариантов может занять достатояно много выводов мк, уж во всяком случае больше, чем самый расточительный вариант при работе с ESP-модулем - "ESP+Arduino" - два вывода (RX и TX).
И таки да - при условии, что и ЕСПшка лежит в кармане, ЧМИ можно будет получить забесплатно.
Да уж, заголовок статьи абсолютно не соотверствует содержанию... Каждый, как и я, надеялся увидеть здесь подключение большого дисплея к Ардуино, а не связь мобильника по вайфаю, "лежащего в кармане"...а жаль
Это приложение и на 10-дюймовом планшете работает без проблем. Кстати, в первом посте представлены скриншоты с 7-дюймового дисплея. Система их урезала по размеру, поэтому тонкие линии утратили свою яркость.
А вы верите в то, что Arduino сможет более или менее оперативно управлять большим экраном непосредственно?
КГ/АМ
Все это делается в броузере. И работает на любой платформе, хоть на холодильнике, а не только в смартфоне с спецсофтом. И число кнопок и вобще контролы получаются произвольные. И обмен по WebSocket быстрый и простой в реализации. А уж протокол какой захочется - примитивы на канву или высокоуровневые команды - ну как душе угодно, канва все стерпит.
95% форумчан с вами абсолютно согласны. Раздел "Программирование" тому порукой.
Автору разобратся не только с типами тачскринов, но и с ESP, какие они бывают.
> 95% форумчан с вами абсолютно согласны. Раздел "Программирование" тому порукой.
step962 - я вас много почитал в архивах, уж у вас-то не должно быть никаких иллюзий, что для "95% форумчан" ваш код - это китайская грамота. Даже если вы распишите все пошагово на 20 страницах, начиная с установки АрдуиноIDE и АндроидSDK - все равно ведь будут просить готовый скетч и спрашивать что-то на уровне "а что означает i++"?
раз вы не пошли путем динамического HTTP-кода - хотя вроде это было очевидно с учетом использования либы Webserver.h - не вполне понятно, зачем тогда вообще ESP и WiFi, Почему не взять Блютуз - он компактнее и сильно дешевле, а в смысле коммуникаций со смартофоном ничуть не хуже.
А почему Вы не написали: "Дисплей высокого разрешения + процессор 1.5 ГГц + 16 Гбайт бесплатно"?
излишки процессорных мощностей и памяти будут изыматься в пользу Народной Республики Суберии.
А вы верите в то, что Arduino сможет более или менее оперативно управлять большим экраном непосредственно?
Arduino Due (http://arduino.ru/Hardware/ArduinoDue) сможет.
Выложена обновленная версия Android-клиента - (ссылка для скачивания).
Теперь связь с Arduino поддерживается не только по WIFI, но и по Bluetooth. Для переключения между режимами связи необходимо вызвать меню приложения, выбрать пункт "Settings" и в открывшемся окне в группе "Channel" выбрать нужный режим.
Для тех кому трудно "вручную" генерировать управляющие последовательности - можно воспользоваться библиотекой MD_Scout (ссылка для скачивания). Библиотека в стадии разработки - пока не все реализованные в клиенте команды поддерживаются, но необходимый минимум для тестирования обеспечен.
Меня как-то тоже такая идея посещала http://arduino.ru/forum/apparatnye-voprosy/android-smartfrn-vmesto-gsm-m...
Насколько я знаю подобие таких проектов уже существует. Топик стартеру удачии!
Вот ещё инфа может на какие мысли наведет http://azjio.narod.ru/autoit3_docs/guiref/GUIRef.htm
Мне кажется кроме примитивов необходимо заложить какие-то стандартные элементы визуализации (шкалы, кнопки, чек боксы, стрелочные индикаторы).
С ардуино передавать команду на отрисовку шкалы (drawBar(координаты, минимум, максимум, текущее значение), также можно добавить к свойствам возвращаемое значение при тапе на объект (для кнопки например или чекбокса).
Имхо, проект мертворожденный. Ясно, что моё мнение никому не впилось, но поясню, почему такое имхо: передавать с ардуины всякие команды на отрисовку примитивов на смартфоне - чистой воды идиотизм, кроме идиотии - за такой идеей ничего не стоит. Раз уж упёрлись в экран смартфона, то более правильным представляется вариант приложения с уже оформленными GUI-примитивами, типа кнопки, чекбоксы, графики и т.п. - раз уж юзать возможности смартфона - то юзать. Но таких векторов применения - уже есть, тот же Blynk. Именно поэтому считаю, что проект - мертворожденный.
Имхо, проект мертворожденный.
...
Ну, раз доктор сказал в морг...
...
Мне кажется кроме примитивов необходимо заложить какие-то стандартные элементы визуализации
...
На все требуется время. Сначала появились графические примитивы, затем стали понемногу появляться и элементы, поднимающие градус интерактивности. Часть из них я собрал на прилагаемом экране:
Это кнопка, слайдер, крутилка, стрелочный индикатор, 7-сегментный "дисплей", "дисплей" 16х2, возможность вывода текстов с использованием ttf- и otf-шрифтов.
Кнопка уже может задаваться на уровне команд Arduino, работает в двух режимах - без фиксации ("звонок") и с фиксацией ("переключатель") состояния. В соответствующие моменты на Arduino отправляются строковые сообщения с кодами нажатия/отпускания той или иной кнопки (или с кодом переключения в соответствующее положение в случае кнопки с фиксацией).
Остальные упомянутые элементы создаются в отладочном окне планшета и ждут того момента, когда для них появится набор команд, необходимых для задания/настройки со стороны Arduino.
Ну а в планах - еще дюжиина-другая элементов управления и идеи по использованию ресурсов. Надеюсь, что за зиму удастся реализовать основную часть задуманного.
PS: Опаньки, а слайдер-то на 7-дюймовом экране и не виден. Ну да ладно - в следующем окне отображу.
Ну то есть как я и сказал - от баловства с рисованием примитивов таки пошли по правильному пути ;) Теперь надо отказаться от самописных контролов там, где это возможно, и юзать встроенные в андроид GUI-элементы - это будет правильно, т.к. промышленный стандарт, время велосипедов уже давно прошло. А где будет не хватать GUI-элементов - тогда уже решать по факту.
И да, как показывает практика - баловство со шрифтами нужно только в типографии. Это я к тому, что лучше на первом этапе просто на это подзабить, т.к. это, по сути - рюшечки, сиречь развлекуха кота, когда ему делать нечего. Кучей шрифтов пользователя не купишь, единственное, что может привлечь пользователя - это решение его проблемы.
Поэтому задам вам простой вопрос: какую проблему пользователя решает ваш проект? Без абстракций, пожалуйста, типа "кучу GUI-элементов, лёгкая отрисовка примитивов" и пр. Пока я вижу, что название проекта не соответствует его содержанию, это скорее ваша игрушка, чем решение конкретной проблемы - именно поэтому и задаю вопрос.
Без обид, говорю предельно жёстко - сознательно.
Подпишусь на тему...
... единственное, что может привлечь пользователя - это решение его проблемы.
Поэтому задам вам простой вопрос: какую проблему пользователя решает ваш проект? Без абстракций, пожалуйста, типа "кучу GUI-элементов, лёгкая отрисовка примитивов" и пр. Пока я вижу, что название проекта не соответствует его содержанию, это скорее ваша игрушка, чем решение конкретной проблемы - именно поэтому и задаю вопрос.
Без обид, говорю предельно жёстко - сознательно.
Ну есили добавить сигнализацию по смс или мылу при какихто заданных значениях и прием смс команд как в Virtuino например...
Вот только дизаина в одном стиле как в Blink не хватает.
Ну есили добавить сигнализацию по смс или мылу при какихто заданных значениях и прием смс команд как в Virtuino например...
Вот только дизаина в одном стиле как в Blink не хватает.
А как тем виртуино пользоваться? а то честно говоря - не соображу как наваять на экран иконок и привязать к рабочему проекту.
подпишусь на тему, интересненько. И ссылочки интересные здесь публикуются.
Как понимаю , если слать графические команды типа UTFT , Adafruit - это будет очень медленно.
! хотелось бы увидеть видео тест adafruit или UTFT . мож будут хотябы как OLED на I2C , по скорости.
? А что если излишние мощности планшетника использовать как это делают NEXTION дисплеи (дисплей+ stm32 , управление по Rx Tx готовой вами написанной графики на stm32) ?
? есть такие проекты которые повторяют точь в точь NEXTION дисплей ?
Rx Tx как раз можно было организовать по Wi-Fi или блютуз .
И да, как показывает практика - баловство со шрифтами нужно только в типографии. Это я к тому, что лучше на первом этапе просто на это подзабить, т.к. это, по сути - рюшечки, сиречь развлекуха кота, когда ему делать нечего. Кучей шрифтов пользователя не купишь, единственное, что может привлечь пользователя - это решение его проблемы.
Монитор компьютера - не типография, тем не менее в любой форме можно насчитать 2-3 разных шрифта.
При этом в плане программирования под Android задача решается достаточно просто. Так что почему бы и нет?
Какую проблему решает прикрученный к Arduino дисплейчик от нокии? Какой особый смысл в нем без дополнительных кнопочек? Посмотреть на отображаемую на таком дисплее информацию - маловато будет, иногда требуется и настройки программы подкорректировать. Дисплейчик прикрутили, кнопочки... глядишь, и пины у микроконтроллера почти закончились. В варианте с дисплеем Android-устройства требуется пожертвовать всего двумя пинами, чтобы на выходе получить средство отображения гораздо большего объема информации, а также устройство ввода.
Ну есили добавить сигнализацию по смс или мылу при какихто заданных значениях и прием смс команд как в Virtuino например...
Это пока в повестке дня не стоит.
Набор элементов одного стиля - дело наживное. Или даже дело дизайнера. Пока то я основное внимание уделяю отладке имеющихся объектов и на рюшечки времени не трачу. Маловато его - времени-то свободного...
Как понимаю , если слать графические команды типа UTFT , Adafruit - это будет очень медленно.
Что в вашем понятии быстро/медленно? Отрисовка статичной формы за полсекунды (Bluetooth, управляемый через SoftwareSerial на жалких 9600 бит/с) или за одну десятую секунды (WiFi) - это медленно или быстро? Как по мне, так для задач контроля/управления большее высокая динамичность мало когда требуется.
За прошедшие полтора месяца разработан механизм создания органов управления на экране Android-устройства, взаимодействующих по Bluetooth- или WIFi-каналу со скриптом. Библиотека MD_Scout также расширилась и теперь все команды из скетча можно отправлять, оперируя не создаваемыми вручную символьными последовательностями, а вызывая соответствующие библиотеченые функции.
Что, кроме команд прямого рисования, доступно на данный момент:
Определение простой кнопки (без фиксации нажатого положения) - символьная команда "AT" или функция defineTouchButton().
Определение кнопки-переключателя (два фиксированных положения) - символьная команда "AK" или функция defineCheckButton().
Для задания ручки-крутилки необходимо вызвать функцию defineRotaryButton() или символьной команды "A00".
Слайдеры - горизонтальный и вертикальный - декларируютс с помощью функции defineSlider() или символьной команды "A01".
Поле ввода - функция defineEditText() или команда "".
Ну и терминал: декларация в функции defineTerminal() (команда "TW0") и вывод строки текста в него - writeTerminal() (команда "TWS") . Я использую терминал прежде всего для вывода отладочной информации, естественно, эти его применение не ограничивается.
На картинке представлены перечисленные элементы:
Так выглядит блок кода, создающие представленные на картинке элементы:
И так происходит вывод в терминал:
Ссылка для скачивания Android-программы.
Ссылка для скачивания библиотеки MD_Scout.