Не совсем и не только Arduino. Чат LORduino с видеотрансляцией Arduino.

Нет ответов
Balancer
Offline
Зарегистрирован: 15.09.2013

На форуме Linux.Org.Ru, известном также как LOR (отсюда и название проекта) позавчера, на день программиста разместили традиционный скриншот Arduino c «Привет, LOR!». В голову пришла мысль, сделать такой же, но с минимальной пользой — что-то выводить с компьютера. В принципе, есть Serial Bluetooth модуль, но до сих пор руки не доходили испытать, к тому же для долгой работы всё равно требуется питание и USB для этого вполне удобен, так что решил поэкспериментировать с передаче информации по USB Serial. Вывести что-нибудь полезное на экран и в таком виде уже отправить фотографию.

Сказано — сделано. Давно уже валялся Arduino Nano, воткнутый в макетную плату с индикатором 20x4, так что минут через 15 чтения примеров и экспериментов у меня на экране уже показывался текст.

Возник вопрос — что выводить. Ну не «Hello, world» же. Это совсем банально. Тем более, что русского мой индикатор не поддерживает. Попробовал выводить, например, начало заголовков последних 4-х новостей с означенного сайта. При чём из спортивного интереса сделать это на bash'е и системных утилитах, без отдельного программописания. Угрохал не меньше часа. А то и больше. Ничего толкового не добился. Транслит, четыре строчки по 20 символов — это ужасно :)

И тут в голову пришла мысль. Дать пользователям самим что-нибудь писать. Вывести формочку, скриптом перекинуть уже в /dev/ttyUSB0. Но как им потом это увидеть? Наладать видеотрансляцию самого Arduino! Работа закипела :)

Отладка пошла сразу по финальному адресу — http://home.balancer.ru/lorduino/
 

Организация видеотрансляции далась тяжелее всего. Веб-камера есть, но нужно выдать понимаемый браузерами поток. И показать его на сайте. С показом проблем особых не возникло, привычный Flowplayer, как было заявлено (я его раньше использовал для показа FLV-файлов на одном из веб-проектов) потоковое видео играть умеет, а вот трансляция… Больше часа я угрохал, пока не понял, что встроенный в Ubuntu avserver я так и не осилю и не смог запустить трансляцию через VLC (точнее — его консольную версию cvlc).

Трансляция работает. Сделать размещение сообщения из формочки в Arduino на PHP — дело вообще пяти минут, включая отладку. Правда, я изначально не замахивался ни на что серьёзное, поэтому слепил в ужасном виде, в несколько строк. И потом, по мере наращивания функционала, наступал на грабли. Знать бы — сразу делал бы серьёзно, на фреймворке :)

 

Там, где вывод текста — хорошо бы выводить и историю. Не то, чтобы настоящий чат, но не мешает показать и то, что было. И тут уже как-то хорошо бы это показать надо. Bootstrap 3 одел страничку в более-менее приличный вид. В таком виде «недочат» и был представлен публике вчера ночью :)

Народ пользоваться как чатом не стал, но активность развил относительно бурную. Многим понравилось. Но общаться в таком виде было как-то неудобно. И я, благо jQuery уже был присоединён вместе с Bootstrap, потратил ещё около получаса, чтобы сделать совсем полноценный чат. С автообновлением, именем пользователя и даже граватаром, выводимым по email (если указать).

Правда, с передачей данных на Ардуино всё не совсем гладко. Его буфер принимает только 63 символа. А на индикаторе помещается до 80. Пришлось строку резать, посылать по частям с задержкой, на Ардуино принимать также по частям... С таймингами, похоже, всё не очень хорошо рассчитал и иногда вторая часть приходит как отдельное сообщение (с очисткой экрана). Но в целом — работает удовлетворительно. Тем более, что отображение на Ардуино стало скорее забавой, а чат — вполне самостоятельным инструментом :)

Дальше ещё в течении ночи и сегодняшнего дня понемногу добавил:
 — Гаснущую подсветку, чтобы сразу видеть приход нового сообщения
 — Извещение о новых сообщениях с моего форума (в чат не пишутся)
 — Кое-какие мелочи для защиты от бота (сразу нашёлся какой-то доброхот, который начал постить ко мне ботом bash.im с интервалом в несколько минут), до капчи изгаляться не стал

Вот, так как-то и вышло :) Всё свалено в кучу и сделано на коленке и в аппаратном и программном смысле. Но вполне работает.

Проект ни разу не претендует на оригинальность, подобное делалось и раньше, но для тренировки подходит неплохо. Пока делал, разобрался с организацией видеотрансляций, освоил изменения в Bootstrap 3-й версии, вспомнил (точнее напомнили) о необходимости экранирования данных пользователя при выводе на сайт, освоил несколько полезных для работы трюков на jQuery и так далее.

http://home.balancer.ru/lorduino/

Исходный код Arduino-части: https://gist.github.com/Balancer/6574675