Intereting Posts
как отправить HTTP-запрос методом GET в PHP на другой веб-сайт Переписать URL .htaccess Кодировка символов HTML-документа не была объявлена PHP 5.2.x: $ _POST пуст, если какое-либо поле имеет значение «отбрасывать любые слова из любых слов»? Zend Framework 2, включая пользовательскую библиотеку Краткий запрос Laravel Создание папки при запуске file_put_contents () Сценарий боковой стороны сервера для запроса cURL Неустранимая ошибка: класс не найден с использованием груши в xampp Как присвоить номер ранга массиву, когда существуют связи Как автоматически регистрировать нового пользователя после регистрации у пользовательского провайдера в Silex? Содержимое поля ввода для html.tpl.php в Drupal 7 Как Instagram использует Amazon S3? дублировать запись для ключа 'idx_client_id_parent_id_alias_language' при ручной вставке базы данных joomla невозможно передать массив из контроллера для просмотра в laravel

PhpSerial: нет доступного stty – возможно, он работает

Я работаю над проектом, который включает в себя чтение и запись на последовательную плату, используя контакты UART на моей малиновой пи. Тем не менее, я уже ударил кирпичную стену. Каждый раз, когда я пытаюсь использовать PhpSerial я всегда получаю ошибку:

Неустранимая ошибка: нет доступной stty, не может работать. в /var/www/PHP-Serial/examples/PhpSerial.php в строке 56

Я пробовал множество конфигураций с помощью ввода:

 // First we must specify the device. This works on both linux and windows (if // your linux serial device is /dev/ttyS0 for COM1, etc) $serial->deviceSet("/dev/ttyAMA0"); // We can change the baud rate, parity, length, stop bits, flow control $serial->confBaudRate(38400); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->confFlowControl("none"); - // First we must specify the device. This works on both linux and windows (if // your linux serial device is /dev/ttyS0 for COM1, etc) $serial->deviceSet("/dev/ttyAMA0"); // We can change the baud rate, parity, length, stop bits, flow control $serial->confBaudRate(38400); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->confFlowControl("none"); - // First we must specify the device. This works on both linux and windows (if // your linux serial device is /dev/ttyS0 for COM1, etc) $serial->deviceSet("/dev/ttyAMA0"); // We can change the baud rate, parity, length, stop bits, flow control $serial->confBaudRate(38400); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->confFlowControl("none"); - // First we must specify the device. This works on both linux and windows (if // your linux serial device is /dev/ttyS0 for COM1, etc) $serial->deviceSet("/dev/ttyAMA0"); // We can change the baud rate, parity, length, stop bits, flow control $serial->confBaudRate(38400); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->confFlowControl("none"); - // First we must specify the device. This works on both linux and windows (if // your linux serial device is /dev/ttyS0 for COM1, etc) $serial->deviceSet("/dev/ttyAMA0"); // We can change the baud rate, parity, length, stop bits, flow control $serial->confBaudRate(38400); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->confFlowControl("none"); для // First we must specify the device. This works on both linux and windows (if // your linux serial device is /dev/ttyS0 for COM1, etc) $serial->deviceSet("/dev/ttyAMA0"); // We can change the baud rate, parity, length, stop bits, flow control $serial->confBaudRate(38400); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->confFlowControl("none"); 

php/lighthttpd работает как www-data, Ive пробовал использовать /dev/ttyAMA0 для этого пользователя, и я добавил группу dialout к указанному пользователю. Я не вижу никаких отключенных функций или чего-либо в моем php.ini. У меня также нет стандартной установки для использования последовательных устройств на пи в соответствии с вики, и я могу читать / записывать данные в и из схемы, используя

sudo minicom -b 38400 -o -D / dev / ttyAMA0

Вот строка (строки), на которую ссылается ошибка:

  if (substr($sysName, 0, 5) === "Linux") { $this->_os = "linux"; if ($this->_exec("stty") === 0) { register_shutdown_function(array($this, "deviceClose")); } else { trigger_error( "No stty availible, unable to run.", E_USER_ERROR ); } 

Я не могу понять это, но кто-то другой. Заранее спасибо.

Решение вашей проблемы выглядит следующим образом:

Вы должны изменить следующую строку кода в классе PhpSerial.php

ИЗ:

 if ($this->_exec("stty") === 0) { 

TO:

 if ($this->_exec("stty --version") === 0) { 

=> Следовательно, это устраняет ошибку «Нет stty availible, failed to run …». См. Эту тему: https://www.raspberrypi.org/forums/viewtopic.php?f=91&t=100481

Я также должен добавить, что мне пришлось отложить задержку до того, как я напишу серийные данные, например

 <?php 

error_reporting (E_ALL); ini_set ('display_errors', '1');

 include "PhpSerial.php";//serial class: https://github.com/Xowap/PHP-Serial/blob/develop/examples/VS421CPNTA.php $serial = new phpSerial; //$serial->deviceSet("/dev/ttyAMA0"); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->deviceOpen(); sleep(3);//delay $serial->sendMessage("1"); $serial->deviceClose(); echo "Serial message sent! \n"; - include "PhpSerial.php";//serial class: https://github.com/Xowap/PHP-Serial/blob/develop/examples/VS421CPNTA.php $serial = new phpSerial; //$serial->deviceSet("/dev/ttyAMA0"); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->deviceOpen(); sleep(3);//delay $serial->sendMessage("1"); $serial->deviceClose(); echo "Serial message sent! \n"; - include "PhpSerial.php";//serial class: https://github.com/Xowap/PHP-Serial/blob/develop/examples/VS421CPNTA.php $serial = new phpSerial; //$serial->deviceSet("/dev/ttyAMA0"); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->deviceOpen(); sleep(3);//delay $serial->sendMessage("1"); $serial->deviceClose(); echo "Serial message sent! \n"; - include "PhpSerial.php";//serial class: https://github.com/Xowap/PHP-Serial/blob/develop/examples/VS421CPNTA.php $serial = new phpSerial; //$serial->deviceSet("/dev/ttyAMA0"); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->deviceOpen(); sleep(3);//delay $serial->sendMessage("1"); $serial->deviceClose(); echo "Serial message sent! \n"; - include "PhpSerial.php";//serial class: https://github.com/Xowap/PHP-Serial/blob/develop/examples/VS421CPNTA.php $serial = new phpSerial; //$serial->deviceSet("/dev/ttyAMA0"); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->deviceOpen(); sleep(3);//delay $serial->sendMessage("1"); $serial->deviceClose(); echo "Serial message sent! \n"; - include "PhpSerial.php";//serial class: https://github.com/Xowap/PHP-Serial/blob/develop/examples/VS421CPNTA.php $serial = new phpSerial; //$serial->deviceSet("/dev/ttyAMA0"); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->deviceOpen(); sleep(3);//delay $serial->sendMessage("1"); $serial->deviceClose(); echo "Serial message sent! \n"; для include "PhpSerial.php";//serial class: https://github.com/Xowap/PHP-Serial/blob/develop/examples/VS421CPNTA.php $serial = new phpSerial; //$serial->deviceSet("/dev/ttyAMA0"); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->deviceOpen(); sleep(3);//delay $serial->sendMessage("1"); $serial->deviceClose(); echo "Serial message sent! \n"; - include "PhpSerial.php";//serial class: https://github.com/Xowap/PHP-Serial/blob/develop/examples/VS421CPNTA.php $serial = new phpSerial; //$serial->deviceSet("/dev/ttyAMA0"); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->deviceOpen(); sleep(3);//delay $serial->sendMessage("1"); $serial->deviceClose(); echo "Serial message sent! \n"; - include "PhpSerial.php";//serial class: https://github.com/Xowap/PHP-Serial/blob/develop/examples/VS421CPNTA.php $serial = new phpSerial; //$serial->deviceSet("/dev/ttyAMA0"); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->deviceOpen(); sleep(3);//delay $serial->sendMessage("1"); $serial->deviceClose(); echo "Serial message sent! \n"; - include "PhpSerial.php";//serial class: https://github.com/Xowap/PHP-Serial/blob/develop/examples/VS421CPNTA.php $serial = new phpSerial; //$serial->deviceSet("/dev/ttyAMA0"); $serial->deviceSet("/dev/ttyACM0"); $serial->confBaudRate(9600); $serial->confParity("none"); $serial->confCharacterLength(8); $serial->confStopBits(1); $serial->deviceOpen(); sleep(3);//delay $serial->sendMessage("1"); $serial->deviceClose(); echo "Serial message sent! \n"; 

Поскольку вы можете видеть, что PhpSerial нуждается в утилите stty для получения / установки последовательных параметров, таких как скорость передачи, четность и т. Д. Решение заключается в установке stty с помощью вашего дистрибутива Linux

STTY на Rasbian возвращает 1 на exec, а не 0

К сожалению, если вы просто обойдете этот код, он зависает на register_shutdown_function.

В настоящее время я пишу файлы на диск и пытаюсь отправить их в порт (борется, потому что они двоичный текст, а не ascii). Если у вас есть информация о ascii для отправки, тогда

  stty -F /dev/ttyAMA0 38400 

А также

  exec("cat filename.txt > //dev//ttyAMA0");