КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

Управляем arduino из PHP через COM-порт

Arduino подключается к компьютеру через USB, но на самом деле arduino отправляет/принимает данные через виртуальный COM-порт.

С отправкой данных в COM-порт нет ничего сложного:

Код PHP:

$file=fopen("com3", "wb"); // открываем com3 порт для записи
fwrite($file, "отправляем эту строку"); // записываем
fclose($file); // закрываем (освобождаем) com3 порт

А вот читать PHP умеет только на линуксах, в старом добром windows читать данные напрочь отказывается! (проверял на php до версии 5.3.5 включительно)

Открывает порт, а потом с «радостью» говорит: «ура!!! я прочитал 0 байт )))»

Вот и пришла идея написать файл позволяющий читать данные из COM-порта в консоль, а уже из неё брать результат в PHP, благо уж это то он делать умеет. Далее добавил туда возможность записи данных в COM-порт, потом добавил возможность выводить наличие всех доступных COM-портов, естественно не обошел и возможность читать/устанавливать регистры настроек порта (скорость,четность,количество информационный бит в байте, ну и т.д.). Ну а перед публикацией добавил туда еще и параметр /? чтоб можно было все наворотики прочесть, даже несколько примеров туда написал. И всё это естественно на могучем Русском (кроме названий передаваемых при запуске параметров).

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

Кладём файл exe в папку рядом с файлом php

Скачать файл

Пишем следующий код:

Код PHP:

exec("файл /? 2>&1",$param); // отправляем файлу параметр /? и читаем ответ в переменную $param
$l="<code>";
for($i=0; $i<count($param); $i++){ // читаем ответ построчно в цикле
   $l.=str_replace(array(" ","\r","\n"),array('&nbsp;','',''),iconv('CP1251','UTF-8//IGNORE',$param[$i]))."<br/>"; // приводим строку к читабельному виду
}
$l.="</code>";

где файл - (в первой строке кода) это название файла.exe можете его обозвать по своему усмотрению.

iconv('CP1251','UTF-8//IGNORE',$param[$i]) - преобразуем ответ из кодировки CP1251 в UTF-8.

Тут меняем UTF-8 на ту кодировку в которой у Вас написан файл.php

Если в результате вы получите каракули, то поменяйте CP1251 на CP866.

В результате Вы должны увидеть таблицу с пояснениями всех доступных параметров на Русском.

Хотел бы отметить то, что настройку регистров com-порта достаточно произвести один раз, а потом просто читать/писать без параметров настройки.

Лично я устанавливаю параметры так:

exec("файл com5 baud=9600 parity=n data=8 stop=1 xon=off octs=off odsr=off idsr=off dtr=off rts=off 2>&1",$param);

Для тренировки, можно запустить файл непосредственно из командной строки.

Пользуйтесь! Павел Панькин




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями