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(' ','',''),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);
Для тренировки, можно запустить файл непосредственно из командной строки.
Пользуйтесь! Павел Панькин
Обсуждение