Raspberry Pi Lab

Code

NOT Logic

by on Jan.07, 2014, under Code, Digital Logic, Electronics

not-symbol-transparentSo when building electronic circuits, there may be times when you want the circuit to behave opposite of the input it received.  For this we need a logical NOT gate.

A NOT gate is a simple concept.  Whatever the input, the output is the opposite.

To demonstrate this concept, I’ve created a circuit in which the LED is always on unless it receives a HIGH signal from the GPIO.  Here is the circuit I used…

not-gateThe LED gets power directly from the 5v rail.  R1 is the limiter that prevents the LED from being blown out by too much voltage.  The LED stays lit because the transistor at Q1 does not have an input signal.  Therefore Q1 is “open.”  When the GPIO is changed to HIGH, the transistor closes and allows the flow of electrocity to by-pass the LED straight to ground.

The R2 resistor could be a variety of sizes.  In fact, you could, probably get by without it at all.  The 2N222A transistor I used is rated for a typical 40v and 600 mA.

The Python code on the RPi is equally simple.  All we need to do is set the #23 pin to HIGH and the LED goes off.  If you want it to blink, add a pause and then set the #23 pin to low and pause again.  Repeat.

Here’s the code…

#!/usr/bin/env python

# The circuit that goes along with this program is
# wired in such a way that the LED is always on unless
# a HIGH signal is received from the Rpi.
 
import RPi.GPIO as GPIO
 
DEBUG = 1
 
GPIO.setmode(GPIO.BCM)
RED_LED = 23
GPIO.setup(RED_LED, GPIO.OUT)
 
if DEBUG:
   print "LED turned OFF"
while True:
   GPIO.output(RED_LED, True)

 

1 Comment :, , , more...

GMail Notify

by on Jan.03, 2014, under Code, Projects

gmail-plus-raspberryThe idea of today’s project is to make an Gmail Notify program for the RPi.  I started with the idea for this program from the AdaFruit tutorial site, but I have made some significant changes to their code to make it do more of what I thought would be useful.

I used the same circuit I built for the Three LED Blink program I built in my previous post.  That circuit used a blue LED.  This program doesn’t use the blue LED, but since it is on the circuit, I went ahead and set up the pin on the GPIO and insured that it was, in fact, turned off.

Before building this project. I added these three lines to my python setup.

sudo pip install feedparser
sudo easy_install -U distribute
sudo pip install RPi.GPIO

The ‘feedparser’ line is specific to the needs for this program.  However, I believe the other two lines should be added to my RPi GPIO setup script.  I have NOT added them to the script – yet.  So I executed them before starting this project.

The idea of this program is simple.  When the program starts assume that I already know I have messages that are unread and just go ahead and set the alert status to “all clear.”  The fact is, I have – quite letterally – thousands of unread messages.  So if I were to set the “alert condition” If I have any unread messages would be pretty counter productive.

The “all clear” condition sets the green LED to a solid on state.  The “alert status” condition sets the red LED to a blinking state.  This lighting scheme is based on alert vs all clear.  If a stop light makes more sense to you, then you might want to reverse the colors.  Make it what works for you.

With that said, here is the code…

#!/usr/bin/env python

# Script:   r00t   root@bjbranson.com
# v1.0      2 January 2014

# GMail Atom RSS Feed: http://email.about.com/od/gmailtips/qt/et081005.htm
# Feedparser Docs: http://pythonhosted.org/feedparser/

# GMail and Google Apps use the same URL for the RSS Feed:
# Use your full email address as the username to distinguish
# that you are using Google Apps.

# I have thousands of unread messages so I want the program
# to start with the assumption of "no new messages" then alert
# me when additional new mail arrives.

import RPi.GPIO as GPIO
import feedparser
import time
 
DEBUG = 0                 # turn debug mode on or off
USER = "youruserid"       # if gmail just userid before the @; if apps use full email address
PASS = "yourpassword"
BASE_OFFSET = 0           # How many more than inital count will trigger alert
MAIL_CHECK_FREQ = 10      # check mail every X seconds
 
def get_new_messages ():
   feed = feedparser.parse(imapurl)
   newmails=int(feed["feed"]["fullcount"])
   return newmails   

GPIO.setmode(GPIO.BCM)
GREEN_LED = 24
RED_LED = 25
BLUE_LED = 18                   # Blue LED not used, but is wired
GPIO.setup(GREEN_LED, GPIO.OUT)
GPIO.setup(RED_LED, GPIO.OUT)
GPIO.setup(BLUE_LED, GPIO.OUT)

GPIO.output(RED_LED, False)     # Used as alert
GPIO.output(BLUE_LED, False)    # Not used but make sure it is turned off 
GPIO.output(GREEN_LED, False)   # Used to indicate "no attention needed"

imapurl = "https://"+USER+":"+PASS+"@mail.google.com/gmail/feed/atom" 
if DEBUG:
   print imapurl

initial_count = get_new_messages()
offset = BASE_OFFSET + initial_count

while True:

   newmails = get_new_messages()
 
   if DEBUG:
      print "You have", newmails, "new emails!"
 
   if newmails > offset:
      GPIO.output(GREEN_LED, False)  # Set alert condition.
      GPIO.output(RED_LED, True)     # Red LED on and Green LED off.
      blinks = MAIL_CHECK_FREQ
      while (blinks > 0):
         blinks = blinks - 1
         GPIO.output(RED_LED, True)  # Program is intended to check messages every
         time.sleep(0.5)             # MAIL_CHECK_FREQ seconds. Therefore, the blink
         GPIO.output(RED_LED, False) # rate can not take more than one second per cycle.
         time.sleep(0.5)             # So be on 1/2 second and off 1/2 second.
         if DEBUG:
            print ("Blinks Remaining is %s." % (BLINKS))
   else:
      GPIO.output(GREEN_LED, True)   # NO alert
      GPIO.output(RED_LED, False)    # Green on; Red off
      time.sleep(MAIL_CHECK_FREQ)    # Since we are NOT blinking we can just sleep
                

 

Leave a Comment :, , , more...

A Three LED Blink

by on Jan.03, 2014, under Code

My first RPi circuit.

My first RPi circuit.

My first actual circuit is a three LED blinking system.  It is a pretty simple circuit.  I have a ground pin coming off the GPIO to the blue rail on the bread board.  Then a red LED on pin 25, a green LED on pin 24, and a blue LED on pin 18.  Each LED has a 560 ohm resister.

The Python code then cycles through each LED making them blink in sequence.

It isn’t a complicated circuit or a complicated program.  However, it is an excellent starting point and a great “Hello World” program.

In my next post, I’ll use the same circuit to indicate when I have new messages waiting in my GMail account.  Should be fun.

Here is the code I used…

#!/usr/bin/env python
 
import RPi.GPIO as GPIO, time
 
DEBUG = 0
PAUSE = 1
 
GPIO.setmode(GPIO.BCM)
RED_LED = 25
GREEN_LED = 24
BLUE_LED = 18
GPIO.setup(RED_LED, GPIO.OUT)
GPIO.setup(GREEN_LED, GPIO.OUT)
GPIO.setup(BLUE_LED, GPIO.OUT)

while True:
        if DEBUG:
                print "LED ON."

        GPIO.output(RED_LED, True)
        GPIO.output(GREEN_LED, False)
        GPIO.output(BLUE_LED, False)

        time.sleep(PAUSE)

        if DEBUG:
    	print"LED OFF"

        GPIO.output(RED_LED, False)
        GPIO.output(GREEN_LED, True)
        GPIO.output(BLUE_LED, False)

        time.sleep(PAUSE)

        GPIO.output(RED_LED, False)
        GPIO.output(GREEN_LED, False)
        GPIO.output(BLUE_LED, True)

        time.sleep(PAUSE)

Leave a Comment :, , , , , , more...

RPi GPIO Setup Script

by on Jan.02, 2014, under Code, Installation

I figure I’ll be setting up and re-setting up RPi units for the forseeable future, so I converted my last post on installing the Python libraries for the GPIO into a Bash script.

Copy and paste the code to a text file in your home directory and make sure it is executable with ‘chmod +x filename’.  Then cd into your home directory and ‘./filename’ to run the script.

Here is the code…

#!/bin/bash

#####################################
# Setup the Raspberry Pi GPIO       #
# Script:  R00t  root@bjbranson.com #
# Version: 1 January 2014  V1.0     #
#                                   #
# Change Log: V1.0  Initial Script  #
#                                   #
#####################################

#########################
# CONFIGURATION SECTION #
#########################
mydir=$HOME/RPiDev

######################################
# Make sure the repository source is #
# up-to-date.                        #
######################################
echo '[I] Updating repository sources. Be Patient!'
sudo apt-get -qq update

#######################################
# Make sure the git utility is both   #
# installed and at the latest version #
#######################################
echo "[I] Verifying latest version of 'git' is installed."
sudo apt-get -y -q install git

#######################################
# Download the AdaFruit Rapberry Pi   #
# Python development libraries then   #
# list the directory to show that the #
# files were successfully downloaded  #
#######################################
if [ -d "$mydir" ]; then
   echo '[W] Specified download directory already exists.'
   echo '[I] Download of AdaFruit Python libraries skipped.'
else
   echo '[I] Downloading Python libraries from AdaFruit.'
   mkdir $mydir
   cd $mydir
   git clone http://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
   cd $mydir/Adafruit-Raspberry-Pi-Python-Code
   ls
fi

#########################################
# Download and install Python libraries #
# for controlling the RPi's GPIO        #
#########################################
echo '[I] Installing Python Dev libraries for the RPi GPIO'
sudo apt-get -y -q install python-dev
sudo apt-get -y -q install python-rpi.gpio
sudo apt-get -y -q install python-pip


#################
## END OF FILE ##
#################

 

Leave a Comment :, , , , , , , , more...

Getting Python Scripts and Libraries

by on Dec.30, 2013, under Code

python-logo-transparentI’ve been doing the basic setup stuff, but I want to build stuff.  So…

First we need to make sure the program git is installed and is the latest version.  If you installed the Occidentalis stock image, git is already installed.  If you used the Raspbian stock image, git may not be pre-installed.  In either case we can, very easily make certain git is installed and is the latest version

sudo apt-get update
sudo apt-get install git

If it isn’t installed, it will be.  If it was installed but not the latest version, it will be replaced. If it was installed and already the latest version, nothing will happen.

Next, we need to obtain the boat load of Python scripts and libraries made available by AdaFruit.

git clone http://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code.git
cd Adafruit-Raspberry-Pi-Python-Code
ls

This will download a collection of scripts and libraries  that will be useful in attaching electronics to our RPi.

Then we need the Python library for actually controlling the GPIO on the RPi.  These commands will install the packages or update the existing packages (if needed).

sudo apt-get install python-dev
sudo apt-get install python-rpi.gpio

 

 

 

 

Leave a Comment :, , , , , more...

Archives

All entries, chronologically...

Our Partners

Please take a minute to visit our partners

Looking for something?

Search the Site

If you can't find what you are looking for, please leave a comment somewhere, subscribe to our feed and hopefully your question will be answered shortly, so please visit again!