Pi - Flash a Led

What we are going to do is flash a light emitting diode on and off.  Not terribly exciting, but it does demonstrate the fundamentals of using the Pi general purpose input output (gpio) ports.

Pi and Proto Board for Led

First a bit about  about GPIO and the Pi.

Pins

The GPIO Pins have the following names and functions.

There are two naming conventions Broadcom numbers and  the standard pin location numbers.

Most of the pins can be either inputs or outputs. 

For this demo we will be using one pin and setting it to an output.

GPIO# 2nd func pin#
pin# 2nd func GPIO#
- +3V3 1
2 +5V -
GPIO2 SDA1 (I2C) 3
4 +5V -
GPIO3 SCL1 (I2C) 5
6 GND -
GPIO4 GCLK 7
8 TXD0 (UART) GPIO14
- GND 9
10 RXD0 (UART) GPIO15
GPIO17 GEN0 11
12 GEN1 GPIO18
GPIO27 GEN2 13
14 GND -
GPIO22 GEN3 15
16 GEN4 GPIO23
- +3V3 17
18 GEN5 GPIO24
GPIO10 MOSI (SPI) 19
20 GND -
GPIO9 MISO (SPI) 21
22 GEN6 GPIO25
GPIO11 SCLK (SPI) 23
24 CE0_N (SPI) GPIO8
- GND 25
26 CE1_N (SPI) GPIO7
(Models A and B stop here)
EEPROM ID_SD 27
28 ID_SC EEPROM
GPIO5 - 29
30 GND -
GPIO6 - 31
32 - GPIO12
GPIO13 - 33
34 GND -
GPIO19 - 35
36 - GPIO16
GPIO26 - 37
38 - GPIO20
- GND 39
40 - GPIO21

  
We also need to know something about how much current a Pi pin can supply and how much current it takes to run a LED.
To calculate the amount of current we need to know about the resistance of the led and the voltage supplied by the GPIO output.

Resistance of a LED - none - oops.  Diodes are interesting.  In one direction they have infinite resistance, no current will flow and in the other they have a fixed voltage drop and then zero resistance.  Voltage drop of the blue lead I am using is about 2.6 Volts.  I measured it.

to calculate current we use Ohms law which is I=E/R.  In our example this is (3.3 -2.6)/0, since leds have no resistance after the fixed voltage drop.  See why the oops.  An infinite amount of current - which means we probably toast the PI.

We solve this problem by adding resistance.  A restriction in the current flow created uniquely enough by a device called a resistor.

Resistance is not futile.


So lets calculate the size of the resistor we want. 

I=E/R  or R = E/I.  Max current per pin = 16 ma.  Lets go with 5 ma to be safe.  So (3.3-2.6)/.005 = 0.7/.005 = 140 ohms.   I think I actually have an approximately 470 ohm resistor in this circuit since I don't care about brightness.

A little more abouty leds.


This is how to wire an led

As you can see from the above diagram leds have polarity - they must be inserted in the circuit in the correct direction.


The end result the circuit looks like this:


Proto Board and Led


Or as what we call a schematic diagram:


A Schematice



Note that although this schematic shows that we are connected to pin 16 we are actually using pin 19 in this circuit.

To Review


Some Programs

Turn the led on

#! /usr/bin/python

# Import the Python gpio library
import RPi.GPIO as GPIO

# Turn off warnings
GPIO.setwarnings(False)

# This is the gpio pin I have the led connected to
pin = 19

#  Set the pin number mode to Broadcom rather than connector order
GPIO.setmode(GPIO.BCM)

# Set the choosen pin to be an output and set the ouput true, on.
GPIO.setup(pin, GPIO.OUT)
GPIO.output(pin, 1)


Or if we want it to flash a few times.

#! /usr/bin/python

# Flash a LED
import RPi.GPIO as GPIO
import time

GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) pin = 19 GPIO.setup(pin, GPIO.OUT)
# Loop a bunch of times turning the led on and off with a delay of 1 second. i=0 while i < 20: GPIO.output(pin, 1) time.sleep(1) GPIO.output(pin, 0) time.sleep(1) i = i + 1
# Set the gpio pins we used back to the default input state. GPIO.cleanup()