Jan. 29th, 2014

zepete: (Default)
В 2010 году, американец Jeff Keyzer (mightyohm) детально описал как сделать wifi радио из роутера. В жиже попытался повторить его поделку [livejournal.com profile] semaev (предположительно, кавказец, ибо вставляет в посты фотографии "черных" и "носастых"), но дальше физического подключения роутера к компьютеру через последовательный порт у него дело не продвинулось. В харбаре еще есть ссылка Jeff Keyzer с инструкцией по изготовлению корпуса и с платой TI LaunchPad Evaluation Kit ценой от 13$ в СШП (хотя они пишут, что стоит она в два раза меньше) и кнопочным управлением.

То есть в рунете нет ничего подобного пиндосовскому творению четырех летней давности по цене (мк AVR стоит дешевле платы TI LanchPad) и удобству использования (крутить одну ручку удобнее, чем нажимать много раз на кнопки) и даже не нашлось желающих перевести его посты с "буржуйского" на русский.

Хотя его wifi радио имеет несколько недостатков:


  • название канала берет из аудио потока, что в большинстве случаев приводит к абракадабре на экране;
  • нет сигналов сброса AVR или роутера, если одно из них перезагрузится во время работы;
  • нет защиты от помех у потенциометра;
  • необходимо делать плату для микросхемы AVR, хотя по цене ic atmega в рознице, можно в китайских интернет магазинах купить готовую плату arduino/freeduino с этой микросхемой;
  • экран моргает каждую секунду, ибо МК не запоминает что он выводил раньше.

Я в своей реализации от этих недостатков избавился, усложнив его программы (в результате от его кода там меньше 30%).
На сегодня схема соединений.
Read more... )
zepete: (Default)

В предыдущих постах уже описал как программируется arduinoдоработка библиотеки LCD и особенности подключения потенциометра.
ИМХО, для понимания работы скетча и переноса его в arduino этого достаточно. Остальное описано на сайте arduino.ru/.

Arduino для маршрутизатора является консолью с LCD экраном и клавиатурой в виде много оборотного потенциометра. Можно использовать одно оборотный потенциометр, но тогда будет тяжело задавать больше 10 опций, хотя стоить он будет в 10 раз меньше.

Алгоритм работы.
Сразу после включения ардуино ждет строку "TPL may play <число каналов> channal.", если оно этого не дождется за 10 минут (переменная cuTimeoutOpenWRT), то начинает слать в роутер строку о необходимости сброса маршрутизатора, ибо это говорит о том, что во время работы по непонятным причинам arduino перезагрузилось.
Когда оно этой строки дождется, то начинает принимать команды с роутера.
Он понимает следующие команды:

  • Имя проигрываемой станции: "play:<номер канала>. <имя канала>".
  • Сброс arduino: "reset arduino".
  • Изменение числа доступных каналов: "TPL may play <число доступных каналов> channal.".
  • Сообщение об ошибке роутера: "error:<число>. <имя ошибки>".
  • Текущее время:"time:<текстовое сообщение о времени>".

ЖКИ поделен на 2 области.

  1. Верхняя строка, в которую выводится сведения о положении потенциометра. Сведения о положении потенциометра выводятся только когда он поворачивается, если после последнего сдвига придет сообщение с текущем временем, то сведения о положении потенциометра будут затерты строкой с текущем временем.
  2. Три нижних строки в которых индицируется имя текущего канала или ошибка проигрывателя. Они берутся из команд "play:<номер канала>. <имя канала>" и "error:<число>. <имя ошибки>", только слово "play" вырезается, а "error" нет.
Для упрощения протокола обмена между arduino и роутером имя проигрываемого канала повторяется каждую секунду, поэтому для предотвращения ежесекундного  мигания экрана, LCD переписывается только если придет строка отличная от предыдущей.

По прошествии 0.1 секунды после последнего сдвига потенциометра (переменная SPTIME), с периодичностью в 3 секунды (переменная STPLTIME) посылается в роутер команда сменить канал: "Tuner: <номер канала>".

!!!ВНИМАНИЕ!!!
1. Компилятор с++ для arduino имеет ошибку: не умеет корректно сравнивать переменные типа unsigned long, поэтому для обработки длительных временных промежутков, я сначала милисекунды преобразовывал в секунды, а потом уже их сравнивал.
2. Если непрерывно слать данные в arduino по последовательному порту, то по непонятным причинам, оно превращается в пожирателя энергии, которому БП в 1A недостаточно. Поэтому, для предотвращения перегрева, зависаний и сбоев arduino,  непрерывно слать данные ему нельзя.
под катом код скетча )

Profile

zepete: (Default)
zepete

January 2026

S M T W T F S
    1 23
4 56 78910
11121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 15th, 2026 05:56 am
Powered by Dreamwidth Studios