CardToCloud: The Quick Photo Uploader

A device that will automatically upload photos and videos from a SD card directly into connect cloud storage.

Similar projects worth following
I am a hobby photographer who uses a simple point and shoot first edition sony RX100. This camera lacks wifi capabilities so in order for me to upload my photos to google drive I have to remove the sd card, find a computer connected to the internet, and then go through and manually find the photos and upload them. Not ideal when traveling and it also uses up memory on my computer which can last several hours when uploading lots of photos.

The goal here is to simplify this process. I want to have an external device that I can carry around with me while traveling. I will use my phone to get the device connected to wifi, plug in my SD card, press go, and then it should be set it and forget it!

All files located in GitHub where I will track all software related activity.

Supported Hardware:

Linkit Smart 7688

Supported Cloud Service:

Google Drive

  • Major Update: Code simplified, now running with button press, added LED indicator.

    BrettBuilds02/13/2017 at 23:13 0 comments

    The code has been simplified, now everything is contained in one single python script now named app.js (remember to update the file rc.local in /etc with the new app name to run at startup).

    New Hardware setup:

    • I created a proto board with a push button and LED. The upload sequence is now initiated via a button press. The LED will blink when in idle mode and will remain solid during the upload process. The LED and button are wired in with a 1k and 10k resistor.

    Major test completed 2/13/17: 120 photos upload completed! - Average upload speed per photo: 15 sec.

    Next Steps:

    • Create an enclosure to take this out for some field testing (hiking this weekend..)
      • The enclosure needs to have some sort of cooling, most likely a small fan because the linkit does get pretty hot. May also consider a small heat sink.
      • I am planning on keep the power external and using my mobile lipo battery powering over USB. Simple and works well.

  • Make Program Run at Boot

    BrettBuilds01/13/2017 at 00:44 0 comments

    Followed these directions and made the button run at startup

    Now the button program starts at boot up and a button press with run the uploader script. Woohoo!

    This was really all I needed to do to get it "un-tethered" from the computer because I now have the button to initiate the script. Now time to get this running off battery and ready to go truely mobile.

  • Run Script with Button Press

    BrettBuilds01/13/2017 at 00:27 0 comments

    This function is crucial in order for the user to determine when the program is run. Followed this schematic minus the LED portion:

    Here is the code, I put the function in the root directory:

    import mraa
    import time
    import os
    button = mraa.Gpio(20)
    #set GPIO 20 to input mode
    while True:
    	print "P8 state:",
    	if ( == 1):
    		os.system("python root/")

    Currently running script in the top level with python root/

    Successfully monitors button with 1 sec scans then runs the upload script when the button is pressed. The plan is to now make this program run at start up so the device is automatically looking for that button press to start the upload.

  • Test 1/11/17: First Successful Camera -> Drive

    BrettBuilds01/12/2017 at 01:58 0 comments

    It works! Been in the works for some time now but it is to a point worth mentioning. Successfully:

    - Took 3 photos with my Sony RX100 (add had a random stock photo of tulips in the mix)

    - Inserted SD card, ran program

    - The photos uploaded to my google drive without any intermediate steps!

    Next tasks:

    • Figure out the smoothest (hopefully easiest) way to connect the device to a wifi network via my phone. Delete all existing authorizations and go through the entire setup process using only my phone
    • Get the software setup to run with the push of a button
    • Get mobile hardware setup with battery, charger/regulator, and enclosure.

View all 4 project logs

Enjoy this project?



Robert wrote 03/12/2017 at 21:25 point

Hi Brettbuilds,

This is very cool! I also bought a Linkit 7866 board and I am trying to make it stay online more reliably. The concept of going back to AP mode if it can't find a network that it knows is a really good idea. I tried to do it myself but it isn't working for me. I took a look at your code and tried to just keep the "auto AP" mode but now my board won't allow you to log in from the web UI, even after I reset it and re-uploaded the firmware and bootloader. 

I have two more boards, so I want to try again. My simplified code (mostly your code) is here:

It doesn't seem to put the board back into AP mode, and it also messed the board up a lot (my fault for executing scripts I don't fully understand). Any thoughts? Thanks!

  Are you sure? yes | no

BrettBuilds wrote 03/20/2017 at 03:46 point

Sorry just seeing your comment Robert. Let me look into it, I haven't run into this issue but it is possible that the board doesn't like how I am sending it into AP mode. 

  Are you sure? yes | no

gareth wrote 02/14/2017 at 01:55 point

Looks like a neat little project. 

I have a TP-Link WR703 'travel router' running openwrt which has some GPIO's available and a USB port; hook up a button and a script, connect my SD card to the USB, and upload is done..!

I shall dig in to this further..

Thanks for the inspiration

  Are you sure? yes | no

BrettBuilds wrote 02/14/2017 at 12:26 point

Hey Gareth, yeah seems like it should be do able. You will want to make sure to update to mount directory in this bit of code: os.system("mount /dev/mmcblk0p1 /mnt") 

If you run into any issues let me know also if you get it working with any other cloud storage please share.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates