Pi Uploader | Copy from SD card to HDD

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:

Python

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

#time setup

importtime

#GPIO setup

importRPi.GPIO asGPIO

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

importos

#setup for datestamping folders

importtime

#Flickr Setup

importflickrapi

api_key=

api_secret=

flickr=flickrapi.FlickrAPI(api_key,api_secret,format='json')

(token,frob)=flickr.get_token_part_one(perms='write')

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

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

defhdd_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

forfilename inos.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)

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

while1:

GPIO.output(ready_LED,True)

GPIO.output(uploading_LED,False)

GPIO.output(stat_LED,False)

ifGPIO.input(in_left):

#print "left"

GPIO.output(flickr_LED,True)

GPIO.output(both_LED,False)

GPIO.output(hdd_LED,False)

elifGPIO.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)

ifGPIO.input(button):

ifGPIO.input(in_left):

flickr_upload()

elifGPIO.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:

#these functions will be filled later, but right now it's just a simple led blink

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

defhdd_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

forpath,subdirs,files inos.walk(sdcard):

forfilename infiles:

number=number+1

listfiles=os.path.join(path,filename)

print'Copying File: '+str(number)+' '+listfiles

command='cp '+listfiles+' '+destination+foldername

printcommand

os.system(command)

print"HDD Upload Completed"

GPIO.output(uploading_LED,False)

GPIO.output(ready_LED,True)

time.sleep(2)

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

while1:

GPIO.output(ready_LED,True)

GPIO.output(uploading_LED,False)

GPIO.output(stat_LED,False)

ifGPIO.input(in_left):

#print "left"

GPIO.output(flickr_LED,True)

GPIO.output(both_LED,False)

GPIO.output(hdd_LED,False)

elifGPIO.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)

ifGPIO.input(button):

ifGPIO.input(in_left):

flickr_upload()

elifGPIO.input(in_right):

hdd_upload()

else:

both_upload()

Hey! This post was written a long time ago, but I'm leaving it up on the off-chance it may help someone, but proceed with caution. It may not be a good idea to blindly integrate this code or work into your project, but instead use it as a starting point.