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://git.drogon.net/wiringPi

 

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 http://192.168.1.31 (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.

<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Raspberry Pi WiFi Controlled LED</title>
</head>
       <body>
       <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">
         </form>​​​
                         </center>
<?php
    shell_exec("/usr/local/bin/gpio -g mode 27 out");
    if(isset($_GET['off']))
        {
                        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");
            }
?>
   </body>
</html>

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.

<?php
    shell_exec("/usr/local/bin/gpio -g mode 27 out");
    if(isset($_GET['off']))
        {
                        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.

3420 Comments

Hey! I understand this is sort of off-topic however I needed to ask.

Does building a well-established website such as yours take a lot
of work? I am brand new to operating a blog but I do write in my journal everyday.
I'd like to start a blog so I can share my personal
experience and feelings online. Please let me know if you have any suggestions or tips for brand new aspiring blog owners.
Appreciate it!

I do not know whether it's just me or if everybody else experiencing problems with your website.
It appears like some of the text in your content are running
off the screen. Can somebody else please provide feedback and let me know if this is happening to them as well?
This could be a issue with my internet browser because I've had
this happen before. Kudos

What i do not realize is actually how you're no longer really much more well-preferred than you
may be now. You're so intelligent. You understand
thus significantly with regards to this topic,
made me for my part imagine it from numerous
numerous angles. Its like men and women don't seem to
be interested unless it's one thing to accomplish with Girl gaga!
Your own stuffs nice. All the time care for it up!

I truly love your website.. Great colors & theme. Did you make this site
yourself? Please reply back as I'm hoping to create my very own blog and
would love to learn where you got this from or just what the
theme is named. Thank you!

Fantastic goods from you, man. I have understand your stuff
previous to and you're just too great. I actually like what you have acquired here,
certainly like what you are stating and the way in which you say it.

You make it enjoyable and you still care for to keep
it wise. I can not wait to read far more from you.
This is actually a wonderful site.

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

I have been browsing online more than 3 hours
today, yet I never found any interesting article like yours.

It is pretty worth enough for me. Personally, if all site owners and bloggers made good content as you did, the
net will be a lot more useful than ever before.

I have been exploring for a little bit for any high quality articles or weblog posts on this kind of space .

Exploring in Yahoo I finally stumbled upon this web site.
Studying this info So i'm glad to show that I've a
very excellent uncanny feeling I found out just what I needed.
I most unquestionably will make certain to do not fail to remember this website and provides it a glance on a constant basis.

Great post. I was checking constantly this
blog and I am impressed! Extremely helpful info specifically the last
part :) I care for such information much. I was looking for this particular
information for a very long time. Thank you and good luck.

This is the perfect website for everyone who would like to understand this topic.
You know so much its almost tough to argue with you (not that I actually will need to…HaHa).

You certainly put a fresh spin on a topic that's been discussed for decades.

Wonderful stuff, just great!

Just wish to say your article is as surprising.
The clearness in your post is just nice and i
can assume you are an expert on this subject. Well with your permission let me to grab your RSS feed
to keep updated with forthcoming post. Thanks a million and please continue the rewarding
work.

My brother suggested I may like this website. He was once totally right.
This publish actually made my day. You cann't believe simply how much time I had spent for this information! Thanks!

Excellent beat ! I wish to apprentice whilst you amend your website, how
can i subscribe for a blog website? The account aided me a appropriate deal.
I were a little bit familiar of this your broadcast offered bright transparent concept

After I originally commented I appear to have clicked on the -Notify me
when new comments are added- checkbox and from now
on whenever a comment is added I receive 4 emails with the exact same comment.
Perhaps there is an easy method you are able
to remove me from that service? Thanks!

I'm extremely impressed with your writing skills and also with the layout on your weblog.

Is this a paid theme or did you modify it yourself?
Either way keep up the nice quality writing, it is rare to see a nice blog like this one nowadays.

Thanks for any other fantastic post. Where else may anybody get that type of info in such a perfect
means of writing? I've a presentation subsequent week, and I'm at
the look for such information.

you are really a excellent webmaster. The web site loading pace is amazing.
It kind of feels that you're doing any unique trick.
Furthermore, The contents are masterwork. you've performed a wonderful job on this topic!

Please let me know if you're looking for a author for your weblog.
You have some really great posts and I feel I would be a
good asset. If you ever want to take some of the load off, I'd really like to write some articles
for your blog in exchange for a link back to mine.

Please blast me an email if interested. Many thanks!

I loved as much as you will receive carried out right
here. The sketch is tasteful, your authored subject matter stylish.

nonetheless, you command get bought an nervousness over that you wish be delivering the following.
unwell unquestionably come further formerly again since exactly the same nearly a lot often inside case you shield this increase.

Its like you read my mind! You seem to know so much about this,
like you wrote the book in it or something. I think that
you could do with a few pics to drive the message home a bit, but instead of that,
this is fantastic blog. A great read. I will certainly be back.

You have made some really good points there. I checked on the net for additional information about the issue and found
most people will go along with your views on this site.

Today, I went to the beach front with my children. I found a sea shell and gave it to my
4 year old daughter and said "You can hear the ocean if you put this to your ear." She
placed the shell to her ear and screamed. There was a hermit crab inside and it pinched her ear.
She never wants to go back! LoL I know this is completely off topic but I had to tell someone!

Hey there! This post couldn't be written any better!
Reading through this post reminds me of my previous room mate!
He always kept talking about this. I will forward this page to him.

Fairly certain he will have a good read. Thank you for sharing!

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.