Вики раздел проекта Амперка

Компания Амперка с 2010 года успешно занимается продажей и развитием хобби-электроники. У них есть электронный магазин где они продают Ардуино, РазбериПай, и разнообразные компоненты. И так же у них есть целый раздел с русскоязычной информацией по Арудино, для начинающих самое то. Где представлены: Читать далее
0

Запуск веб-сервера на базе RaspberryPi (Ruby/Sinatra)

Запуск веб-сервера на базе RaspberryPi (Ruby/Sinatra)

У вас есть RaspberryPi микрокомпьютер и вы хотите сделать простую веб-админку. Для этого можно использовать Ruby язык, и простой веб-фреймворк — Sinatra. Весь процесс от начала, и до открытия веб-страницы в браузере займёт не более 10 минут, при этом знание Ruby на данном этапе — не обязательное. Предполагается, что вы проделали процедуру настройки RPi (например на базе данного туториала https://github.com/robotclass/robotclass/blob/master/articles/raspberry-pi-start/raspberry-pi-start.md) Установлена система Raspberian (aka Debian)

Начальное состояние

RPi подключен к интернету, вы зашли в него по SSH.

Установка Ruby

Можно установить из пакетов:
sudo apt-get install ruby
Будет установлен Ruby 1.9.3 версии, и менеджер пакетов Gem.

Установка фреймворка Sinatra

Многие наверное слышали про веб-фреймвор на базе Ruby — RubyOnRails, для наших несложных задач можно попробовать простой и элегантный фреймворк Sinatra. Устанавливаем его с помощью менеджера пакетов Gem:
sudo gem install sinatra

Запуск веб-сервера

Мы не будем устанавливать и конфигурировать Apache или Nginx — для тестовых задач вполне подойдёт поставляемый вместе с Ruby веб-сервер WEBRick. Нам необходимо только написать программу для обработки входящих запросов по HTTP, и выдачу результатов браузеру. Создаём папку web в ней будет наше приложение:
mkdir web
Переходим в папку:
cd web
Создаём и открываем на редактирование файл app.rb:
nano app.rb
Открывается текстовый редактор, вводим этот код:
require 'sinatra'

get '/' do
  'Hello world!'
end
Сохраняем — нажимая «F2», подтверждаем сохранение нажав «Y», видим название файла — нажимаем Enter. Всё программа написана, в наше программе один обработчик на входящий GET запрос «/», и выдачу текста 'Hello world!' в ответ. Для старта нашего приложения надо набрать:
ruby app.rb -o IP.IP.IP.IP
Где IP.IP.IP.IP — это IP адрес вашего микрокомпьютера RaspberryPi. В случае успешного запуска будет выведено что-то вроде этого:
[2013-07-19 06:04:22] INFO  WEBrick 1.3.1
[2013-07-19 06:04:22] INFO  ruby 1.9.3 (2012-04-20) [arm-linux-eabihf]
== Sinatra/1.4.3 has taken the stage on 4567 for development with backup from WEBrick
[2013-07-19 06:04:22] INFO  WEBrick::HTTPServer#start: pid=2794 port=4567
Что означает, что веб-сервер WEBrick успешно стартовал и слушает порт 4567, по-умолчанию (можно указать свой порт с помощью ключика -p). Открываем браузером адрес: http://IP.IP.IP.IP:4567 Видим: Hello world!

Управление воспроизведением интернет радио

Я в качестве эксперимента установил на RPi Music Player Daemon (MPD) (http://www.musicpd.org/) и проигрываю интернет радио. И можно продемострировать как создать веб-приложение для старта и стопа этого приложения. Старт и остановка осуществляются командами:
mpc play
и
mpc stop
Нам надо сделать URL, при запросе которых будет выполнена соотв. команда. В Ruby запуск команд выполняется командой system("CMD") где CMD — команда, которую необходимо выполнить. Изменяем наш код на следующий:
require 'sinatra'

get '/' do
  'Hello world'
end

get '/stop' do
  system('mpc stop')
end

get '/play' do
  system('mpc play')
end
Останавливаем веб-сервер Ctrl-C (если он стартован), открываем на редактирование файл:
nano app.rb
Сохраняем, и запускаем опять веб-сервер. Открываем браузером URL для запуска:
http://IP.IP.IP.IP:4567/start
URL для остановки:
http://IP.IP.IP.IP:4567/stop

Шаблоны и редиректы

Доработаем наше приложение, чтобы на стартовой странице отображалось состояние проигрывателя, ссылка для старта, и для остановки. Получится такое приложение:
require 'sinatra'

get '/' do
  @status = `mpc status`
  erb :main
end

get '/stop' do
  system('mpc stop')
  redirect '/'
end

get '/play' do
  system('mpc play')
  redirect '/'
end

__END__

@@main
<!DOCTYPE html>
<html>
  <head>
    <title>Ruby demo</title>
  </head>
  <body>
  <pre><%= @status %></pre>
  <a href="/play">PLAY</a> |
  <a href="/stop">STOP</a>
  </body>
</html>
Замечания: Видим строку:
@status = `mpc status`
Здесь переменной @status присваивается результат выполнения шелл команды mpc status, в отличие от формата system('mpc play') — результат выполнения возвращается строкой (обратный апостроф). В Sinatra можно включать шаблон внутрь файла с программой, для этого добавляется разделитель __END__ После него идут шаблоны (html) с вставками руби кода — <%= @status %> — выводит значение переменной @status. В руби переменная экземпляра класса начинается с @. Шаблоны называются в начале с помощью @@NAME — это формат Sinartra. Далее редиректы redirect — и указывается УРЛ куда надо редиректить браузер — в нашем случае на корневую страницу.

Резюме

У нас достаточно быстро получился несложный пример веб-приложения на языке Ruby, которое легко можно изменить для запуска любых shell команд на RaspberryPi микрокомпьютере.

Производительность

В качестве эксперимента был создан тестовый роутер:
get '/test' do
  @t = 'test'
  erb :test
end
И шаблон:
@@test

<!DOCTYPE html>
<html>
  <head>
    <title>Ruby demo</title>
  </head>
  <body>
  <pre><%= @t %></pre>
  </body>
</html>
И выполнен запрос командой ApacheBench
ab -c 1 -n 100 http://IP.IP.IP.IP:PORT/test
С другой машины, результат:
Requests per second:    12.64 [#/sec] (mean)
То есть порядка 10 запросов в секунду может выдавать Ruby Sinatra веб-фреймвор, на простых задачах отображения, установленный на микрокомпьютере RaspberryPi.

Ссылки

Основной сайт фреймворка Sinatra: http://www.sinatrarb.com/ Русскоязычная страничка: http://sinatraruby.ru/ Руби вики-страница: http://ru.wikibooks.org/wiki/Ruby Самые основы Ruby: http://www.shokhirev.com/mikhail/ruby/ltp/title.html
auto generated by github2wp
0

Создание веб-сервера видео-трансляции на базе RaspberryPi за 5 минут

Создание веб-сервера видео-трансляции на базе RaspberryPi за 5 минут

У вас есть RaspberryPi микрокомпьютер и вы хотите сделать сервер веб-трансляции. Так же вы проделали процедуру настройки RPi (например на базе данного туториала https://github.com/robotclass/robotclass/blob/master/articles/raspberry-pi-start/raspberry-pi-start.md)

Периферия

  1. USB Веб-камера (в качестве теста была взята самая дешёвая камера — Ritmix 640×480, за 250 руб.

Предусловие

USB Веб-камера подключена к RaspberryPi, который подключен к сети, и вы можете заходить по ssh. (в случае захода на RPi консольно через ssh — монитор, клавитара и мышка не нужны) Читать далее
1+

Наш робот-следопыт делает свои первые успехи

На этой неделе мы приступили к изучению принципов движения робота-следопыта (он же Line follower). Этот робот является очень популярным учебным проектом. Суть его функционирования сводится к движению по контрастной линии. Можно использовать черную линию на светлом фоне, либо белую на темном. Мы выбрали второй вариант, так как белую линию оказалось легко сделать с помощью малярного скотча. Фоном же, в нашем случае, послужила старая доска темно-коричневого цвета, которая уже давно отжила свой век, и пылилась в кладовке. Линию детектируют два инфракрасных датчика QRD1114, подключенных к аналого-цифровому преобразователю. Каждые несколько миллисекунд Raspberry PI снимает показания с датчиков, и определяет: следует ли начать поворот, можно ли двигаться прямо, или нужно откатиться назад. Спустя час мозгового штурма, ребята смогли заставить робота двигаться по белой линии. Конечно, пока он делает это весьма неуверенно, постоянно ошибается, то и дело пытается удрать, но для первой попытки все получилось совсем неплохо. На следующих занятиях мы продолжим изучать поведение робота-следопыта, и попробуем научить его ходить по разветвляющимся линиям.
0

Балансирующий робот

Балансирующий робот интересный пример роботизации, физики и математики. Получая показатели с гиродатчика, надо удержать вертикальное равновесие с помощью двигателей. Интересный пример создания балансирующего робота на базе конструктора LEGO Mindstorm NXT На базе RasbperryPi: На базе Arduino (с описанием компонентов и кодом): Балансирующий робот — это по научному — обратный маятник (Inverted pendulum). Сегвей построен по такому же принципу.
0

Работа с двигателями из микроконтроллеров

Очень хорошее демонстрационное видео, показывающее спектр доступных электро-двигателей, и методы работы с ними, из Arduino и RaspberryPi. 1) A basic switch 2) Power Darlington Transistor (https://www.adafruit.com/products/976) 3) A Relay (SPST aka single pull single throw) 4) Sparkfun’s beefcake relay kit (https://www.adafruit.com/products/976) 5) an H-bridge chip (http://www.sparkfun.com/products/315) 6) Sparkfun’s Dual H-bridge motor driver (https://www.sparkfun.com/products/9457)
0

Домашняя автоматизация с помощью RaspberryPi

Идея которая у меня давно — это применение RaspberryPi для домашней автоматизации. Вот хороший пример, человек установил в квартире RaspberryPi, подключил IR передатчик (для управления телевизором), беспроводной радио модуль, и адаптеры для беспроводного включения/выключения розеток (лампочки, телевизор), установил музыкальный сервер на RaspberryPi (http://www.musicpd.org/) для прослушивания музыки. На RaspberryPi — работает веб-сервер, и можно зайти через интернет на страницу, с которой можно управлять музыкой, каналами телевизора, включать/выключать розетки. Лучше один раз увидеть: И вот описание: My basic Raspberry Pi home automation setup Используемые устройства:
0