3

Работа с UART в LINUX + PHP

требуется помощь лиги IT

Делаю небольшую поделку - проект умного дома.

В основе ардуино + одноплатник orangepi zero

на одноплатнике стоит armbian и поднят httl сервер.

на сервере страничка с кодом ajax по таймеру делает запрос через php и соответственно получает ответ. все работает до тех пор, пока есть ответ.

если ответа нет, то на третьем-четвертом запросе сервер наглухо виснет.

запрос делаю так (пробовал все три варианта):

$bufft = fgets($fp,7);

//$bufft = fread($fp,7);

//$bufft = stream_get_line($fp,7); + //stream_set_timeout($fp, 0, 15000);

(где: $filename = "/dev/ttyS1"; //порт $fp = fopen($filename, "w+"); )

Насколько я понимаю, проблема в том, что при отсутствии ответа в буфере /dev/ttyS1 нет вообще ничего, те нет в файле даже символа конца строки (файла). и считывание идет по бесконечному циклу, пока не повесит процесс.

Экспериментально установлено, что при запросе $bufft = fgets($fp,1); , те при попытке считать только первый символ строки ничего не виснет, но возвращается строка из 0 символов. те полностью пустая.

Посоветуйте, как перед считыванием буфера определить, что он пуст (при попытке считывания он стирается) или как считывать пустой буфер/dev/ttyS1 без последующего зависания?

Лига программистов

2.1K постов11.9K подписчика

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества