Pi Uploader | Copy from SD card to HDD

Here’s a video!

So half of the core functionality of the device is done! It’s a pretty simple solution to walk through all of the files in the directory. I actually might check if having sub-folders will mess the process up and it probably will, if that’s the case I’ll try and publish a fix for later tonight.

Anyway’s here’s the source:

#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

#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))

#these functions will be filled later, but right now it's just a simple led blink
def flickr_upload():
	print "Uploading Photos To Flickr"
	GPIO.output(uploading_LED, True)
	GPIO.output(ready_LED, False)

	print "Flickr Upload Completed"
	GPIO.output(uploading_LED, False)
	GPIO.output(ready_LED, True)

def hdd_upload():
	print "Uploading Photos To the HDD"
	GPIO.output(uploading_LED, True)
	GPIO.output(ready_LED, False)

	folder = time.strftime('%m-%d-%Y_%H-%M-%S')

	print "Creating Directory for Copy"
	os.system('mkdir ' + '/media/usb0/' + folder)
	print 'Folder Created: ' + folder

	for filename in os.listdir('/media/usb1'):
		GPIO.output(stat_LED, True)
		print 'Copying File: ' + filename
		GPIO.output(stat_LED, False)
		os.system('cp /media/usb1/' + filename + ' /media/usb0/' + folder + '/')

	print "HDD Upload Completed"
	GPIO.output(uploading_LED, False)
	GPIO.output(ready_LED, True)

def both_upload():
	print "Uploading Photos To Flickr and the HDD"
	GPIO.output(uploading_LED, True)
	GPIO.output(ready_LED, False)
	hdd_upload()
	flickr_upload()
	print "Double Upload Completed"
	GPIO.output(uploading_LED, False)
	GPIO.output(ready_LED, True)

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):

		if GPIO.input(in_left):
			flickr_upload()
		elif GPIO.input(in_right):
			hdd_upload()
		else:
			both_upload()

EDIT: So the above code won’t walk through sub-folders on the SD card, here’s an updated source:

#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 = '2bfb7e8be01e5f9f37e2e140076c6efa'
api_secret = 'fb4295ce55e7e0dd'
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))

#test = flickr.photosets_create(title="test", primary_photo_id="9253811236")

#print test

sdcard = '/media/usb0/'
destination = '/media/usb1/'

#these functions will be filled later, but right now it's just a simple led blink
def flickr_upload():
	print "Uploading Photos To Flickr"
	GPIO.output(uploading_LED, True)
	GPIO.output(ready_LED, False)

	print "Flickr Upload Completed"
	GPIO.output(uploading_LED, False)
	GPIO.output(ready_LED, True)

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

	number = 0

	for path, subdirs, files in os.walk(sdcard):
		for filename in files:
			number = 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"
	GPIO.output(uploading_LED, True)
	GPIO.output(ready_LED, False)
	hdd_upload()
	flickr_upload()
	print "Double Upload Completed"
	GPIO.output(uploading_LED, False)
	GPIO.output(ready_LED, True)

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):

		if GPIO.input(in_left):
			flickr_upload()
		elif GPIO.input(in_right):
			hdd_upload()
		else:
			both_upload()

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.