CraftDuino v2.0
  • - это CraftDuino - наш вариант полностью Arduino-совместимой платы.
  • CraftDuino - настоящий конструктор, для очень быстрого прототипирования и реализации идей.
  • Любая возможность автоматизировать что-то с лёгкостью реализуется с CraftDuino!
Просто добавьте CraftDuino!

LiveStreet и Arduino/CraftDuino


Здесь я уже писал, как ардуина может читать 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. Вести свой блог вместе с Вами!

Ссылки:
arduino.cc/en/Tutorial/WebServer
code.google.com/p/webduino/

По теме:
Ардуино что это и зачем?
Arduino, термины, начало работы
Состав стартера (точка входа для начинающих ардуинщиков)
Возможные ошибки при работе с Arduino

Купить Arduino или CraftDuino — можно в нашем Магазине.
  • +1
  • 23 января 2010, 11:34
  • admin

Комментарии (3)

RSS свернуть / развернуть
+
+1
для программиста в принципе ничего сложного,
одно только пока не понятно — если у компа не статичный IP, то как к нему обратиться из интернета?
avatar

realist

  • 27 января 2010, 00:38
+
0
В данном случае, сам ПК (скрипт на питоне) инициализирует обмен данными. Так что его IP значения не имеет ;)
avatar

admin

  • 27 января 2010, 10:25
+
0
DynDNS не с проста изобрели
avatar

Boltayka

  • 27 мая 2011, 16:03

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.