How do I control a serial port using PHP?

FAQs

Download
Communicate-Over-Serial-Port-In-PHP.zip (1.2 kB)

TX and RX from Serial Port in PHPPHP (PHP HyperText Preprocessor) is a server side scripting language popular with website developers. Typically PHP is used to generate web pages by interrogating a database and files. However PHP can also be used to control and communicate with other devices.

This article explains how to configure PHP in order to send and receive data over a serial port on a Unix system or a windows system.

Prerequisites

  1. PHP installed on your computer
  2. An installed Brainboxes Serial port product

Steps In Brief

  1. Install PHP Direct IO extension
  2. Configure PHP to use the extension
  3. Use PHP file provided in the downloads
  4. Open terminal program at other end of serial connection
  5. Configure PHP file with correct local serial port settings
  6. Go!

In-depth

Install PHP Direct IO

PHP by default does not offer good COM port support however a PHP extension called Direct IO does offers low level access to IO. We will use this extension for serial port communication.

On Unix system install the extension using PECL, open a terminal and type:

sudo pecl install dio-0.0.7

On windows download the latest php direct io extension dll from: http://pecl.php.net/package/dio. The dll file should be copied into your php_extension folder (often located in ext or libphpext )

Configure PHP to use the extension

Next the php.ini file needs to be updated to tell it to use the extension. To the bottom of the php.ini file add the following.

  • Unix: extension=dio.so
  • Windows: extension=php_dio.dll

Restart PHP

  • Unix: commands vary, on mac for example: sudo apachectl restart
  • Windows: restart IIS webserver, or WAMP server

Use PHP file provided in the downloads

Download the file above and place it in your web-servers root directory. Navigate to the file the a web browser to confirm that an error is not produced which tells you to install PHP Direct IO.

Open terminal program at other end of serial connection

In order to test sending and receiving serial data in PHP, the other end of the serial port should be open. On a windows system we recommend using Putty and on Mac OSX CoolTerm (see this FAQ for more details) to configure a serial for for transmitting and receiving data. We also recommend opening the other side of the serial connection in the terminal initially to confirm that data is definitely able to be sent and received across the connection.

Configure PHP file with correct local serial port settings

The sample script has some settings to be configured at the top, most importantly the port name.

  • Windows the port name should be ‘comX:’ (X being the port number assigned name must be lower case and a colon at the end) this can be found by opening Device Manager.
  • Unix systems the port name is ‘/dev/cu.usbserial-XXXXXXXXX’ where ‘X’ is a randomly assigned id. To find all the names of Brainboxes serial ports installed on UNIX type ls /dev/cu.usbserial* into the terminal.

Go!

In a Web Browser open the file, the other end of the serial port should show ‘HELLO WORLD!’. Then type into the terminal on the other end of the connection, this will be echoed back onto the web browser window.

Important note: PHP Direct IO does not currently implement a timeout on reads and is blocking. What this means is that if there is no data present when the read method is called then PHP will block (halt) until data is received or the PHP execution time is reached.

Links

PHP Direct IO manual – http://www.php.net/manual/en/book.dio.php

FAQs