A Raspberry Pi powered bulk Arduino programmer #piday #raspberrypi @Raspberry_Pi


Via Make.

Whilst building lots of robots to fulfill a recent Kickstarter project, I had the need to program a thousand or so Arduinos, which would take forever if I were to program them all individually. Situations like this are the perfect opportunity to work on those meta projects which can be just as much fun to build as the product itself. In this case I needed something that would:

  • program a number of Arduinos in parallel
  • work without a screen
  • let me know if it had successfully programmed or not
  • be quick and easy to use

Pogo pins are a great way of making a quick temporary electrical connection to a PCB so I decided on using those pretty quickly. I used a little laser cut toggle to hold the Arduino in place. The user interface needed to be kept pretty simple so I settled on some great looking arcade-style buttons that also light up with an LED inside. I think they’re intended for pimping out” boy racer cars” but work pretty well on an Arduino programmer too. I then laser cut a frame for all of these to sit in so that you could quickly slip the Arduino in to place and press the button. When it’s programming the button flashes and when it’s done it stays on if it was successful and goes off if it failed.

I connected up a USB to serial converter to each set of pogo pins and then plugged all of these into a USB hub. To drive the user interface I made a simple little sketch for the Arduino, which would allow external control of the LEDs and emit events when the buttons were pressed. This also plugged into the USB hub which then plugged into the Raspberry Pi.

I wrote a simple piece of software in Node.js, which is great for this kind of parallel event-driven workload. All this does is communicate with the UI Arduino and when a button is pressed it will execute avrdude in a sub-process on the correct serial port. It then tells the UI Arduino to flash the correct LED and then depending on the return code from this external process it will indicate success or failure.

With all of this in place, all I needed to do was tell it to boot at runtime, which I did by putting it into the crontab. The only complex thing to work around was making sure that the USB ports came up with the same ID each time. Fortunately in Linux this is possible by adding a udev script that generates a symlink depending on where the device is on the USB bus. This means that after reboots the USB to serial converters kept the same name.

Because they all operate independently of each other, I’m able to very quickly put one in place, press the button and start putting the next in place. By the time I’ve reached the fifth Arduino, the first has finished. Because they are being done in parallel, it only takes a few seconds to program each Arduino, rather than the 30 or so it would normally take for each one.

Read more.


998Each Friday is PiDay here at Adafruit! Be sure to check out our posts, tutorials and new Raspberry Pi related products. Adafruit has the largest and best selection of Raspberry Pi accessories and all the code & tutorials to get you up and running in no time!

Adafruit publishes a wide range of writing and video content, including interviews and reporting on the maker market and the wider technology world. Our standards page is intended as a guide to best practices that Adafruit uses, as well as an outline of the ethical standards Adafruit aspires to. While Adafruit is not an independent journalistic institution, Adafruit strives to be a fair, informative, and positive voice within the community – check it out here: adafruit.com/editorialstandards

Join Adafruit on Mastodon

Adafruit is on Mastodon, join in! adafruit.com/mastodon

Stop breadboarding and soldering – start making immediately! Adafruit’s Circuit Playground is jam-packed with LEDs, sensors, buttons, alligator clip pads and more. Build projects with Circuit Playground in a few minutes with the drag-and-drop MakeCode programming site, learn computer science using the CS Discoveries class on code.org, jump into CircuitPython to learn Python and hardware together, TinyGO, or even use the Arduino IDE. Circuit Playground Express is the newest and best Circuit Playground board, with support for CircuitPython, MakeCode, and Arduino. It has a powerful processor, 10 NeoPixels, mini speaker, InfraRed receive and transmit, two buttons, a switch, 14 alligator clip pads, and lots of sensors: capacitive touch, IR proximity, temperature, light, motion and sound. A whole wide world of electronics and coding is waiting for you, and it fits in the palm of your hand.

Have an amazing project to share? The Electronics Show and Tell is every Wednesday at 7pm ET! To join, head over to YouTube and check out the show’s live chat – we’ll post the link there.

Join us every Wednesday night at 8pm ET for Ask an Engineer!

Join over 36,000+ makers on Adafruit’s Discord channels and be part of the community! http://adafru.it/discord

CircuitPython – The easiest way to program microcontrollers – CircuitPython.org

Maker Business — “Packaging” chips in the US

Wearables — Enclosures help fight body humidity in costumes

Electronics — Transformers: More than meets the eye!

Python for Microcontrollers — Python on Microcontrollers Newsletter: Silicon Labs introduces CircuitPython support, and more! #CircuitPython #Python #micropython @ThePSF @Raspberry_Pi

Adafruit IoT Monthly — Guardian Robot, Weather-wise Umbrella Stand, and more!

Microsoft MakeCode — MakeCode Thank You!

EYE on NPI — Maxim’s Himalaya uSLIC Step-Down Power Module #EyeOnNPI @maximintegrated @digikey

New Products – Adafruit Industries – Makers, hackers, artists, designers and engineers! — #NewProds 7/19/23 Feat. Adafruit Matrix Portal S3 CircuitPython Powered Internet Display!

Get the only spam-free daily newsletter about wearables, running a "maker business", electronic tips and more! Subscribe at AdafruitDaily.com !

No Comments

No comments yet.

Sorry, the comment form is closed at this time.