Control Your Arduino With PHP Via C++…and Why Not JQuery!

For a couple of days now I have been looking for a PHP class that would help me send data to my Arduino board. So far the only class everybody points to is this one, but I haven’t been able to get it to work with Windows!

My Fix: PHP, JQuery and Visual C++

Instead of just using PHP I have decided to split the job between Visual C++ and PHP ( and I’ve added JQuery while we are at it. Visual C++ is a great framework witch which you can easily program serial port communication, all I have to do with PHP is send data to my C++ program.

What Our Program Will Do

I want to make a set of buttons and using HTML with which I can control my Arduino’s pin 13 light.

How The Program Will Work

I will have three files for this project, the HTML, PHP and C++ programs. My PHP and C++ will have the same name, but they don’t have to if you don’t want.

Whenever someone clicks on one of the buttons in my HTML page I will send a value, using JQuery, to my PHP script. The PHP script will send that value to my C++ program which will send it to my Arduino. The C++ program will send some data back to PHP and JQuery to display it in HTML.

I plugin my Arduino board at random USB ports, so I will also have a text field with which I can change ports, this way I won’t have to compile my C++ program every time I decide to plug in the board at a different port.

The values I will be sending are "on" if the user clicks and "off" if the user clicks , I will also be sending the port name which is in my text field.

My C++ will send the value "1" to the Arduino if the value sent to it was "on", it will send "0" if the value was "off"

My HTML Page: The User Interface

I will need two buttons, each with their respective values, a textfield and a div for my C++ response.


			<div id="response">
			<input type="text" id="com" size="5" />
			<button value="on">On</button><button value="off">Off</button>

The JQuery

My JQuery is also very simple. If you don’t know what am doing here check out my JQuery tutorial on this subject.
JQuery AJAX Tutorial.

		<!-- include JQuery-->
		<script type="text/javascript" src=""></script>
		<!-- JQuery script-->
		<script type="text/javascript">
				var port;
				var value;

My PHP Script: The Messanger

Please call this file arduino.php as this is the name we gave it in JQuery.

// line jquery code

My C++ Arduino program will be called arduino.exe and the data I will be sending to its main function is the port name and message (either 0 or 1 ) in this order. The C++ response will be stored in the variable $output, as an array of each line and the status in the variable $returnStatus.

I use the status variable to debug my programs but it’s optional.

If you are unfamiliar with how C++’s main function can take parameters check out my tutorial on this subject.

How To Use C++ and PHP Together

PHP Code:


exec("arduino.exe {$port} {$message}",$output,$returnStatus);

foreach($output as $line)
 echo '<p>';
 echo $line;
 echo '</p>';
echo "Return Status: {$returnStatus}";

My C++ Code: The Interpreter

I will be using the serial port class. This class I very easy to use and I talked about it in detail in my previous post. I also show how to use Visual C++.
How To: Control Your Arduino With PHP
I think the code is self explanatory and well commented so here it is.

#include "stdafx.h"
using namespace System;
using namespace System::IO::Ports;

int main(array<System::String ^> ^args)
	Console::WriteLine("Visual C++ Program Output:");
		String^ message=args[1]; // get message ( 0 or 1 )
		String^ port=args[0]; // get port name
		// arduino settings
		SerialPort^ arduino;
		arduino = gcnew SerialPort(); // make arduino object
		arduino->PortName =port; // set port name
		arduino->BaudRate = 9600; // set baud rate
		arduino->ReadTimeout = 500; // set read time out
		arduino->WriteTimeout = 500; // set write time out
		// open port
			arduino->Open(); // open port
				//check that user typed one of the options
				if(String::Compare(message,"on")==0) // if sent value was "on"
					arduino->Write("1"); // send 1 to arduino
				else if(String::Compare(message,"off")==0)
					arduino->Write("0"); // send 0 to arduino
					Console::WriteLine(message+" was not an option");
			// close port to arduino
		catch (IO::IOException^ e  ) 
			Console::WriteLine(e->GetType()->Name+": Port is not ready");
			return 2;
		catch (ArgumentException^ e)
			Console::WriteLine(e->GetType()->Name+": incorrect port name syntax, must start with COM/com");
			return 3;

		Console::WriteLine("Error: arduino.exe needs at least two parameters.");
		return 1;

    return 0;

My Arduino Code: The Receiver

My Arduino code is also very simple, notice that am comparing values received not as integers but as characters.

int ledPin = 13;
int state=0;
void setup() {
    pinMode(ledPin, OUTPUT);

void loop() {
  if (Serial.available() > 0)
    state =;
      case '1':
      case '0':

That’s it for this post, leave your questions or comments below.

blog comments powered by Disqus