ArduiPi, the Shield that brings Arduino to Raspberry Pi

ArduiPi is a shield for Raspberry Pi that brings Arduino low level extented I/O to Raspberry Pi This project is now finished and the ArduiPi board available in Seeedstudio shop. Edit 03/17/2014 : New revision of ArduiPi board is now available, version is V1.1. The changes are :

  • Added Auto-Reset Feature of Arduino from Raspberry Pi (connecting Pi GPIO 18 to FDTI DTR)
  • Added a on board switch going to Pi GPIO 17 (mainly to be able to do clean shutdown of Pi )
  • defaulted some PAD wire avoiding doing it to get started with the ArduiPi board.

Here are pictures of new board Version 1.1  :

Arduipi V1.1 back

Arduipi V1.1 back

Pictures of Version 1.0 still available (front, back)

Schematic of ArduiPi V1.1 (direct link) :

ArduiPi V1.1 Schematic

ArduiPi V1.1 Schematic

Old revision schematic (V0.9d aka V1.0) is available here

Why another shield for Raspberry or another Arduino board ?

Well, quite simple, Arduino is pretty cool but as soon you want to connect it to network, shield are quite expensive and web server will take lot of space into your Arduino and taking some functions off (such as SPI). That why Raspberry come, it cost less than a Arduino official shield and can do lot high level thing such as web server, database, home automation, … But the drawback is that is I/O ports are quite complex to use and not so efficient than a Arduino. That said, this is why I think Raspberry and Arduino could get married :-), let then talk together and assign task to the most competitive one.

What are the main capabilities of this shield board ?

  • Use of traditional 28 pins ATmel Arduino chip so anyone can change it.
  • Designed to be opened and fulfill major uses, letting you to choose the fonctions you need and remove the other ones.
  • Plenty of options that can be setup by solder pad or by switches on board
  • Source code and hardware is open and available on github this means that you will be able to change anything to your needs
  • You will be able to host lighttpd (ot other) web server on Raspberry Pi with API to control arduino I/O
  • ArduiPi program source code that can drive Arduino I/O is provided and also the Arduino Firmware
  • Open protocol between Raspberry And Arduino.
  • Compatible with Raspberry Pi Revision 2 boards.

Wow, I get excited ? Could you talk about the functionnalities ?

  • Power the Arduino side with Raspberry power or with external power.
  • Selectable Arduino side power with 5V or 3.3V (works if powered by Raspberry or by external power).
  • FTDI cable connector to be able to program AVR chip independently leaving RX/TX of arduino and Raspberry free for other use.
  • ICSP connector.
  • Power level shifter between Pi side and Arduino side for I2C, SPI, Serial, and all Raspberry GPIO pins even for the PI board Revision 2 four new GPIO
  • 1-Wire (DS2482) IC setup on the board providing fully OWFS support provided by I2C bus (can be used by Pi and/or Arduino)
  • Soldering pad I2C between Arduino and Raspberry (Arduino will work as a I2C slave from Raspberry)
  • Soldering pad SPI between Arduino and Raspberry (Arduino will work as a SPI slave from Raspberry)
  • Option to connect the Arduino to Raspberry Pi Serial to do async communication if needed
  • Availability to use the French dedicated teleinformation to send Pi electriciy information issued the the main power meter (using serial RX)
  • Grove connector on board for I2C and Serial connection for Raspberry and Arduino
  • Connector to add Adafruit I2C or SPI Oled breakout board that can be driven by Arduino or Raspberry with free open driver
  • Connectors to add NRF24L01 Wireless breakout board
  • Connectors for the 1-Wire Bus
  • Connectors for using PWM devices (switchable with on board power or external power)
  • 2 free pins available on level shifter chip, this mean that is you have a device that need level conservion between 3V3 and 5V in both way, you have two pins left and accessible for that
  • Edit 03/17/2014 : New V1.1 Auto-reset feature using Pi GPIO 18
  • Edit 03/17/2014 : New V1.1 Added switch on ArduiPi board connected to Pi GPIO 17 (mainly to be able to clean shutdown the Pi)

References, Articles and Samples

17 thoughts on “ArduiPi, the Shield that brings Arduino to Raspberry Pi

  1. Bonjour Jean-Marie,

    En fait la carte sera capable de relever les données du compteur via la sortie Téléinfo (liaison série en gros), je ne sais pas si les compteurs TIC en disposent. Après la carte sera suffisamment évolutive si les techniques de relevés sont publiées et publiques rien ne devrait empêcher de pouvoir ajouter un shield dédié que ce soit sur la partie Arduino ou Raspberry.

    Charles

  2. Bonjour J’ai acheté une carte ArduiPi (depuis quelque
    temps^^), je suis en train de la sortir de son emballage pour
    l’essayer. J’ai un Rapberry Pi B model 1.0B, est-il totalement
    incompatible ? Y a til des risques ? ou n’as tu pas pu tester ta
    carte sur ce modele de Pi faute d’en avoir ? Il me semble que des
    GPIO ont changé de place entre les 2 versions… Mes besoin pour
    commencer, c’est la teleinfo et du 1wire. Sinon autre question , le
    petit selecteur qui permet de choisir la tension d’alim pour VDD :
    3.3V/5V, dans quels cas utilise ton le 3.3V ou le 5V ? Merci
    d’avance et bonne fetes de fin d’année.

    • Bonjour,

      Tout d’abord merci de ton interet pour l’ArduiPi.
      La carte ArduiPi est totalement compatible avec tous les modèles de Raspberry, aucun problème et aucun risque.
      Effectivement certaines GPIO ont changées entre les deux modèles nottement le bus i2c, mais ceci est facilement changeable puisqu’en version 1 pour voir les périphériques i2c il faut passer la commande suivante

      sudo i2cdetect -y 0

      alors qu’en revision 2 c’est

      sudo i2cdetect -y 1

      Si tu utilizes les exemples sur mon github tu peux voir que concernant l’i2c le programme detecte automatiquement la version du PI pour addresser le bon bus i2c
      Pour la téléinfo et le 1-wire c’est assez facile, il faut :

        – Positioner le switch d’alimentation PI_VCC_EXT sur la position PI si tu ne souhaites pas utiliser d’alimentation externe mais celle fournie par le PI
        – pour le 1wire j’utilise la suite owfs sur un PI revision 1, donc afin de voir si le contrôleur 1wire intégré à l’ArduiPi est bien vu il suffit de passer la commande suivante

        sudo i2cdetect -y 0
        0 1 2 3 4 5 6 7 8 9 a b c d e f
        00: -- -- -- -- -- -- -- -- -- -- -- -- --
        10: -- -- -- -- -- -- -- -- 18 -- -- -- -- -- -- --
        20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
        30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
        40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
        50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
        60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
        70: -- -- -- -- -- -- -- --

        si tu vois bien apparaitre le code 18 (ID du contrôleur) c’est que tout est OK, tu peux donc installer la suite owfs. Il suffit ensuite d’aller dans le fichier /etc/owfs.conf et changer la ligne “server” comme suivant afin que la suite owfs sâche quel driver utiliser pour piloter le 1Wire

        server: device = /dev/i2c-0

        bien entendu si ton Pi est en Revision 2 cette ligne devra être

        server: device = /dev/i2c-1

        Pour la téléinfo rien de special à faire si ce n’est mettre un brin de soudure sur le pad STINFO entre le pad du milieu et PI et configurer le Raspberry pour la liaison série comme indiqué dans mon tuto
        Voilà, si besoin n’hésites pas je ferai un post dédié.

        Charles

  3. Bonjour,

    Je viens d’acheter vote carte. C’est un plaisir pour moi de découvrir toutes les capacités et fonctionnalités que vous avez incluses.

    C’est la carte que j’aurais voulu faire. Merci.

    Au niveau logiciel, je compte tester votre logiciel bien sur, mais je compte plutôt l’utiliser comme une carte Arduino classique, compte tenu du bug connu sur I2C du RPI, par exemple voir le site:
    http://www.advamation.com/knowhow/raspberrypi/rpi-i2c-bug.html

    Avant de commencer mes tests, j’aimerai savoir quel est le bootloader qui est chargé dans le chip ATMEGA328P.

    Encore bravo pour votre travail.

    Cordialement

    • Bonjour Jean-Claude,

      Tout d’abord merci pour votre commentaire, cela fait toujours plaisir de voir que la carte est utile à d’autres personnes.

      Pour le bootloader je crois de mémoire que c’est un Duelanove 328, avec le firmware de test tel que décrit ici. Perso je reflash le bootloader avec une version Uno speciale a 250Kpbs.

      Le nouveau batch de fabrication en cours inclura deux nouveautés intéressantes, un PAD pour relier la GPIO18 sur le reset de l’arduino afin de pouvoir uploader les sketch directement depuis la liaison série du Raspberry (sans passer par un cable FTDI) et un nouveau switch connectable à une autre GPIO afin de pouvoir éteindre proprement le PI simplement en appuyant sur le switch.

      Charles

  4. Bonjour Charles,

    Merci pour votre réponse rapide et pour l’info.

    Je compte bien utiliser le RPI à distance pour développer et mettre à jour les sketchs sur l’ATMEGA328. Ainsi les ajustements logiciels pourront être faits à distance pour l’ensemble.

    Si je comprends bien, il me suffit de connecter IO18 sur le DTR en plus des connections JTXD et JRXD.

    Finalement dois-je changer le bootloader pour cela ?

    Bien cordialement

    Jean-Claude

    • Jean-Claude,
      Oui c’est exactement çà, il faut connecter les JTXD et JRXD mais vous l’aviez déjà fait, GPIO18 sur le DTR sert pour l’autoreset mais la subtilité pour l’utiliser est d’utiliser un script pour piloter le GPIO18 au bon moment (pour que l’Arduino passe en mode bootloader dans le bon timing) et j’ai un peu galéré sur le sujet pour réussir à faire fonctionner le tout mais maintenant çà fonctionne.
      J’ai utilisé la methode de Martin décrite ici pour l’autoreset (voir la fin du post). pour GPIO18 il faut changer la ligne pin=11 par pin=12 (et oui comme si les GPIO number n’étaient pas déjà assez confuse entre le nom logique et physique du chipset, le script utilise le n° de pin du connecteur P1, on arrive à 3 numérotations possible pour la même IO çà devient du délire)
      J’ai aussi commenté les 2 dernières lignes du script comme ceci

      #print "done with autoreset"
      #GPIO.cleanup()

      Charles

  5. Bonjour Charles,

    Merci pour votre réponse rapide et pour l’info.

    Mon premier test est positif.

    J’ai connecté un “Grove – Digital Light Sensor” sur l’I2C et programmé le sketch d’exemple à partir du RPI.

    Tout fonctionne correctement. Merci.

    Bien cordialement

    Jean-Claude

  6. Hi! How to upload a sketch to ArduiPi using ArduinoIDE and FTDI cable?

    What baud rate to use?

    What type of arduino device is it (Arduino UNO and other didn’t work)?

    What programmator should I use?

    • Hi victor,

      ArduiPi board is populated with ATMega328 which is like a Arduino Board that you can program from Arduino IDE. You need to select the following board to be able to program it:
      Arduino Duemilanove w/ ATMega328 Arduino UNO

      But, the board need to be powered and have the good connection. if you have problem, would you mind telling me how do you want to Program the board. Does your ArduiPi board is plugged into Raspberry or does ArduiPi board is not plugged and just connected with FTDI Cable ?
      There is severals ways to program it depending on you needs. Just tell me the way you would like to do it and I will help you with the best solution to achieve it.

      Charles

  7. Thank you for your reply.

    I have connected ArduiPI into computer using FTDI Cable and I power it using a 12V 2A adaptor. Also I’ve swiched the power to ext. When I try to upload a sketch a have a error: sync 0x00 (

    I would like to upload a sketch and communicate with RasberryPI using serial port like I use a PC and ordinary arduino, but as I know the serial port communication is realy slow, so perhaps you could give me some advice how to make communication better.

    This is a part of my project of building a quadrocopter with arduino and raspberry pi.

    Best regards, Victor

    • Victor,

      You’re doing one of the right way, powering the board with external power, set the board power switch to external power, then connect FTDI cable to Arduipi should work, I do it every day.
      Just to be sure, your ArduiPi board is not plugged onto raspberry when you’re doing this (it should also work like this but need to be sure that the standalone board is working) ? What type of board you selected onto Arduino IDE ? and what type of cable you’re using from your computer to ArduiPi board ?

      I will do my best to help you.

      Charles

  8. I figured out the problem. There was no bootloader on the shipped board. I’ve burned it using another arduino (Arduino as ISP) and all worked well. Thank you for your advices :)

    • Victor,

      Thanks for the information, I have some boards fresh out from factory and I need to verify this point on the board and with Seedstudio. That was not the way I was thinking. If it is the case, I will do some modification on factory process so the new boards get out with correct bootloader.

      By the way, boards are out of stock now, the new revision will have 2 more features :

      – one jumper from PI GPIO to Arduino Reset line to be able to upload sketch directly from Pi Arduino IDE to ArduiPi board with Autoreset feature.
      – one more switch from ArduiPi board to PI GPIO. This will let us do a clean shutdown of the Raspberry PI.

      Charles

Add Comment Register



Leave a Reply

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


+ nine = 18

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">