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've been browsing on-line more than 3 hours these days, but I by no means discovered any attention-grabbing article like yours.
It's beautiful worth sufficient for me. Personally, if all webmasters and bloggers
made excellent content material as you probably did, the internet will be much more useful than ever before.

You really make it seem so easy with your presentation but I find this matter to be actually something which I
think I would never understand. It seems too complicated and extremely broad for me.
I am looking forward for your next post, I'll try to get
the hang of it!

Superb blog! Do you have any hints for aspiring writers?
I'm hoping to start my own blog soon but I'm a little lost on everything.

Would you propose starting with a free platform like Wordpress or go for a paid
option? There are so many choices out there that I'm completely overwhelmed
.. Any recommendations? Thanks!

I am no longer positive the place you're getting your information, but great topic.
I must spend a while learning much more or figuring out
more. Thanks for fantastic info I was on the lookout
for this information for my mission.

Hello, Neat post. There's an issue along with your website in internet explorer, might check
this? IE still is the marketplace chief and a huge component to other people will pass over your fantastic writing due
to this problem.

An impressive share! I have just forwarded this onto a friend who had been doing a little homework on this.
And he actually bought me breakfast due to the
fact that I discovered it for him... lol. So let me reword this....
Thank YOU for the meal!! But yeah, thanx for spending the time to discuss this issue here on your website.

Hmm it seems like your blog ate my first comment
(it was super long) so I guess I'll just sum it up
what I submitted and say, I'm thoroughly enjoying your
blog. I as well am an aspiring blog blogger
but I'm still new to everything. Do you have any suggestions for novice blog
writers? I'd really appreciate it.

Hmm it seems like your website ate my first comment (it was extremely long) so I guess
I'll just sum it up what I submitted and say, I'm thoroughly enjoying your blog.
I too am an aspiring blog writer but I'm still new to everything.
Do you have any tips and hints for inexperienced blog writers?
I'd really appreciate it.

hey there and thank you for your information – I have certainly picked up
something new from right here. I did however expertise several technical issues using this site, since I experienced to reload the site a lot of times previous to I could get it to load correctly.
I had been wondering if your hosting is OK? Not that I'm complaining, but sluggish loading instances times will very frequently affect your placement in google and could damage
your high quality score if advertising and marketing with Adwords.

Well I am adding this RSS to my email and can look
out for much more of your respective interesting content.
Make sure you update this again soon.

I will right away grasp your rss feed as I can't to find your
email subscription hyperlink or e-newsletter service.

Do you have any? Kindly allow me understand so that I may subscribe.

Have you ever considered creating an ebook or guest authoring on other sites?
I have a blog centered on the same ideas you discuss and would love to have you share some stories/information. I know my visitors would enjoy your work.
If you're even remotely interested, feel free to send me an e mail.

It's a shame you don't have a donate button! I'd without a doubt donate to this outstanding blog!
I suppose for now i'll settle for book-marking and adding your RSS feed to my
Google account. I look forward to brand new updates and will share this site with my Facebook group.
Chat soon!

Have you ever thought about creating an ebook or guest authoring on other websites?
I have a blog based on the same information you discuss and would love
to have you share some stories/information. I know my readers would
appreciate your work. If you're even remotely interested, feel free
to send me an email.

Pretty section of content. I just stumbled upon your weblog and in accession capital to assert that I get actually enjoyed account your blog posts.
Anyway I will be subscribing to your augment and even I achievement you access consistently fast.

I blog quite often and I genuinely thank you for your content.
The article has truly peaked my interest.
I am going to bookmark your website and keep checking for
new information about once a week. I subscribed to your RSS feed too.

Do you have a spam issue on this website;
I also am a blogger, and I was wondering your situation; many of us have created
some nice methods and we are looking to swap solutions with other folks,
please shoot me an email if interested.

Hi there just wanted to give you a quick heads up.
The text in your post seem to be running off the screen in Opera.
I'm not sure if this is a formatting issue or something to do with browser
compatibility but I figured I'd post to let you know.
The design look great though! Hope you get the problem solved soon. Cheers

Howdy this is kind of of off topic but I was wondering if blogs use
WYSIWYG editors or if you have to manually code
with HTML. I'm starting a blog soon but have no
coding experience so I wanted to get advice from someone with experience.
Any help would be enormously appreciated!

I am really enjoying the theme/design of your site.

Do you ever run into any internet browser compatibility
issues? A couple of my blog visitors have complained about my blog not working correctly in Explorer but
looks great in Firefox. Do you have any ideas to help fix this issue?

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.