This program can now handle mounting and unmounting the SD card on /mnt/SD (you will have to make that dir with root privileges)
#time setup
import time
#GPIO setup
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
in_left = 11
GPIO.setup(in_left, GPIO.IN)
in_right = 13
GPIO.setup(in_right, GPIO.IN)
button = 16
GPIO.setup(button, GPIO.IN)
flickr_LED = 3
GPIO.setup(flickr_LED, GPIO.OUT)
both_LED = 5
GPIO.setup(both_LED, GPIO.OUT)
hdd_LED = 7
GPIO.setup(hdd_LED, GPIO.OUT)
uploading_LED = 26
GPIO.setup(uploading_LED, GPIO.OUT)
ready_LED = 24
GPIO.setup(ready_LED, GPIO.OUT)
stat_LED = 22
GPIO.setup(stat_LED, GPIO.OUT)
#for the cp command
import os
import os.path
#setup for datestamping folders
import time
#Flickr Setup
import flickrapi
api_key =
api_secret =
flickr = flickrapi.FlickrAPI(api_key, api_secret, format='json')
(token, frob) = flickr.get_token_part_one(perms='write')
if not token: raw_input("Press ENTER after you authorized this program")
flickr.get_token_part_two((token, frob))
#Storage Locations
sdcard = '/mnt/SD'
destination = '/media/usb0/'
#these functions will be filled later, but right now it's just a simple led blink
def flickr_upload():
print "Uploading Photos To Flickr"
flickr_number = 0
flickr_upload_list = []
for path, subdirs, files in os.walk(sdcard):
for filename in files:
listfiles = os.path.join(path, filename)
upload_response = flickr.upload(filename = listfiles, format='etree')
upload_ID = upload_response.find('photoid').text
flickr_upload_list.insert(flickr_number,upload_ID)
print 'Photo ' + str(flickr_number) + ' uploaded' + ' ID: ' + upload_ID + ' : ' + str(flickr_upload_list[flickr_number])
flickr_number = flickr_number + 1
set_name = 'Uploaded At ' + time.strftime('%m-%d-%y_%H-%M-%S')
print 'Creating Set: ' + set_name
json_string = flickr.photosets_create(title=set_name, primary_photo_id=flickr_upload_list[0])
set_id = json_string.split('"')[5]
print 'Set Created: ' + set_id
print 'Adding Files To list'
for s in flickr_upload_list:
flickr.photosets_addPhoto(photoset_id=set_id, photo_id=s)
print 'Photo: ' + s + ' Added To Set: ' + set_id
print "Flickr Upload Completed"
def hdd_upload():
print "Uploading Photos To the HDD"
GPIO.output(uploading_LED, True)
GPIO.output(ready_LED, False)
print 'Creating Folder'
foldername = time.strftime('%m-%d-%y_%H-%M-%S')
os.system('mkdir ' + destination + foldername)
print 'Folder Created: ' + destination + foldername
hdd_number = 0
for path, subdirs, files in os.walk(sdcard):
for filename in files:
hdd_number = hdd_number + 1
listfiles = os.path.join(path, filename)
print 'Copying File: ' + str(number) + ' ' + listfiles
command = 'cp ' + listfiles + ' ' + destination + foldername
print command
os.system(command)
print "HDD Upload Completed"
GPIO.output(uploading_LED, False)
GPIO.output(ready_LED, True)
time.sleep(2)
def both_upload():
print "Uploading Photos To Flickr and the HDD"
hdd_upload()
flickr_upload()
print "Double Upload Completed"
while 1:
GPIO.output(ready_LED, True)
GPIO.output(uploading_LED, False)
GPIO.output(stat_LED, False)
if GPIO.input(in_left):
#print "left"
GPIO.output(flickr_LED, True)
GPIO.output(both_LED, False)
GPIO.output(hdd_LED, False)
elif GPIO.input(in_right):
#print "right"
GPIO.output(flickr_LED, False)
GPIO.output(both_LED, False)
GPIO.output(hdd_LED, True)
else:
#print "mid"
GPIO.output(flickr_LED, False)
GPIO.output(both_LED, True)
GPIO.output(hdd_LED, False)
if GPIO.input(button):
GPIO.output(uploading_LED, True)
GPIO.output(ready_LED, False)
time.sleep(10)
os.system('mount -t vfat /dev/sda1/ ' + sdcard)
print 'SD Mounted'
if GPIO.input(in_left):
flickr_upload()
time.sleep(10)
os.system('umount -t vfat /dev/sda1/ ' + sdcard)
print 'SD Unounted'
GPIO.output(uploading_LED, False)
GPIO.output(ready_LED, True)
elif GPIO.input(in_right):
hdd_upload()
time.sleep(10)
os.system('umount -t vfat /dev/sda1/ ' + sdcard)
print 'SD Unounted'
GPIO.output(uploading_LED, False)
GPIO.output(ready_LED, True)
else:
both_upload()
time.sleep(10)
os.system('umount -t vfat /dev/sda1/ ' + sdcard)
print 'SD Unounted'
GPIO.output(uploading_LED, False)
GPIO.output(ready_LED, True)