I'm trying to rewrite this C script into PHP.(sample)
// send packet to network
tty_fd=open(buf50, O_RDWR | O_NOCTTY | O_SYNC);
write(tty_fd,&packet2send,34);
close(tty_fd);
This C script also reads data from /dev/ttyUSB0 in Hexadecimal but i'm having trouble with write(in php).
I've been able to successfully read, but I'm afraid writing isn't working - or I have been unable to see the content of what I write.
I've used fopen:
$request_packet_ok = dechex(ord("~")). " 02 ff ff 07 ff ab 2c 4d 65 73 73 61 67 65 20 43 43 20 23 31 2f 34 20 20 20 20 ff ff d2 d7 00 00 b5 7a\r"; //Means "Message CC #1/4" on the thermostat
$device = "/dev/ttyUSB0";
if (is_writable($device)) {
echo "\n".'The file is writable'."\n";
$fp =fopen($device, "w+");
if( !$fp) {
echo "Error";die();
}
while(true){
echo "\n".'writing: '.$request_packet_ok;
fwrite($fp, $request_packet_ok);
$packet='';
$var = fread($fp, 35);
for ($i=0; $i < strlen($var);$i++){
$packet .= dechex(ord( substr($var,$i,1) ) );
}
var_dump($packet);
}
fclose($fp);
i've also tried using the php_serial.class.php:
define('PACKET_SIZE_LIMIT',70);
$serial = new phpSerial;
$serial->deviceSet('/dev/ttyUSB0');
$serial->confBaudRate(19200);
$serial->confParity("none");
$serial->confCharacterLength(8);
$serial->confStopBits(1);
$serial->confFlowControl("rts/cts");
$serial->deviceOpen();
$starttime = microtime(true);
$sof='~';
$packet = '';
$output = '';
while (true) {
$read = $serial->readPort();
if ($read) {
while (strlen($output) < PACKET_SIZE_LIMIT){
for($i = 0; $i <strlen($read);$i++){
$each_char = substr($read,$i,$i+1);
if ( strlen(dechex(ord($each_char))) != 2 ){
$output.= sprintf('%02d',dechex(ord($each_char)));
}else{
$output.= dechex(ord($each_char));
}
}
$read = $serial->readPort();
}
echo $output;
}
}
$serial->deviceClose();
The purpose is to send messages to a thermostat using PHP rather than using C code.
Since I am able to Read the packets being sent by the antenna using php, I'm assuming I can access /dev/ttyUSB0 to write but for some reason, I can never see the content I had sent/write to the antenna (which sends the text message to the thermostat display - that doesn't happen). I also don't get any errors.. at all!
I'm looking to write to /dev/ttyUSB0 and then read what I wrote from it (to check that it works - as a test).
I am getting no permission denied, and the antenna looks like the image attached (plugged it to windows to show you, it needs to run on Ubuntu)
i have tried using the following commands to see the content at no avail (when I run the php code on that machine using root privileges):
screen /dev/ttyUSB0 19200
od -x < /dev/ttyUSB0
How can I send a message using php via /dev/ttyUSB0 and receive that very message? or at least have some sort of simple test to confirm that what was sent, can actually be read.
In the C program you
write(tty_fd,&packet2send,34);
i. e. 34 bytes. In your PHP script youfwrite($fp, $request_packet_ok);
where$request_packet_ok
is a string of 105 Bytes. Obviously you are mistakenly sending the message in hexadecimal space-separated representation, while you should rather send it as raw bytes.