Sida 1 av 1

FT232 USB serieport och PHP funkar ibland

Postat: 07 sep 2009, 21:52
av tmot
Hej
Jag har en USB->Serieportsadapter som fungerar utmärkt i Windows XP SP3. I Ubuntu 9.04 så försöker jag läsa lite data från den. Mitt problem är att det fungerar.... ibland :( . Alltså, jag kan skicka data 3-5 gånger innan den faktiskt dyker upp i terminalen. Min fråga är om det är någon här som känner till något om detta? PHP-koden som försöker läsa ser ut enligt nedan:

<?php
$fp=fopen("/dev/ttyUSB0", "r");
if (!$fp)
{
echo "Uh-oh. Port not opened.";
}
else
{
$buffer="";
echo "<p>Reading data...";
$buffer = fread($fp,14);
//$buffer = ltrim($buffer,"\x02");
//$buffer = rtrim($buffer,"\x03");
echo "<p>TagID: ";
print $buffer;
print " ----- ";
print strlen($buffer);
fclose ($fp);
}
?>

Någon som har ett tips? USB-Serie-chipet är ett FT232.

Tack på förhand.
/Mattias

Re: FT232 USB serieport och PHP funkar ibland

Postat: 08 sep 2009, 00:14
av Lars
För att serieportskommunikationen ska fungera måste du använda rätt hastighet, handskakning, bytestorlek, stoppbitar o.s.v. Har du gjort det? Det enklaste är nog att använda någonting färdigt för PHP, testa med http://www.phpclasses.org/browse/package/3679.html

Re: FT232 USB serieport och PHP funkar ibland

Postat: 08 sep 2009, 18:57
av tmot
Tack för tipset! Jag har nu gjort ett litet exempel enligt nedan där jag använder php-serial-klassen. Tyvärr har jag samma problem, alltså, får bara svar då och då. Ser ni något fel på min del av koden? Som sagt fungerar det utmärkt i WIndows XP och i Ubuntu med Minicom.

Jag vore mycket tacksam om någon kunde kolla på min del av koden.
Tack på förhand!
/Mattias

<?php
include "php_serial.class.php";

// configure the serial port using php_serial.class.php
$serial = new phpSerial;
$serial->deviceSet("/dev/ttyUSB0");
$serial->confBaudRate(9600);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("none");
$serial->deviceOpen();

print "Device open...\n";
while(1)
{
$rfidTag = $serial->readPort();
if ($rfidTag != NULL)
{
$rfidTagTrim = trim($rfidTag, "\x02..\x03");
print("The shortened tag is $rfidTagTrim\n");
if (strlen($rfidTagTrim) < 10)
{
echo "oops";
}
}
usleep(100000);
}
?>