В данном примере показана возможность взаимодействия php и Arduino. Тест проводится на Ubuntu 14.04, установлен веб сервер Apachе 2, php 5.5. В тесте опробована включение и выключение цифрового выхода, а так же опрос состояния выхода при помощи php.
test.php
<meta charset="utf-8"> <table align='center' width="200" border='0' cellspacing='0' cellpadding='5'> <form action="" method="post"> <td><button type="submit" name="on">Включить</button></td> <td><button type="submit" name="off">Выключить</button><td> </form> <tr><td colspan="2"><center> <?php /* В терминале перед запуском скрипта выполните команду: sudo chown www-data:www-data /dev/ttyUSB0 */ $dev = "/dev/ttyUSB0"; exec("stty -F $dev 9600 raw -echo"); $f = fopen($dev,"w+");// открываем порт if (!$f) die ("Ошибка!!! Порт не открылся!"); sleep(2); // Отправка в порт if (isset($_POST["on"])){fwrite($f,chr(49));echo"ON";} if (isset($_POST["off"])){fwrite($f,chr(48));echo"OFF";} sleep(2); // чтение порта while (fread($f, 1) != chr(0xA)){} // ждем ответа $a = fgets($f); echo "<br>Выход 13: ". $a; fclose($f); // закрываем порт ?>
скетч
void setup(){ Serial.begin(9600); pinMode(13, OUTPUT); } char Byte; void loop(){ if( Serial.available() > 0 ){ Byte = Serial.read(); if(Byte == '1'){ digitalWrite(13,HIGH); } if(Byte == '0'){ digitalWrite(13,LOW); } } Serial.println(digitalRead(13));// Отправляем каждые 1000 мс delay(1000); }
Через порт при помощи php скрипта отправляются данные типа char, соответственно chr(49) = 1, а chr(48) = 0, что соответствует коду символа в таблице кодировки символов ASCII. Перед отправкой данных происходит открытие порта, отправляются данные и порт закрывается. При этом на плате Arduino загорается или гаснет, в зависимости от команды светодиод подключенный к пину 13. Если это делается удаленно, то желательно получить обратную связь, нужно убедится в правильности работы Arduino, поэтому перед закрытием порта php скрипт ожидает ответ от Arduino. В скетче видно, что происходит запрос состояния пина 13 и отправка значения один раз в секунду в порт.
Изменив немного код можно передать значение напряжения поданного на вход А1 скрипту php.
Подадим напряжение 3,3 В на аналоговый вход А1 и измерим его при помощи php скрипта.
test.php
<meta charset="utf-8"> <table align='center' width="200" border='0' cellspacing='0' cellpadding='5'> <form action="" method="post"> <td><button type="submit">Измерить напряжение на входе А1</button></td> </form> <tr><td colspan="2"><center> <?php /* В терминале перед запуском выполните команды: sudo chown www-data:www-data /dev/ttyUSB0 */ $dev = "/dev/ttyUSB0"; exec("stty -F $dev 9600 raw -echo"); $f = fopen($dev,"w+");// открываем порт if (!$f) die ("Ошибка!!! Порт не открылся!"); sleep(2); // чтение порта while (fread($f, 1) != chr(0xA)){} // ждем ответа $a = fgets($f); echo "<br>Напряжение: ". $a. "В"; fclose($f); // закрываем порт ?> </td><tr></table>
скетч
void setup(){ Serial.begin(9600); pinMode(A1,INPUT); } float u; int u1; void loop(){ u1=analogRead(A1); u=u1*5.0/1023; Serial.println(u);// Отправляем каждые 1000 мс delay(1000); }