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.


Hey there I am so grateful I found your blog page, I really
found you by mistake, while I was searching on Aol for something else, Nonetheless I
am here now and would just like to say thanks a lot for a
fantastic post and a all round thrilling blog (I also love the theme/design),
I don’t have time to look over it all at the minute but I have book-marked it and also added in your RSS feeds, so when I have time I will be back to read a great deal more, Please do keep
up the superb work.

My coder is trying to convince me to move to .net
from PHP. I have always disliked the idea because of
the costs. But he's tryiong none the less. I've been using Movable-type on numerous websites for about a year and
am anxious about switching to another platform. I have heard very good things about
Is there a way I can import all my wordpress content into it?
Any kind of help would be greatly appreciated!

Right here is the right blog for anyone who would like
to find out about this topic. You understand so much
its almost tough to argue with you (not that I really
will need to…HaHa). You definitely put a fresh spin on a
topic which has been discussed for ages.
Great stuff, just great!

I have been surfing on-line greater than 3 hours as of late, but I never found any attention-grabbing article like yours.

It is beautiful price sufficient for me. In my opinion, if all website owners and bloggers made
just right content as you did, the net will probably be
much more useful than ever before.

Please let me know if you're looking for a writer for your site.
You have some really great articles and I think I would be a good asset.
If you ever want to take some of the load off, I'd love to
write some material for your blog in exchange for a link back to mine.
Please blast me an email if interested. Thank you!

Excellent site you have here but I was wondering if you knew of any user discussion forums that cover the same topics discussed
in this article? I'd really love to be a part
of online community where I can get opinions from other experienced individuals that share the same interest.
If you have any suggestions, please let me know.

You actually make it appear really easy with your presentation but I in finding this matter to be actually something which
I feel I would never understand. It sort of feels too complex and very extensive for me.
I'm having a look forward in your next submit, I'll attempt to get the grasp of it!

Thanks for your marvelous posting! I genuinely enjoyed reading it,
you can be a great author.I will make sure to bookmark your blog
and will come back very soon. I want to encourage you to continue your great writing, have a nice day!

I blog quite often and I really thank you for your content.
This article has truly peaked my interest. I'm going to
take a note of your blog and keep checking for new details
about once per week. I opted in for your RSS feed as well.

Have you ever considered about including a little bit more than just your articles?

I mean, what you say is important and everything.
However imagine if you added some great graphics or video clips to give your posts more, "pop"!
Your content is excellent but with images and clips, this site could undeniably be one of the best
in its niche. Wonderful blog!

The other day, while I was at work, my sister stole my iPad and tested to see if it can survive a 30 foot drop, just so she can be a youtube sensation. My apple ipad is now broken and
she has 83 views. I know this is entirely off topic but I had to share it with someone!

Hey I know this is off topic but I was wondering if you knew of any widgets I
could add to my blog that automatically tweet my newest twitter updates.

I've been looking for a plug-in like this for quite some time and was hoping maybe
you would have some experience with something
like this. Please let me know if you run into anything. I
truly enjoy reading your blog and I look forward to your new updates.

That is really fascinating, You are an excessively skilled blogger.
I've joined your rss feed and look forward to searching
for more of your great post. Additionally, I have shared
your web site in my social networks

I'm not sure where you're getting your information, but good topic.
I needs to spend some time learning more or understanding more.
Thanks for magnificent information I was looking for this
information for my mission.

An impressive share! I've just forwarded this
onto a coworker who has been doing a little research on this.
And he actually bought me lunch because I stumbled upon it for him...
lol. So let me reword this.... Thanks for the meal!!
But yeah, thanks for spending the time to talk about
this matter here on your web page.

I have been browsing online greater than 3 hours lately, yet I by no means found any
attention-grabbing article like yours. It's lovely value sufficient for me.
Personally, if all site owners and bloggers made excellent content material as
you did, the web might be much more useful than ever before.

I was suggested this web site by my cousin. I'm not sure whether this
post is written by him as nobody else know such detailed about my difficulty.
You're wonderful! Thanks!

I'm truly enjoying the design and layout of your
site. It's a very easy on the eyes which makes it much more enjoyable for me to
come here and visit more often. Did you hire out a designer to create your theme?
Fantastic work!

Hmm it seems like your site ate my first comment (it
was super long) so I guess I'll just sum it up what I had written and say, I'm thoroughly enjoying your blog.
I too am an aspiring blog blogger but I'm still new to the whole thing.
Do you have any suggestions for inexperienced blog writers?
I'd genuinely appreciate it.

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.