PHP->ARDUINO - не работает. С консоли все отлично, а вот из ПХП никак.. Порт не открывается. Ардуинка даже не моргает.
Вид для печати
PHP->ARDUINO - не работает. С консоли все отлично, а вот из ПХП никак.. Порт не открывается. Ардуинка даже не моргает.
Получилось! В файловом менеджере на ttyACM0 выставил права на запись и все заработало :)
Вот только при перезагрузке RPI права на ttyACM0 сбрасываются.
Chip, подскажи пожалуйста, как вывести значение температуры (или просто что-либо) с ардуины в разных местах страницы? Т.е. например
Хочу вот так -PHP код:
Serial.println (TEMP1);
Serial.println (TEMP2);
Вложение 15861
Спасибо. Chip, а как все-таки с данными в разных частях страницы?
Не понял вопроса?
Получилось так:
Ардуино:
PHP код:
Serial.print(temp);
Serial.print("/");
Serial.println(temp1);
php_serial.class.php - Прикольная штучка для линукса. :)PHP код:
<?php
include "php_serial.class.php";
$serial = new phpSerial;
$serial->deviceSet("/dev/ttyACM0");
$serial->confBaudRate(9600);
$serial->deviceOpen();
sleep(1);
$read = $serial->readPort();
list($outdoor, $indoor) = split("/", $read);
echo "Outdoor: $outdoor; Indoor: $indoor<br />\n";
$serial->deviceClose();
?>
Наверно ты имел ввиду для PHP.Цитата:
php_serial.class.php - Прикольная штучка для линукса.
Смотрел код php_serial.class.phpи ничего нового там не увидел
Да. Я тоже только что посмотрел, мы тоже самое дели. Единственное отличие (которое мне показалось), что он отображает корректно данные, т.е. например 27/27. Хотя только что, показал 27/27 27. И как с эти бороться..
Как то все туговато получается. Arduino иногда "задумывается" в работе, т.к. наверное ей сложновато одновременно выводить температуру и еще реагировать на вкл/выкл релюшек. Я вот думаю, может быть сделать "модульную" систему? Одна ардуинка - собирает температуру, вторая - обрабатывает мои желание (вкл/выкл) оборудования, третья - отправляет мне СМС-ки в случае ЧП и т.д. Если их через хаб к RPI подключать, а потом в PHP просто - ttyACM0 - покажи то, ttyACM1 - сделай это и т.д. Должно получиться?
Может быть проще сделать используя многозадачность на Arduino
у RPi тоже есть куча GPIO
Да как-то не так уж и много у него GPIO, и не очень то хочется его использовать. Хотя если с Малинки управлять релюшками а Ардуиной получать данные с датчиков и отправлять в Малинку... Не знаю... А вот многозадачность в Ардуино - кажется довольно сомнительным удовольствием.
Chip, многозадачность, на удивление работает довольно эффективно. НО! В ТЕРМИНАЛЕ! Через PHP разницы никакой. Может быть я что-то не правильно делаю?
Задача следующая - управление из PHP 8-ю устройствами (в настоящее время светиками). Это получается хорошо (передача из PHP в Ардуину, но при включении любого из 8 устройств, его значение меняется с 0 на 1 и ардуина в PHP должна об этом сообщить. Вот в этом и проблема.
Вот скетч для Ардуинки (с leOs):
Вот главной стр. PHP (relay_button.php) -PHP код:
#include "leOS.h"
leOS myOS; //создать экземпляр класса
#define led1Pin 30
#define led2Pin 31
#define led3Pin 32
#define led4Pin 33
#define led5Pin 34
#define led6Pin 35
#define led7Pin 36
#define led8Pin 37
int stat1;
int stat2;
int stat3;
int stat4;
int stat5;
int stat6;
int stat7;
int stat8;
void setup()
{
Serial.begin(9600);
myOS.begin();
pinMode(led1Pin, OUTPUT);
pinMode(led2Pin, OUTPUT);
pinMode(led3Pin, OUTPUT);
pinMode(led4Pin, OUTPUT);
pinMode(led5Pin, OUTPUT);
pinMode(led6Pin, OUTPUT);
pinMode(led7Pin, OUTPUT);
pinMode(led8Pin, OUTPUT);
myOS.addTask(sendstatus, 1000);//добавить задачу с интервалом выполнения через 250мс
}
void loop()
{
serial_read_write();
}
void serial_read_write()
{
if (Serial.available() > 0)
{
byte inByte = Serial.read();
switch (inByte)
{
case 65:
digitalWrite(led1Pin, HIGH);
break;
case 66:
digitalWrite(led1Pin, LOW);
break;
case 67:
digitalWrite(led2Pin, HIGH);
break;
case 68:
digitalWrite(led2Pin, LOW);
break;
case 69:
digitalWrite(led3Pin, HIGH);
break;
case 70:
digitalWrite(led3Pin, LOW);
break;
case 71:
digitalWrite(led4Pin, HIGH);
break;
case 72:
digitalWrite(led4Pin, LOW);
break;
case 73:
digitalWrite(led5Pin, HIGH);
break;
case 74:
digitalWrite(led5Pin, LOW);
break;
case 75:
digitalWrite(led6Pin, HIGH);
break;
case 76:
digitalWrite(led6Pin, LOW);
break;
case 77:
digitalWrite(led7Pin, HIGH);
break;
case 78:
digitalWrite(led7Pin, LOW);
break;
case 79:
digitalWrite(led8Pin, HIGH);
break;
case 80:
digitalWrite(led8Pin, LOW);
break;
}
}
}
void sendstatus()
{
stat1 = digitalRead(led1Pin);
stat2 = digitalRead(led2Pin);
stat3 = digitalRead(led3Pin);
stat4 = digitalRead(led4Pin);
stat5 = digitalRead(led5Pin);
stat6 = digitalRead(led6Pin);
stat7 = digitalRead(led7Pin);
stat8 = digitalRead(led8Pin);
Serial.print(stat1);
Serial.print(stat2);
Serial.print(stat3);
Serial.print(stat4);
Serial.print(stat5);
Serial.print(stat6);
Serial.print(stat7);
Serial.print(stat8);
}
Вот примеры Non.php и Noff.php -PHP код:
<?php
include "php_serial.class.php";
$serial = new phpSerial;
$serial->deviceSet("/dev/ttyACM0");
$serial->confBaudRate(9600);
$serial->deviceOpen();
usleep(2000000);
$read = $serial->readPort();
print $read;
$serial->deviceClose();
?>
<a href="1on.php"><button><img src="on.png" width="31" height="31" alt="ON" style="vertical-align: middle"></button></a>
<a href="1off.php"><button><img src="off.png" width="31" height="31" alt="OFF" style="vertical-align: middle"></button></a>
<a href="2on.php"><button><img src="on.png" width="31" height="31" alt="ON" style="vertical-align: middle"></button></a>
<a href="2off.php"><button><img src="off.png" width="31" height="31" alt="OFF" style="vertical-align: middle"></button></a>
<a href="3on.php"><button><img src="on.png" width="31" height="31" alt="ON" style="vertical-align: middle"></button></a>
<a href="3off.php"><button><img src="off.png" width="31" height="31" alt="OFF" style="vertical-align: middle"></button></a>
<a href="4on.php"><button><img src="on.png" width="31" height="31" alt="ON" style="vertical-align: middle"></button></a>
<a href="4off.php"><button><img src="off.png" width="31" height="31" alt="OFF" style="vertical-align: middle"></button></a>
<a href="5on.php"><button><img src="on.png" width="31" height="31" alt="ON" style="vertical-align: middle"></button></a>
<a href="5off.php"><button><img src="off.png" width="31" height="31" alt="OFF" style="vertical-align: middle"></button></a>
<a href="6on.php"><button><img src="on.png" width="31" height="31" alt="ON" style="vertical-align: middle"></button></a>
<a href="6off.php"><button><img src="off.png" width="31" height="31" alt="OFF" style="vertical-align: middle"></button></a>
<a href="7on.php"><button><img src="on.png" width="31" height="31" alt="ON" style="vertical-align: middle"></button></a>
<a href="7off.php"><button><img src="off.png" width="31" height="31" alt="OFF" style="vertical-align: middle"></button></a>
<a href="8on.php"><button><img src="on.png" width="31" height="31" alt="ON" style="vertical-align: middle"></button></a>
<a href="8off.php"><button><img src="off.png" width="31" height="31" alt="OFF" style="vertical-align: middle"></button></a>
PHP код:
<?php
$filename = "/dev/ttyACM0"; //UART порт роутера
$fp = fopen($filename, "w+"); //открыть порт
fwrite($fp, A); //полать в порт строку
fclose($fp); //закрыть порт
header("Location: relay_button.php");
?>
Только я не нашел в каком месте кода идет прием информации от Arduino?
Да и отправки кодов кнопок для Arduino скрипт PHP должен использоваться один
Начальная страница - relay_button.php -
PHP код:
<?php
include "php_serial.class.php";
$serial = new phpSerial;
$serial->deviceSet("/dev/ttyACM0");
$serial->confBaudRate(9600);
$serial->deviceOpen();
usleep(2000000);
$read = $serial->readPort();
print $read;
$serial->deviceClose();
?>
Скрипт я видел, а где в html коде он вызывается?
для чего пауза 2 сек usleep(2000000);
При загрузке главной страницы. Он в самом начале прописан.
Ну и что запустил ты скрипт в начале, скрипт выполнится один раз, считает одно значение выведет его, а потом это значение сразу же затирается кнопками
Только без обид, прочти хотя бы азы по веб программированию
Потом будешь с улыбкой смотреть на свой код
Дальше, кнопки вызывают N(on/off).php, которые после своего выполнения, опять-же вызывают relay_button.php, который в свою очередь снова вызывает данный скрипт.Но дело в том, что он даже один раз ничего не читает. И не отправляет даже. А пауза в 2 секунды, для того, чтобы успеть получить данные с ардуино полностью, а не частями (хотя пробовал, даже 0.75 секунды хватает). А по поводу "Только без обид, прочти хотя бы азы по веб программированию", я не вижу ошибок... Может уже "закипел" и за основной проблемой не замечаю мелочей?
Чесно сказать не так должен выглядеть код
Постараюсь выложить код управления кнопками
2 секунды для ардуины, это вечность(по человеческим меркам)
Хорошо бы. А то уменя как и с GSM. Хорошо работает только или на передачу, или на прием. :)
Следи за темой "Пример простой кнопки на HTML"
Установил заново систему на RPI, ардуина заработала даже без установки "sudo apt-get install mod-usb-acm" (E: Unable to locate package mod-usb-acm) - я так понимаю он уже устанавливается при общем обновлении пакетов.
Также, не понадобилась инициализация порта. Скорость по умолчанию 9600
Здравствуйте! Прочитал ваш пост, жуть как заинтересовался! Все как я и сам хотел бы сделать.
У меня есть wifi роутер тп линк вд1043нд
Можно ли подключить к роутеру ардуино по вифи (например) а через реле размыкать цепи с лампами?
если скажем купить готовую плату + шит вай фай - нужно ли чего то прошивать, или все управляется и так, было бы ПО,
Я видел у вас скрин приложения с кнопками отсылающего команды -супер все как надо!!! Скажите его можно установить на планшет что бы по вай фай через роутер управлять ардуйнкой??????
Пожалуйста подскажите мне как все это сделать, (поступил на РТФ по пока по профилю нет пар, только общее все идет ) а РУКИ ЧЕШУТСЯ,
опыт паяния есть, программирование знаю только в теории и но если носом ткнуть - что делать, я сделаю.
Уже давно мечтаю сделать систему управляемую по вай фай, надеюсь вы сможете помочь. А локитрон за 5000 покупать както не очень хочется.....
может быть где то выложены коды и страницы которыми вы руководствовались и писали собирая ваш проект, покажите если не секрет как это все сделано.
МожноЦитата:
Можно ли подключить к роутеру ардуино по вифи (например) а через реле размыкать цепи с лампами?
Зачем Вам шит вай фай, гораздо функциональней и проще будет купить роутер wr703n и подключить к нему ArduinoЦитата:
если скажем купить готовую плату + шит вай фай - нужно ли чего то прошивать, или все управляется и так, было бы ПО,
Пример управления посмотрите здесь
Все гораздо проще, Вы можете управлять с любого устройства у которого есть интернет браузер(планшет,телефон, компьютер) и для этого ничего устанавливать не нужно.Цитата:
Я видел у вас скрин приложения с кнопками отсылающего команды -супер все как надо!!! Скажите его можно установить на планшет что бы по вай фай через роутер управлять ардуйнкой??????
Начните с прочтения темы про http://www.cyber-place.ru/forumdisplay.php?f=38OpenWrt. Будут конкретные вопросы, задавайте я отвечуЦитата:
Пожалуйста подскажите мне как все это сделать, (поступил на РТФ по пока по профилю нет пар, только общее все идет ) а РУКИ ЧЕШУТСЯ,
опыт паяния есть, программирование знаю только в теории и но если носом ткнуть - что делать, я сделаю.
Помогу по мере возможностиЦитата:
Уже давно мечтаю сделать систему управляемую по вай фай, надеюсь вы сможете помочь. А локитрон за 5000 покупать както не очень хочется
Вся информация находится на тематическом форуме по "Умному дому"Цитата:
может быть где то выложены коды и страницы которыми вы руководствовались и писали собирая ваш проект, покажите если не секрет как это все сделано.
Есть желание сделать некоммерческую версию Venator для ANDROID. В связи с этим возникла необходимость связать Arduino и ANDROID посредством Wi-Fi. В наличие имеется Arduino-совместимый блок сбора данных с UART-USB МС 2200. Хочу использовать для этих целей TL-WR703N прошитый OpenWRT.
Составил схему всей связки, но пока нет ясного понимания как ее заставить работать. Прочитал ссылки из предыдущего поста.
Из того что понял:
1. роутер можно подключить к моей Ардуине используя обычный кабель USB, предварительно утановив пакет "opkg install kmod-usb-serial-cp210x" в прошивку.
2. в роутере поднять web-server и залить скрипт который обеспечит прозрачный шлюз USB-WiFi.
Хотелось бы попросить Chipa проверить такую связку, так как ни роутера ни андроид-планшета в наличии не имею.
Со своей стороны могу предоставить Android-версию Venator и скетч для Arduino.
Venator работает как клиентское приложение, используя настраиваемый номер порта TCP.
Если все получится - куплю роутер и выложу полнофункциональную версию Venator в свободный доступ.
Если есть приложения для проверки, то я всегда готов протестировать
О каких? Связка рабочая, приложений для тестирования никто не выкладывал
Приложение пока не выкладывал. Времени катастрофически не хватает
Увеличение RAM до 64 МВ
http://www.youtube.com/watch?v=PYe-gI2ysrw
Наваял тестовый терминал для Андроида. Реагирует на текстовую строку с 19-тью числовыми значениями через запятую. В конце строки должен быть символ "\n".
Терминал слушает ТСР порт 3333 по адресу 192.168.1.100
У кого есть оборудование - проверьте пожалуйста
19 значений типа Byte? В бинарном виде?
в текстовом
В какой кодировке? 19 значений плюс два байта "/", "n" ?
ASCII
45,34,567,32,56,32,83,29,45,3.56,67,99,42,32.5,56, 53,20,91,0/n
слушает ТСР порт 3333 по адресу 192.168.1.100
То есть мне можно отправить вот так
Serial.print("45,34,567,32,56,32,83,29,45,3.56,67, 99,42,32.5,56,53,20,91,0/n");