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

Hi there! This post couldn't be written any better!
Reading this post reminds me of my good old room mate!
He always kept talking about this. I will forward this post to him.
Pretty sure he will have a good read. Many thanks for sharing!

You're so awesome! I do not believe I have read a single thing like this
before. So nice to find another person with a few
unique thoughts on this subject. Really.. thanks for starting this up.
This site is one thing that is required on the internet, someone
with some originality!

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

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

Magnificent beat ! I wish to apprentice while you
amend your website, how could i subscribe for a blog website?
The account helped me a applicable deal. I were a little bit acquainted of this your
broadcast offered vibrant transparent idea

First off I want to say wonderful blog! I had a quick question which I'd like to ask if you do not mind.
I was interested to find out how you center yourself and clear your mind before
writing. I have had a difficult time clearing my mind in getting my
ideas out there. I do take pleasure in writing but it just seems like
the first 10 to 15 minutes are wasted just
trying to figure out how to begin. Any ideas or tips?
Appreciate it!

Superb blog you have here but I was wanting to know
if you knew of any discussion boards that cover the same topics talked about in this
article? I'd really love to be a part of online community where I can get comments from other
experienced individuals that share the same interest. If you have any suggestions,
please let me know. Bless you!

It's a shame you don't have a donate button! I'd most certainly
donate to this superb blog! I guess for now i'll settle for
book-marking and adding your RSS feed to my Google account.
I look forward to fresh updates and will talk about this site with my Facebook group.
Talk soon!

My coder is trying to persuade 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 several websites for about a year and am worried about switching to another
platform. I have heard very good things about blogengine.net.
Is there a way I can import all my wordpress content into it?
Any kind of help would be really appreciated!

hello there and thank you for your info – I have certainly picked
up anything new from right here. I did however expertise several technical issues using this website, since I experienced to reload the site a lot of times previous to I could get it to load properly.
I had been wondering if your hosting is OK? Not that I am
complaining, but sluggish loading instances times will often affect your placement in google and could damage your quality
score if ads and marketing with Adwords. Anyway I'm adding this RSS to my e-mail and could
look out for a lot more of your respective fascinating content.
Make sure you update this again soon.

A person necessarily lend a hand to make seriously articles I'd
state. This is the first time I frequented your web page and to this
point? I surprised with the analysis you made to create this actual publish amazing.

Great activity!

I'm more than happy to uncover this page. I want to to
thank you for ones time for this wonderful read!!
I definitely appreciated every bit of it and I have you book-marked to check out new stuff on your website.

Thanks for the auspicious writeup. It if truth be told used to be a enjoyment account it.

Look complex to far added agreeable from you!
By the way, how can we keep in touch?

Good day! I could have sworn I've been to this blog before but after reading through some of the
post I realized it's new to me. Anyhow, I'm definitely glad I found it and I'll be bookmarking and checking back
often!

Greate post. Keep writing such kind of information on your
page. Im really impressed by it.
Hey there, You've performed a fantastic job. I will certainly digg it and in my opinion recommend to my friends.
I am confident they will be benefited from this website.

It is appropriate time to make some plans for the future and
it's time to be happy. I've read this post and if I could I want to
suggest you few interesting things or tips. Maybe you could write next
articles referring to this article. I desire to read even more things about it!

Excellent weblog here! Also your web site a lot up fast!

What web host are you using? Can I am getting your affiliate hyperlink on your
host? I wish my site loaded up as fast as yours lol

Hmm it looks like your blog ate my first comment (it was extremely
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
everything. Do you have any points for newbie blog writers?
I'd really appreciate it.

Wonderful beat ! I wish to apprentice while you amend your site, how could
i subscribe for a blog website? The account aided me a acceptable deal.

I had been a little bit acquainted of this your broadcast offered bright clear idea

Hey! I know this is somewhat off topic but
I was wondering which blog platform are you using for this website?
I'm getting sick and tired of Wordpress because I've had problems with
hackers and I'm looking at options for another platform.
I would be fantastic if you could point me in the direction of a good
platform.

Do you mind if I quote a few of your articles as long as I provide credit and sources back to
your site? My blog is in the very same niche as yours
and my users would certainly benefit from a lot of the information you present here.
Please let me know if this ok with you. Appreciate it!

Good day! I know this is somewhat off topic but I was wondering which blog platform are you using for this site?
I'm getting tired of Wordpress because I've had issues with hackers and I'm looking at options for another platform.

I would be fantastic if you could point me in the direction of
a good platform.

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.