php чтение с COM порта
- Войдите на сайт для отправки комментариев
Втр, 09/04/2013 - 21:18
при контекте на ком порт выдает
screen /dev/ttyUSB0
Temp=36C
пытаюсь это самое вытянуть через пхп и не как :( помогите господа...
<?php
include "php_serial.class.php";
// Let's start the class
$serial = new phpSerial();
// 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/ttyUSB0");
// Set for 9600-8-N-1 (no flow control)
$serial->confBaudRate(9600); //Baud rate: 9600
$serial->confParity("none"); //Parity (this is the "N" in "8-N-1")
$serial->confCharacterLength(8); //Character length (this is the "8" in "8-N-1")
$serial->confStopBits(1); //Stop bits (this is the "1" in "8-N-1")
$serial->confFlowControl("none");
// Then we need to open it
$serial->deviceOpen();
// Read data
$read = $serial->readPort();
// Print out the data
echo $read;
echo "asd";
// If you want to change the configuration, the device must be closed
$serial->deviceClose();
?>
в логах апача пусто ... права на /dev/ttyUSB0 на апачь с 777
Для начала тупой вопрос - а если без апача, а просто запустить php из терминала?
Вопрос 2 - а $serial->readPort() стоит и ждет, пока чтонибудь придет в порт или при отсуствии данных возвращает пустую строку?
Если второе, то проблема, скорее всего, в том, что пишете в порт и читаете в разное время.
я не програмист я тока учюсь :) может и проблемма в коде если слушать порт то он кидает в него раз в 2 секунды может поставить по быстрее ?
Я изрядно подзабыл синтаксиси пэхапе, но если так попробовать?
попробывал когда как бывает что напишет Те а бывает и Темп челиком может будет разумние сделать не слешать ком порт а сделать запрос на ардуино ?
Вы, конечно, не обижайтесь, но орфографию и пунктуацию придумали для того, чтобы написанный текст мог прочитать хоть кто-нибудь кроме автора.
Я так и не справился понять предыдущий комент, но насколько я понял проблему, она состоит в том, что ардуино посылает данные, а php соответственно, читает без какой либо синхронизации, как повезет. Вот и не совпадают, естественно.
Решения у проблемы минимум два.
1)Ардуино с какой-то периодичностью шлет информацию не забывая в начале пакета данных писать что-то типа "внимание, данные", а по окончанию написать "я - все!". Php, соответственно при чтении дожидается признака начала данных, записвывает пришедшее до тех пор, пока не появится признак конца данных.
2)php посылает ардуине команду "а пришли ка мне данные", ардуина в ответ отсылает данные, не забывая отослать признак конца передачи.
Какой способ выбрать - зависит от специфики задачи.
В общеи-то все достаточно просто должно быть. Могут быть тонкости непосредственно в реализации, но не существенные.
Общая последовательность примерно такая:
1)php пишет в сериал команду, которая говорит ардуине, что от нее ждут данных. Видимо, это должно быть что-то типа
После чего начинает ждать данные. Неглупо проверять время ожидания, чтобы отваливаться, если, например ардуина повисла/отключилась или порт отвалился.
2)Ардуино в основном цикле периодически проверяет состояние Serial и если там есть данные, отсылает ответ, завершая его символом конца данных, например '\n'. Схематично это будет так:
3)php читает данные, пока не встретит символ '\n' Что-то типа
Понятно, что это все наброски "на глаз"
спасибо большое.
Добрый день!
Столкнулся с такой же проблемой.
Один и тот же файл на двух машинах. В ls /dev/tty* смотрел, один и тот же порт /dev/ttyACM0. Права посмотрел, совпадают.
На Ubuntu 12.04 читает, в if заходит, а на Ubuntu Server 12.04 нет.
Куда еще можно копнуть?