Main menu
WalkswithMePHPRead Serial Port with PHP

Read Serial Port with PHP

Read serial port with PHP ? yea some time we may face such a requirement, reading serial devices from web browsers. bit complicated right ? Yea, there are few way to accomplish this with the technologies available now.

We all know that browser is Sanbox mode and its restricted to access system hard drives or any serial devices. So How we can read the serial port using PHP (server side script executed with a client browser). Yea that bit crazy. We can check few other options available to do the things.

  • Java Applet.
  • Active X components.

The above two methods have its own advantages and limitations Active x only support with Windows platform, Java is cross platform so it can be used , there is also requirement like JDK should be installed on the client PC , the applet should be signed and verified. etc.

So if we can do that (install JDK on client PC) so we can install an apache server with PHP on client PC too right ? so we can develop it with PHP itself. no need of struggling with applet signed process.

Yep that is what I’m doing here, my requirement is to read the weigh machine out put on the web browser. so the PC connected to the serial port device. I’m working on linux machine so I can do the serial port reading with PHP itself , In windows there is some issue with reading serial port using PHP , it can’t be achieved quick , have to work a lot, In my case its fine too , bcoz client PC’s are Linux so I’m good to go  with PHP.

If you’re using Windows , I will post  another article soon with windows serial port reading using  PHP and Perl mix.

ok lets check the code in PHP, also my plan to execute the code as follows.

I will put the code in a folder called serialport inside /var/htm/ so I can access it like localhost/serialport/index.php it will return the data , In my web page I can use an Ajax call to the above url and return the result inside text box of my web apps.

There are few things you have to keep in mind  In linux the port name usually like ttyUSB0 or ttyS0

first you can connect the device with the system then test the device is working fine or not using the terminal by putting the command.

cat /dev/ttyUSB0

If the port name is correct it will read and display the values in the terminal. just Ctl + Z to stop that.

Now few thing while working with apache server on Linux machine , the default apache user named www-data should be in dialout group then only it can access the port. So please make sure the user already in the dialout group. else you can add that by using following command.

sudo usermod -a -G dialout www-data

you can list the current group of the user with following script.

groups www-data

Now the code its more simple than this setup!.

The serial port data will read continuously and out put it with a space between each values so what I did is find the maximum number of time repeated value, that must be the value shown in the device. and output it.

ini_set("display_errors", "1");
header('Access-Control-Allow-Origin: *');
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.)
// 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")
// Then we need to open it
// Read data
$read = $serial->readPort();
// Print out the data
$data = preg_split('/\s+/', $read);
//print_r($data); // red and split the data by spaces to array
$array = array_count_values($data); // count the array values
$values = array_keys($array, max($array)); // count the maximum repeating value
echo $values[0];
// If you want to change the configuration, the device must be closed.


you can download the entire code as zip file too, in the above code I used a class php serial port that is also available with zip file. This only works with Linux not with windows. you can’t read the data of serial port using above class in windows , windows supports only writing to serial port from PHP directly .

Read serial port with PHP is so simple in Linux machine for windows will write another article soon. just download the read serial port with php script just below. and extract it to your /var/www/html/ folder. It had an index.html file using jQuery to make the ajax call too the PHP file that read the serial port data and return to web page.

If you’re trying this code with remote machine make sure you added this script at top of the section.

header('Access-Control-Allow-Origin: *');

Happy reading :):):)

Download794 downloads

12 thoughts on “Read Serial Port with PHP

  1. Hi
    This code is running good in localhost , while put this code online through my website i get the error like unable to set baud rate: stty: /dev/ttyUSB0 : no such file or directory. I think it cant be able to find /dev/ttyUSB0 .can u please tell me how to resolve this.

    1. Yea, It can’t find /dev/ path bcoz your server doesn’t connected to serial port device.
      In fact this code will only works on servers that connected devices (like your localhost connected with serial device).
      From browser you can’t access the client machine peripheral devices other than printer or similar devices.

      Hope now its clear.

  2. Hi,

    I have executed your code it shows some warning messages, can you please tell me how to solve this problem.

    here is the warning messages i got

    Warning: Unable to set baud rate: stty: /dev/ttyUSB0: Permission denied in /opt/lampp/htdocs/serialport/php_serial.class.php on line 237Warning: Unable to set parity : stty: /dev/ttyUSB0: Permission denied in /opt/lampp/htdocs/serialport/php_serial.class.php on line 284Warning: Unable to set character length : stty: /dev/ttyUSB0: Permission denied in /opt/lampp/htdocs/serialport/php_serial.class.php on line 320Warning: Unable to set stop bit length : stty: /dev/ttyUSB0: Permission denied in /opt/lampp/htdocs/serialport/php_serial.class.php on line 359Fatal error: Unable to set flow control : stty: /dev/ttyUSB0: Permission denied in /opt/lampp/htdocs/serialport/php_serial.class.php on line 403

      1. After setting the permission it shows the alert message “It seems the machine is empty”.
        But if i run this “cat /dev/ttyUSB0″ it displays data from the device. can you tell me what is the problem. Thanks in advance.

    1. Warning: Reading serial port is not implemented for Windows in D:\PHP\php_home_dir\php_serial.class.php on line 503

  3. We are looking for How to read COM port on windows using PHP. Please help us out as you have done on Linux Platform.
    Thanks a Lot


  4. Pingback: Read serial port data using Perl under windows - | WalksWithMe

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>