Я пытаюсь управлять Arduino через последовательный интерфейс.Это работает только в определенной степени.
Я использую Arduino Uno R3 и Mac с Mojave (10.14.6), Apache версии 2.4.34 и PHP версии 7.1.23.
Я начал с этого простого проекта:
https://www.instructables.com/id/Control-LED-Using-Serial-Monitor/,
, и он отлично работает.Я могу выключить и включить светодиод, набрав 1 и 2 на последовательном входе приложения Arduino на моем Mac.Теперь я хочу сделать то же самое с веб-сервера, установленного на том же Mac.Я пробовал два разных способа сделать это.Либо путем доступа к последовательному интерфейсу через библиотеку PhpSerial, найденную здесь:
https://www.phpclasses.org/package/3679-PHP-Communicate-with-a-serial-port.html,
, либо путем отображения сигнала (1 или 2) в командной строке.Ни то, ни другое не работает.В PHP-файл я поместил следующий код:
<?php
include 'PhpSerial.php';
$serial = new PhpSerial;
$serial->deviceSet("/dev/cu.usbmodem14101");
$serial->confBaudRate(9600);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");
if(isset($_GET["submit"])){
$serial->deviceOpen();
if($_GET["led"] == "ON")
$serial->sendMessage(1);
if($_GET["led"] == "OFF")
$serial->sendMessage(2);
}
?>
Это приводит к тому, что светодиод делает некоторое случайное мигание, которое я интерпретирую как Arduino или настраиваемый серийный номер, но индикатор неВыключено, когда я пытаюсь сделать это через элемент <form>
в файле PHP.Может ли быть так, что сериал настроен неправильно?Теперь я решил обойтись, запустив команды оболочки в PHP.Запустив
screen /dev/cu.usbmodem14101
в терминале (вручную, а не через PHP), я могу получить доступ к Arduino через последовательный интерфейс и успешно включать и выключать светодиод, как я это делал в последовательном интерфейсеArduino-приложения на Mac.Однако я не могу узнать, как использовать экранную команду из PHP.Поэтому я подумал, что мог бы выводить команды на Arduino через последовательный интерфейс, как это
echo 1 > /dev/cu.usbmodem14101
Это дает тот же результат, что и с PhpSerial.Светодиод мигает случайным образом, но он не включается, когда я отправляю их и двойки в сериал.Поскольку мне не удается заставить его работать в терминале, я еще не пробовал запускать команды в PHP.
Что я пропустил?