ArduiPi Getting Started

Welcome to the ArduiPi Getting Started guide, if you don’t know what is a ArduiPi board, take a look at the project presentation here.

Thank you for using a ArduiPi board, I hope this board will fit all your needs. It has been designed to provide a lot of features, but with so much features, you need to configure the board to enable/disable them.

Edit 03/17/2014 : Modified to be conform to the new ArduiPi board Version 1.1 (more details here)

Let start the configuration of the board.


ArduiPi has three on board leds, by default they are not connected and you need to decide where to connect each dependings on the functions you need. The LED are named LED1 (blue), LED2 (green) and LED3 (red) . The according LED are located on the following area of the ArduiPi board

ArduiPi LED Position

ArduiPi LED Position

and the LED schematic is as follow:

ArduiPi Led Schematic

ArduiPi Led Schematic

As you can see LED are connected “classic” way, this means to lit them you need to set the GPIO or Arduino Port value to 1. Each LED can be driven by 2 ports depending on PLED Pad position. So you need to choose the one you want.

To be able to lit a LED you need to choose on what pin it need to be connected. To do so you need to put solder on the according LED pad to select which pin will drive the LED. The PAD are located on the bottom of the board, near the External Power connector

ArduiPi Led Pad Configuration

ArduiPi LED Pad Configuration

Here the available options :

  • LED 1 is dedicated to Arduino side, it can be connected to D13 (default official Arduino LED setting) or D2. Edit 03/17/2014 : ArduiPi board V1.1 have D13 connection done by default
  • LED 2 is dedicated to board Power, it can be connected to VDD or Raspberry PI 5V. If connected to VDD, the LED will be lighted as soon as Arduino is powered even if it is powered by external power, USB FTDI power, or Plugged into Raspberry PI (and PI powered of course). If connected to 5V-PI the LED will be lighted only when ArduiPi board is plugged into Raspberry PI AND PI is powered. Edit 03/17/2014 : ArduiPi board V1.1 have VDD connection done by default
  • LED 3 is dedicated to Raspberry PI, it can be connected to GPIO4 or GPIO28 (GPIO28 is available only to Raspberry PI revision 2). Edit 03/17/2014 : ArduiPi board V1.1 have GPIO4 connection done by default

In the previous picture, if you put some solder on the PAD rounded by the red square, the LED 1 will work as classic Arduino (blink sample will work), LED 2 will indicate when there is power to Arduino and LED 3 will be connected to Raspberry PI GPIO 28

 Powering the ArduiPi board

ArduiPi board can be used also as an classic Arduino board, this means that you do not need to plug it on a Raspberry PI (even if it as been designed for). For this you can power the board in differents ways.

  • Powering With External Power

When you power the board with external power you can plug a external DC 7V to 16V into the corresponding barrel connector. The external connector is located on ArduiPi board at the following place :

ArduiPi External Power

ArduiPi External Power

When you use external power, the two on board regulators on ArduiPi board are doing power conversion. One 5V and one 3V3, named respectivly 5V-EXT and 3V3-EXT on the following schematic :

ArduiPi Power Schematic

ArduiPi Power Schematic

When you use external Power it is not mandatory to plug ArduiPi board on Raspberry Pi, you can use the ArduiPi board as stand alone board. But, you need to tell ArduiPi board that you are using external power. This is done by selecting the on board switch. You need to position the switch PI_VCC_EXT (bottom switch of the picture below) to EXT position.

ArduiPi External Power Selection Switch

ArduiPi External Power Selection Switch

The top switch is used to select the value of the power that is provided to the AruiPi board. In the example of above picture, the power is set to 5V.

Note that even selecting 5V on the first switch the power applied to NRF24L01 connector is always 3V3, this is to protect the NRF24L01 chip that does not support more than 3.6V. So you don’t need to bother with level translation for NRF24L01 or Breakout board of the same type.

  • Powering with FTDI Cable

Another way to power AdduiPi board is a classic FTDI Cable or FTDI Adapter. But for this to work, you need to solder a jumper (or close directly with a strap wire) on JVDD as follow, and put a jumper on it.

ArduiPi Power with FTDI

ArduiPi Power with FTDI

Once jumper in place, as USB cable power is connected to 5V-EXT signal, you need to position the switch PI_VCC_EXT to EXT position like when you power the board with external power.

Remember that FTDI usb cable can not provide too much current, so be carefull if you have a lot of devices on ArduiPi board, the power provided by the cable may not be enougth.

The FTDI cable need then to be connected on J1 connector of ArduiPi board. You can use any FTDI compatible cable such as this one, this one (shop), or this one. Take care of way of connection (it will not destroy anything if you reverse the connector). Green means DTR signal (connected to Arduino Reset line for Autoreset feature) the two first pins of J1 connector are ground.

  • Powering from Raspberry PI

The last way to provide power is to use the Raspberry PI power. Of course, to be able to achieve this, the ArduiPi board need to be plugged onto Raspberry PI

Selecting power from PI is done by selecting the on board switch. You need to position the switch PI_VCC_EXT (bottom switch of the picture below) to PI position

ArduiPi Power From PI

ArduiPi Power From PI

Take care that as previous case, depending on how much devices are connected to ArduiPi board, the PI power need to be adequate and may not be enought. If not, the Raspberry PI could not even be started. I had this case during the test phase when using grove OLED. So if PI is not starting, choose a good Power for it (1A minimal) and if it does not still work, power the ArduiPi board with external Power.

The top switch is used to select the value of the power that is provided to the AruiPi board. In the example of above picture, the power is set to 5V.

Uploading Sketches to Arduino

The Arduino on ArduiPi board is Uno compatible, this means that to upload sketch on it, you need to select the board Arduino Uno into Arduino IDE

  • With FTDI Cable from PI or other computer

Connect a FDDI cable (from PI USB or another USB computer) to J1 connector of ArduiPi board. For this to work, ArduiPi board should be powered (see how to at previous step above). If you program from another computer, this is the only way to burn sketch on Arduino (except using ICSP but that’s not the deal of the board).

This method is fine and quick, but if your IDE is located on your PI you will need one USB port to connect FTDI cable, which took 50% of USB ports of PI (since it has only 2). So the next method could save you one USB port and one FTDI cable.

  • Directly from Raspberry using Raspberry PI integrated UART

Raspberry PI as a onboard serial port used by the console, you can get this port for you own and to program the Arduino. For this, your Arduino IDE should be on your Pi (or you will need to transfer generated HEX file from external Arduino IDE).

To enable Raspberry PI onboard serial UART you need to do two things:

  1. Configure the serial port of Raspberry PI to be available to user. Use this guide to do this
  2. connect RX and TX lines from PI to Arduino. For this you just need to solder wire, or jumper (strongly recommended, see below why) on JTXD and JRXD as follow..
ArduiPi connect Arduino to Raspberry Serial

ArduiPi connect Arduino to Raspberry Serial

The connector is located on top left of the board. Once this is done, everything is not yet ready.

Pay attention doing this, because after it’s done, if you still want to use FTDI cable to program Arduino, you will need to remove the 2 connections (because if not, RX/TX from FTDI will conflict with RX/RX from PI), that is why I strongly suggest to put jumpers on JTXD and JRXD instead of soldering wires, it’s then easier/quicker to put or remove them.

/dev/ttyAMA0 is not reconized by Arduino IDE, so we will link it like a real serial device. Connect to your Pi and issue the following command.

This will create a “real” serial device /dev/ttyS0

Edit : This command seems not be be “reboot persistent” (thanks Bob for the information), so lost after a reboot. If you want to keep ttyS0 after reboot, just add the following line to /etc/rc.local file (just before the line “exit 0”)

A more “clean” way would be instead creating a udev rule file, for example: create a file named 88-serials.rules into folder /etc/udev/rules.d/ containing the following code

with both described solutions, device /dev/ttyS0 will be there after reboot

Now you can use the  /dev/ttyS0 as serial into Arduino IDE. But, this method does not Auto-Reset the Arduino to be ready to auto upload Firmware, this means that you will need to use “old school” sync with manual push of reset button from ArduiPi board when uploading sketch from Arduino IDE.

But, ArduiPi is a so featured board that you can use a PI GPIO connected to DTR signal to send reset to Arduino. This permit like with a FTDI cable, to compile and upload sketch directly from Raspberry PI Arduino IDE with no manual step. To do this, you need to connect DTR pin of FTDI connector to a GPIO port of Raspberry PI. I choosed GPIO18 but you can change as you want the GPIO port used.

ArduiPi Enabling Arduino Auto-Reset with GPIO

ArduiPi Enabling Arduino Auto-Reset with GPIO

The picture above show you what is needeed to enable Auto-Reset Feature. Edit 03/17/2014 : ArduiPi board V1.1 have this connection done by default, no need to wire. If you want to remove this feature you will need to cut the AUTORST trace PAD on ArduiPi V1.1 board.

Doing hardware wiring is not enought, you need to do software patching because the tool used to program the Arduino (avrdude) can’t drive DTR pin of the PI serial port to Reset Arduino but Raspberry PI integrated UART does not have this DTR signal available (this is why we need to use one GPIO pin). So we need to tell the tool that a GPIO is used to drive DTR (reset) signal.

For this you need to install Python Raspbery Pi GPIO package and some custom scripts and avrdude if you do not have Arduino IDE installed (issuing a apt-get install avrdude).

First we rename original avrdude program to avrdude-original, next install a new python script named avrdude-autoreset and then create a link named avrdude to point on avrdude-autoreset. This new script will launch another script called autoreset which does the reset Arduino and then launch the original avrdude program just after the DTR (reset) line has been pushed low by the GPIO 18.

You can do all of this by doing the following commands when connected to Raspberry PI (can be done also with SSH)

Edit 04/04/2014 : Seems executing the command apt-get install python-rpi.gpio   does not install the latest version of rpi.gpio and thus can fire up some warnings when executing autoreset (but still works) so the best solution is using easy_install rpi-gpio . I updated the following procedure to use this command.

PS : If you want to change the GPIO line used you need to change the line “pin=12” in autoreset python script. The value 12 is the Raspberry PI connector P1 pin number in our case and not the GPIO name, take care !. You can see pins definition here :

Most of this stuff about autoreset was grabbed from Internet, I do not remember where but I’d like to thanks the original author of theese scripts which I’ve tweaked.

Now you can upload sktech directly from Arduino IDE. Of course if you have any hex file compiled on another computer (like me, I do not have Arduino IDE on Raspberry, I only use SSH on py PI), you just need to copy your hex file to Raspberry and launch the avrdude command line like the following :

Change the baudrate to the one used by your bootloader, here a specific example card is set to 38400 kbps but in case of ArduiPi board, it should be 115200 (UNO bootloader) instead of 38400.

And here the following result of avrdude

I also included a reset script to reset Arduino without having to program it, it’s called reset-arduino. You can launch it by the following command (but you need to have installed Wiring Pi library for this one)

Do not hesitate to look at this script (/usr/bin/reset-arduino) , you can also launch a serial terminal just after the reset (that is what I do every time to check all is fine) if you want to see serial.Print event out from Arduino.

To be continued

This post will be updated soon with more documentation about all ArduiPi features. Drop me a comment if you need to do something that is not yet documented, I will write documentation as soon as you will need it. I’m really missing time on the moment due to a huge optimized project with ArduiLed board.





  1. Un grand merci pour cette article qui me fait enfin pleinement profiter de cette carte que je trouve de plus en plus intéressante…
    J’ai en fin pu intégrer mon OLED 128×32 de Adafruit I2C et compris les soudures de parametrages.
    De bonnes heures de plaisir,

    • Bonjour Philippe,

      Merci pour l’information, çà fait toujours plaisir de voir que cette carte intéresse des personnes.

      Pour information, le prochain batch incorporera deux nouvelles fonctionnalités, un bouton pour pouvoir éteindre le Rasperry PI proprement ainsi qu’une liaison directe entre une GPIO et le reset de l’Arduino afin de pouvoir télé déverser les sketchs depuis le Raspberry sans passer par un cable FTDI

      Bonne continuation.


  2. Hi Charles
    I think you need to test out your code for using the Arudino IDE.
    I needed to copy avrdude-autoreset before could link it and I needed to run the program as su or got permission denied errors. It still didn’t work, but got further along.

    • Hi Richard,

      I applied the procedure in the post on 2 others PI without any problem (except the fact you’re right, ln command should be the last one, I corrected it but not on my blog, thanks for the head up, now it’s corrected).
      I do not launch the graphical IDE but I program my arduino from command line with avrdude (with autoreset enabled) and the HEX file generated on my PC (that I copy to the PI to be able to flash it).
      Could you please describe where in the procedure you encounter the problem ?
      And yes the Arduino IDE need to be launched as root, this is due to the conception of the IDE and Java.

  3. Hi Charles
    I soldered in the pins so can connect DRT to 18 on J12 and ran though your instructions. Was having a number of errors, so created a new SD card and re-setup everything. Now all works until the Arudino IDE tries to upload to the board and I get avrdude-original: stk500_recv(): programmer is not responding.
    I get the same error if I connect directly to 18 on J13, so don’t think it is a problem with my soldering.
    I will see if I can just directly upload a hex file
    Right now a bit busy so won’t get to it for a while

  4. Hi Charles. I’m having the same problem as him. Could you please help?

    • Eddie,
      Of course, would you please describe the problem you have ? By the way, which revision of the ArduiPi board do you have ? is it the one with 2 switches buttons (V1.1) or the old one ?

  5. Charles,
    I seems to have the same issue (ser_recv(): programmer is not responding)

    I have RPi v2: ArduiPi 1.1

    I have some further information: when I write 0 to a pi gpio pin, it only falls to about 2.4v above ground, not to ground (ArduiPi at 5v); surely it should be pulled to 0v? If I write 1 to the same pin, it rises to just under 5v, as expected.

    If I check this at P1, rather than after the buffers on ArduiPi, then I do see it pulled to 0v…

    • Hi Carl,
      The buffer translator are functionning in a “auto detect” mode which allow then to define in which way they need to translate (ie Out Pi -> GPIO connector of ArduiPi or In Pi <- GPIO connector of ArduiPi) I think if the GPIO connector pin of Arduipui (so after level shifting) is left float it can but the translator in a undefined state and then give you wrong results (just a assumption). Could you try the same test with a Pull up or Pull Down from GPIO connector Of ArduiPi (to 0V or 5V whatever) and check if the output goes then from 0 to 5V and vice-versa ? One more question from uploading code to Arduino, I think you've connected PI RX/TX with Arduino TX/RX with jumper as indicated in the Guide ? If you manually reset the Arduino board (with the reset button) just before uploading, does the upload start (I know it's not conventionnal and not easy to sync but it's just to see if the problem you have is coming from auto-reset or not) Also do you succeed to program it when using FTDI cable ? I've encountered similar problem when trying to reset Arduino on a TP Link router, the C1 of for auto-reset Arduino with a GPIO that has pulldown (but so far I never had any problem with ArduiPi board, that I program from command line with avrdude (not from the Arduino Environement). I'm doing this every day without any problem. Another test coud be : If you want only to upload to arduino ONLY with Raspberry you could try removing C1 and put solder or 0 Ohm resistor at his place (or just short the 2 pads) to see if it is better (but in this case you will not be able anymore to program with FDTI cable (except manually reset Arduino Board before the upload) Just let me know about you test Charles

  6. Hi, Charles,
    did some more experimentation this evening, trying to upload code to ArduiPi separated from RPi, powered externally, and hooked to the Pi only via powered USB hub and a USB/ftdi board – couldn’t get anything to upload like this, either…

    Close watching of the telltale LEDS that I’ve got hooked up to GPIO lines shows that they change brightness in 2 steps, rather than a clean on/off, (which is what I see if I hook them directly to PiGPIO) and as I noted yesterday, they don’t actually reach full brightness, nor go off completely, either – could this be a power issue with the level converters?

    Look forward to getting ArduiPi working properly – I’ve got several tasks ready for it 🙂


    • Carl,
      That’s a good test, If I understand well, the ArduiPi board if out of the PI in standalone mode, then you have a powered USB hub connected to the PI USB port. On this hub you plugged a USB/FTDI adapter going to FTDI connector of ArduiPi board, corrrect ?
      If so, ArduiPi board is only powered from FTDI Cable but for this to work you need to close JVDD switch according the tutorial (to bring power to ArduiPi board from FTDI).
      And in this configuration, you’re trying to upload sketch from Arduino IDE running on PI is that correct ?

      What type of led do you connect and what value of resistor you put in serial with the LED ?


  7. Hi, Charles,
    sorry not to have responded sooner, but I’ve tried a few more experiments, and conclude that I’ve probably got the Pi doing too much – I can successfully upload new sketches from my PC laptop via the same USB/TTL connection, whereas even serial monitor on the Pi is inconsistent.

    So, I can now concentrate on the telescope focuser side of things, and the sensors on the Pi.

    Thanks for your assistance and the ArduPi design.

    I’ll have to get another one, to play with

  8. do you know of any issues with the new Pi B+?
    i upgraded and now cannot seem to upload.


    • Simon,
      You just learned me this new model, good to know and fine.
      I do not have this model on hand but take a quick tour.
      You arduipi board was working for upload on your old pi and not on the new one. Is that correct ?
      Autoreset feature for upload is based on pyhon rpi gpio, i just saw there is an update for model B+ are you using the latest version ?

  9. Hi Charles,
    I’ve done a little more work on it. First, because of the additional USB ports, the underside of the Arduipi comes into contact with the Pi+. So I simply put a piece of electrical insulating tape across the top of the USB ports.
    2nd, I actually have two Arduipi boards and I can confirm the same behavior on both of them:
    I bought a USB to FTDI board, and took the Arduipi off the Pi+. I could then successfully up load sketches from my computer. I tried again via the Pi+ (the GPIO pins – not the FTDI connection) but still no luck.
    On a side note, when using the FTDI connection it didn’t matter whether the RX/TX pins had jumpers in place or not. I could still upload successfully. But as I said, the Arduipi was not connected to the Pi+ so maybe that explains the effect.
    Finally, because of the additional USB ports, the Arduipi board does not fit perfectly flat on top of the Pi+. However, the board is only at a slight angle and connections still look good.

    • Hi Simon,
      Good point to note that it’s good to protect the top of the new USB port of model B+, if not you risk to have electrical damages on both boards in worst case.
      When you took ArduiPi board off the Pi, you’re right, you can upload whatever are the RX/TX jumper. As the board is not plugged onto Pi, the UART of the PI does not interfere with serial of Arduino, that is why it’s working 😉

      One idea to try to walk through, would you mind plug the ArduiPi 1.1 board onto Pi B+ and try to upload sketch from Arduino IDE (or other) and then, just before the IDE says that it will start upload press immediatly the reset button on ArduiPi board (try several time, it’s not easy to be in sync).
      I know it’s hazardous and weird to have upload like that but it’s just to determine if the problem on B+ is coming from the Serial port or the GPIO driving the autoreset feature of the Arduino.
      As I do not have a B+ model I asked Seeed to test on this model (B+) the next batch of board coming from factory (should be there in 10 days)
      Let me know your testing with “manual reset” so I can try to search the issue.


  10. Sorry, I forgot to add, I’m running the latest versions of all the software and firmware

Comments on this topic in community Forums.