Страница 1 из 1

железо на ардуино+С

Добавлено: Пн дек 03, 2012 1:36 pm
stepani
доброго времени суток,
Я занимаюсь мкроконтроллерами, в php и http программирование только начинающий. Есть у меня железо, где используются платы от ардуино, но софт для микроконтроллеров написан на С в оболочке AVRStudio 4. Как вы смотрите чтобы адаптировать этот проект под ваш? Если правильно понимаю, команды извне главный сервер на компе воспринимает только вот таким способом?

Re: железо на ардуино+С

Добавлено: Пн дек 03, 2012 1:51 pm
sergejey
Добрый день,

Очень интересное железо. События извне могут поступать как http запросы, как описано по той ссылке. Но, в принципе, можно сделать любой интерфейс, было бы желание :)

Re: железо на ардуино+С

Добавлено: Пн дек 03, 2012 11:41 pm
Killer_Angel
один из вариантов :
у меня контролер управляющий светом/звуком, принимающий события от ик датчиков и кнопок общается с сервером через tcp , так вот я сделал чтобы по команде с сервера он выдавал все свои параметры в виде "ROOM_L=0&HALL_L=0&TOAL_L=0&BATH_L=0&KTCH_L=0&ROOM_A=1"
далее запускается небольшой php скрипт который висит и в цикле раз в пару секунд опрашивает контролер, далее через parse_str разбивает ответ от мк в переменные, а переменные в свою очередь записываются напрямую в базу данных mysql по своим ячейкам
PS: скрипт уровня "быдлокод" ) но все работает, xx - номер ячейки в таблице pvalues

Код: Выделить всё

#!/usr/bin/php
<?
 include_once('/var/www/config.php');

while (1 == 1) {
  $fp = fsockopen("my_controler_host", 4444); if (!$fp) {echo "$errstr ($errno)n"; exit();}
  fwrite($fp, "l"); $content = fgets($fp);  parse_str($content); fclose($fp);

  $mysqli = @new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);  if (mysqli_connect_errno()) {echo "Подключение невозможно: ".mysqli_connect_error();}
  $mysqli->query("set character_set_client='utf8';");  $mysqli->query("set character_set_results='utf8';");  $mysqli->query("set collation_connection='utf8_general_ci';");
    $mysqli->query("UPDATE ihome.pvalues SET VALUE = ".$ROOM_L." WHERE pvalues.ID = xx;");
    $mysqli->query("UPDATE ihome.pvalues SET VALUE = ".$HALL_L." WHERE pvalues.ID = xx;");
    $mysqli->query("UPDATE ihome.pvalues SET VALUE = ".$ROOM_A." WHERE pvalues.ID = xx;");
    $mysqli->query("UPDATE ihome.pvalues SET VALUE = ".$HALL_A." WHERE pvalues.ID = xx;");
  $mysqli->close();
  sleep(2);
}
?>
PPS: управление из majordomo происходит как команда в порт мк типа "e01" "d01" где e/d - вкл/выкл , а 01 номер порта для управления

Re: железо на ардуино+С

Добавлено: Пн дек 10, 2012 8:44 pm
stepani
Немного доработал железо. Теперь можно в строку message вводить строку типа "192.168.0.2/objects/?object=sensorMovement&op=m&m=statusChanged+&" и при определенном действии (в зависимости от сенсора это нажатие или движение или температура и т.д.) будет вызываться соответствующий скрипт на сервере. Максимальная длина строки = 70 символов.

Re: железо на ардуино+С

Добавлено: Пн дек 10, 2012 8:49 pm
stepani
но теперь модуль либо посылает сообщения непосредственно другому модулю, либо на сервер. Чтобы работало и то и то, думаю сделать чтобы каждое сообщение от модуля к модулю дублировалось на сервер, т.е. сервер будет слушать сеть и писать все сообщения в лог и на определенные как-нибудь реагировать.

Re: железо на ардуино+С

Добавлено: Вт дек 11, 2012 10:26 am
sergejey
stepani писал(а):но теперь модуль либо посылает сообщения непосредственно другому модулю, либо на сервер. Чтобы работало и то и то, думаю сделать чтобы каждое сообщение от модуля к модулю дублировалось на сервер, т.е. сервер будет слушать сеть и писать все сообщения в лог и на определенные как-нибудь реагировать.
Прямое общение между модулями это здорово. Я сам думал, что железяки должны сами между собой общаться для критических функций, а сервер для мониторигра и более сложных сценариев.