LiveStreet и Arduino/CraftDuino



Сидел я дома и думал о блогах, LiveStreet и вдруг решил научить вести блог свою плату CraftDuino.

CraftDuino — это полностью Arduino-совместимая плата, удобная для быстрого прототипирования и прочих интересных и увлекательных вещей :)

Если Вы никогда не слышали об Arduino — прошу в википедию.
или прочитайте любую из статей:
http://robocraft.ru/blog/arduino/14.html
http://habrahabr.ru/blogs/arduino/30100/

Здесь я уже писал, как ардуина может читать RSS-ленту. Используя тот же принцип можно сделать следующий шаг ;)

Научить Arduino/CraftDuino вести свои заметки не составило большого труда, но я уже не смог остановиться и написал небольшой модуль для LiveStreet, который не только сохраняет данные от Arduino/CraftDuino, но и позволяет через сайт управлять своей платой :)

Вот как это работает:

плата Arduino/CraftDuino подключается к ПК через USB-шнурок.
На ПК работает скрипт на питоне (lsarduino.py), который через определённые промежутки времени опрашивает плату и высылает данные в БД сайта.
POST-запрос на -=сайт=-/include/ajax/lsarduino_add_note.php
Плата может возвращать всё что угодно — влажность земли в горшке с цветком, освещённость вашей комнаты, температуру воды в аквариуме… нафантазировать можно всё что угодно :)

На стороне сайта так же можно добавить задания для платы, которые потом выгружаются в виде xml-ки.
xml-ка генерируется по адресу -=сайт=-/lsarduino/actions
вида
<?xml version="1.0" encoding="utf-8"?>
<actions>
	<action>
		<id>14</id>
		<userid>1</userid>
		<todo>1</todo>
		<todotext>test</todotext>
		<tododate>2009-11-10 11:37:42</tododate>
		<todostatus>1</todostatus>
	</action>
</actions>


xml загружается питоновским скриптом на ПК, парсится и через USB-шнурок задания передаются на плату, которая их выполняет.

В примере модуля — плата просто зажигает и гасит светодиод, но через соответствующую развязку может управлять кофейником, светом, моторчиком робота… опять же — фантазиям предела нет :)

В данной версии задание — это число от 1 до 9
в примере:
1 — зажечь светодиод
2 — погасить светодиод

для работы из-под питона с последовательным портом потребуется библиотека
pySerial

для работы pySerial под ОС Windows понадобится ещё библиотека
pyWin32

у меня всё прекрасно работало на Python 2.5.1 :)

в скрипте нужно настроить номер COM-порта Вашей платы:
SERIAL_PORT = 'COM18'

адрес сайта для работы, логин и пароль учётной записи
USER_LS_SITE_NOTE = 'http://ВАШСАЙТ.ru/include/ajax/lsarduino_add_note.php'
USER_LS_SITE_ACTION = 'http://ВАШСАЙТ.ru/include/ajax/lsarduino_set_status.php'
XML_TODO = 'http://ВАШСАЙТ.ru/lsarduino/actions'
USER_LOGIN = 'ВАШ_ЛОГИН'
USER_PASS = 'ВАШ_ПАРОЛЬ'

что делает lsarduino.py:
смотрим main() и видим там только бесконечный цикл, в котором

сначала получаются данные от платы
— для этого ей посылается байт «0» на что плата может вернуть данные или просто сказать «Hello :)»

, а затем считывается xml-ка с заданиями для платы
Получив задание, скрипт изменяет его статус на сайте с «Новый» на «Загружен» и записывает это число в COM-порт.
Ардуина считывает число с порта и в операторе
switch( r )
    {
      case 0:
        Serial.println("Hello :)");
        break;
      case 1:
        digitalWrite(ledPin, HIGH);   // sets the LED on
        Serial.println("3");
      break;
      case 2:
         digitalWrite(ledPin, LOW);    // sets the LED off
        Serial.println("3");
      break;
      default:
        Serial.println("4");
      break;
    }

производит необходимые действия.
Как видите, ардуина так же отвечает в COM-порт о выполнении задания «3» — «Выполнен»
Питоновский скрипт считывает ответ от платы и записывает его в статус задания на сайте

варианты статуса задания:
('1', 'Новый'),
('2', 'Загружен'),
('3', 'Выполнен'),
('4', 'Отклонён'),
('5', 'Не выполнен'),
('6', 'Отменён');

Вот и всё :)

Скачать модуль. (распространяется бесплатно при условии сохранения копирайтов :)

Примечания:

! Обратите внимание: при работе на плате должен быть снят джампер автосброса (AutoReset), чтобы плата не перегружалась каждый раз при открытии COM-порта!

Для большей надёжности – лучше не использовать в питоновском скрипте бесконечный цикл – лучше просто прописать вызов соответствующих функций и периодически вызывать скрипт через cron или планировщик задач (или nncron).
Для этого в архиве есть файл lsarduino-nocycle.py

сообщения и задания прошлых недель удаляются из базы, но если Вы хотите их оставить — просто закомментируйте строчки:

$this->DeleteOldNotes();
$this->DeleteOldTodo();

в конце функции CreateTables()
файла classes\modules\lsarduino\mapper\LsArduino.mapper.class.php

Как теперь можно развить эту идею? Да как угодно – взять за основу этот модуль или сделать свой модуль для того же wordpress-а и дать возможность вашему дому, цветку, коту, etc. Вести свой блог вместе с Вами!

PS кого заинтересовала разработка под Arduino – вот список материалов:
http://robocraft.ru/page/summary/

И на закуску: Ардуина и контроль веб-камеры:

13 комментариев

avatar
шикарно…
  • sn3g
  • +1
avatar
товарищ, вы просто маньяк! плюсик вам в карму за такое.
Тоже интересно было бы повозиться с ардуино, жаль у нас не продают, да и дорого :(
avatar
Спасибо :))
собственно здесь как раз и можно приобрести аналог Arduino ;) или здесь или же собрать самому ;)
avatar
спасибо за ссылки, почитал, ознакомился. Единственный минус хоуммейд сборки — то, что там ком-порт, для ноутбуков неподходит.
А со следующей зарплаты пожалуй закажу у вас плату крафтдуино. Не вкурсе, сколько кстати пересылка на 1000км будет стоить?
avatar
по России — 200 рублей :)
avatar
круто!!! как бы оное применить для автотуризма — фантазии не хватает(( (Ну, или просто для тачки [Хонда ЦР-В])
avatar
Купи себе GPS. =)
avatar
Пришла пора создавать раздел «Ненормальное программирование» =)
Идея классная, реализация тоже. Хотя
и дать возможность вашему дому, цветку, коту, etc. Вести свой блог вместе с Вами
тут больше подойдет live streaming (типа Твиттера).
avatar
намек на модуль микроблогов? ;D
avatar
Да нет, просто подумалось, что цветок или кот не напишут полноценную заметку в блог — а вот строчку в Твиттер вполне.
avatar
ну ограничение в 140 символов иногда очень угнетает
avatar
:)))) разумеется не напишут :)
avatar
Шикарный девайс! Можно сделать регистрацию температуры тела или частоты пульса при чтении топиков/коментов. Если топик тронул за душу — параметры повышаются, если так-себе то никаких изменений :)
В общем как-бы детектор лжи.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.