How to Control an LED with Raspberry Pi Webserver using Apache

Controlling an LED with Raspberry Pi Webserver using Apache

In this tutorial, we will install Apache web server in Raspberry Pi to control the LED from a webpage that can be accessed from anywhere over the internet. This is a basic tutorial with minimum features and it can be further modified to use this method in IoT-based home automation, remote control automation, robotics, etc.

Here we control an LED connected to Raspberry Pi by using Apache web server. For this, we create an HTML/php web page which has two buttons - one for turning on the LED and the second for turning off the LED.


Components Required

  1. Raspberry pi board (With Raspbian operating system)
  2. LED
  3. 250-ohm resistor
  4. Jumper Wires


An SSH client (Putty) is used to connect the Raspberry pi using a Laptop or computer. For this, the raspberry pi needs to be connected to a network via LAN or Wi-Fi. If you have a separate monitor for your raspberry pi, then it's better to connect raspberry pi with the monitor and you don’t have to use any SSH client.


Controlling LED using Raspberry Pi Webserver

Step 1: Connections

Raspberry Pi LED Connection Circuit

The connections in this project are quite simple - the positive pin of LED is connected to GPIO 27 pin and the negative pin to a 270 ohm resistor, the other side of which is connected to GND pin.


Step 2: Installing WiringPi Library

WiringPi is a PIN-based GPIO access library written in C for the BCM2835, BCM2836, and BCM2837 SoC devices used in all Raspberry Pi versions. It’s released under the GNU LGPLv3 license and is usable from C, C++, and RTB (BASIC) as well as many other languages with suitable wrappers.

1. First we will update our Pi with the latest versions of Raspbian using the command:

sudo apt-get update


2. Now we will install git by using this command:

sudo apt-get install git-core


3. Now obtain WiringPi using git by this command:

git clone git://


4. Then install WiringPi library using:

cd wiringP./build


Step 3: Installing a Web Server

Apache is a very popular webserver, designed to create web servers that have the ability to host one or more HTTP-based websites. Apache Web Server can be enhanced by manipulating the code base or adding multiple extensions/add-ons. In our project, we are using an HTTP server and its PHP extension.

To Install Apache web server, we will use the following commands:

First, update the available packages:

sudo apt-get update


Now, install the apache2 package by using this command in the terminal:

sudo apt-get install apache2 -y


To test the web server whether it is working or not, go to your browser and type the Pi’s IP address in the tab.

To find the Pi's IP address, type ifconfig at the command line.

By default, Apache puts a test HTML file in the web folder. This default web page is served when you browse to (whatever the Pi's IP address is) from another computer on the network.

Browse to the default web page either on the Pi or from another computer on the network and you will see the following:

Apache2 Webserver

This means the Apache web server is working.


Now we will see how to change the default web page with your own HTML page

This default web page is just an HTML file on the filesystem. It is located at var/www/html/index.html.

Navigate to this directory in a terminal window and have a look at what's inside:

cd  var/www/html
ls -al
This will show you:
total 12
drwxr-xr-x  2 root root 4096 Jan  8 01:29 .
drwxr-xr-x 12 root root 4096 Jan  8 01:28 ..
-rw-r--r--  1 root root  177 Jan  8 01:29 index.html


This shows that by default there is one file in /var/www/html/ called index.html and it is owned by the root user. To edit the file, you need to change its ownership to your own username. Change the owner of the file using:

Sudo chown pi: index.html.


You can now try editing this file and then refresh the browser to see the web page change.


Install PHP in Raspberry Pi  

Now if we want to use PHP code along with HTML, then we have to further install the PHP extension in Raspberry pi. Using PHP code, we can create shell commands to control the LED from the PHP script.

To allow the Apache server to edit PHP files, we will install the latest version of PHP and the PHP module for Apache. Use the following command in terminal to install these:

sudo apt-get install php libapache2-mod-php -y


Now remove the default index.html file:

sudo rm index.html


And create your own index.php file:

sudo nano index.php


Now enter the below code in index.php to test the PHP installation.

<?php phpinfo(); ?>


Save it by pressing CTRL + X and the ‘y’ and enter. Now refresh the webpage in your browser, you will see a long page with lots of information about PHP. This shows that the PHP extension is installed properly. If you have any problem with the pages or if the pages do not appear, try reinstalling the apache server and its PHP extension.


Step 5: Start Coding for controlling GPIO pin using this Raspberry Pi Webserver

Now delete the previous code in index.php (<?php phpinfo(); ?>) file and insert below PHP code to control GPIO pins inside body of HTML code.

Below is the complete code for creating two buttons to turn on and off the LED connected to Raspberry Pi.

<meta name="viewport" content="width=device-width" />
<title>Raspberry Pi WiFi Controlled LED</title>
       <center><h1>Control LED using Raspberry Pi Webserver</h1>      
         <form method="get" action="index.php">                
            <input type="submit" style = "font-size: 14 pt" value="OFF" name="off">
            <input type="submit" style = "font-size: 14 pt" value="ON" name="on">
    shell_exec("/usr/local/bin/gpio -g mode 27 out");
                        echo "LED is off";
                        shell_exec("/usr/local/bin/gpio -g write 27 0");
            else if(isset($_GET['on']))
                        echo "LED is on";
                        shell_exec("/usr/local/bin/gpio -g write 27 1");

Raspberry Pi Webserver

In the above code there is a PHP script which checks which button is pressed by using below code and then turns on and off the LED accordingly.

    shell_exec("/usr/local/bin/gpio -g mode 27 out");
                        echo "LED is off";
                        shell_exec("/usr/local/bin/gpio -g write 27 0");
            else if(isset($_GET['on']))
                        echo "LED is on";
                        shell_exec("/usr/local/bin/gpio -g write 27 1");


Here we have used shell_exec() command in php code, this command is used to run the shell command from the PHP script. Learn more about shell_exec here. If you run the command inside shell_exec directly form the terminal of Raspberry pi, you can directly make GPIO pin 27 low or high. Below are two commands to test the LED directly from terminal.

/usr/local/bin/gpio -g write 27 0
/usr/local/bin/gpio -g write 27 1


After completing this, run the code in your browser by typing the IP address of raspberry pi in the browser. You will see 2 buttons - ON, OFF to control your LED by clicking these buttons.


I hope you liked this article. You can also check out our other Internet of Things projects.


I simply desired to say thanks all over again. I'm not certain what I could possibly have achieved in the absence of those tactics shown by you on that theme. It truly was a very difficult crisis for me personally, however , seeing your specialised form you resolved the issue made me to leap with happiness. I am just thankful for your guidance and as well , expect you realize what a powerful job you were getting into instructing the rest all through your site. Probably you haven't met any of us.

Thank you a lot for giving everyone an extraordinarily pleasant chance to read in detail from here. It is always so excellent and also packed with a lot of fun for me personally and my office acquaintances to search your website at a minimum thrice weekly to find out the latest guides you have. And of course, I'm just actually impressed concerning the impressive tips you serve. Certain 4 facts on this page are without a doubt the most impressive I've had.

Thanks a lot for providing individuals with an extremely memorable possiblity to read from this web site. It is always so cool and stuffed with a great time for me and my office co-workers to search your web site at the least thrice weekly to study the new tips you will have. And definitely, I'm just certainly happy with all the excellent ideas served by you. Certain 2 points in this posting are surely the best I've ever had.

I really wanted to write a message so as to say thanks to you for those marvelous secrets you are posting at this site. My prolonged internet search has now been paid with excellent concept to exchange with my pals. I 'd admit that we website visitors are extremely lucky to dwell in a decent community with very many brilliant people with useful methods. I feel rather grateful to have come across your website and look forward to tons of more amazing minutes reading here. Thank you once again for all the details.

A lot of thanks for every one of your work on this blog. Kim take interest in doing investigations and it is easy to see why. All of us know all relating to the lively mode you create precious suggestions on your blog and as well as strongly encourage contribution from others on that content while our girl is undoubtedly studying a whole lot. Enjoy the rest of the year. You have been doing a first class job.

I enjoy you because of your own work on this web page. My mother take interest in getting into investigation and it's really easy to see why. Most of us hear all concerning the lively medium you present functional tips and tricks via your web blog and as well as boost participation from some others on the topic while our girl is discovering a whole lot. Have fun with the remaining portion of the new year. You are always performing a remarkable job.

I wanted to type a small message so as to thank you for all the unique tips and hints you are giving here. My time consuming internet look up has at the end been paid with pleasant know-how to talk about with my family members. I 'd suppose that most of us website visitors actually are unquestionably endowed to be in a fabulous network with many wonderful people with interesting tips. I feel truly blessed to have used the webpages and look forward to many more exciting moments reading here. Thanks a lot once again for a lot of things.

Needed to send you one very little note to help thank you the moment again just for the fantastic pointers you've discussed on this page. It was so tremendously generous of you to convey freely what exactly many of us could have offered for sale as an ebook to help with making some money on their own, precisely given that you could have tried it if you ever wanted. These good ideas additionally worked as the great way to be certain that many people have the identical interest the same as mine to know the truth way more on the subject of this condition. I am sure there are several more enjoyable instances ahead for individuals who look over your blog.

I want to convey my respect for your generosity in support of people that must have help with your theme. Your special commitment to passing the message across became wonderfully beneficial and have continuously enabled people like me to reach their goals. Your amazing interesting facts can mean a lot a person like me and extremely more to my mates. Thanks a lot; from all of us.

Thanks for every one of your labor on this website. My aunt take interest in engaging in investigations and it's simple to grasp why. My spouse and i know all about the lively method you create powerful information through your blog and as well strongly encourage participation from some others about this theme and our child has always been understanding so much. Enjoy the rest of the new year. You are always performing a really good job.

Add new comment

The content of this field is kept private and will not be shown publicly.

Plain text

  • No HTML tags allowed.
  • Lines and paragraphs break automatically.
  • Web page addresses and email addresses turn into links automatically.