Arduino Raspberry Pi Technology
Raspberry Pi or Arduino Uno? One Simple Rule to Choose the Right Board

Here at Make: we see new, ingenious projects from our community every day. Many of these are made possible by the use of development boards. However, if you’re new to the subject, it can be confusing to parse out the differences between boards and the advantages of using one over another.

We’ve created this super simple guide to help you get started. Then, when you’re ready check out Arduino Uno and Raspberry Pi Starter Kits, which come with all the goodies you need for your inaugural projects. Not sure you want all those peripherals yet? Start with the essentials: Grab the board of your choice and bring yourself up to speed with our Getting Started With series for Arduino and for Raspberry Pi.

Courtesy of Tech Uni
Courtesy of Tech Uni

 

What is the difference between the two?

An Arduino is a microcontroller motherboard. A microcontroller is a simple computer that can run one program at a time, over and over again. It is very easy to use.

A Raspberry Pi is a general-purpose computer, usually with a Linux operating system, and the ability to run multiple programs. It is more complicated to use than an Arduino.

What would I use each for?

An Arduino board is best used for simple repetitive tasks: opening and closing a garage door, reading the outside temperature and reporting it to Twitter, driving a simple robot.

Raspberry Pi is best used when you need a full-fledged computer: driving a more complicated robot, performing multiple tasks, doing intense calculations (as for Bitcoin or encryption)

Is there a simple rule of thumb to help me decide?

Yes, there is! Think about what you want your project to do. If you can describe it with less than two ‘and’s, get an Arduino. If you need more than two ‘and’s, get a Raspberry Pi.

Examples:
“I want to monitor my plants and have them Tweet me when they need water.” That can best be done by an Arduino.

“I want to monitor my plants and have them Tweet me when they need water and check the National Weather Service, and if the forecast is for fair weather, turn on the irrigation system and if the forecast is for rain, do nothing.” That would best be handled by a Raspberry Pi.

Isn’t that rule of thumb oversimplifying what is actually a much more complex issue?

Yes. That’s what a rule of thumb is.

Look, this is confusing! Just tell me which one I should buy!

An Arduino. It’s a system designed for beginners.

69 thoughts on “Raspberry Pi or Arduino Uno? One Simple Rule to Choose the Right Board

  1. The Arduino needs to come down in price significantly if it wants to have a place in the future. There are an increasingly number of full blown SBC’s on the market that cost less. Being a micro-controller the Arduino does have some speed advantages. But for 99.9% of the projects they are used in, SBC’s would be more than fast enough and are significantly better in every other way.

    And the Arduino 101… I don’t know what that it going to cost but Arduino.cc is obviously out of touch with reality if they think that is what the future of Arduino should look like.

        1. I’d say that it don’t matter… The main change is a CH340 instead of an FTDI… and some hackers would prefer to use these having been pissed off by the “brick your clone” driver update from FTDI (even if they didn’t get victim of it).

          More, in the current Arduino situation, with the LLC/SRL debacle, some would prefer buying a clone than taking the risk of buying an SRL arduino… Many shops (everywhere in the world, even in US) still work with SRL.

          Add to this the pricetag of “official arduinos” (either LLC or SRL) which is 4-20 times higher than it’s clone counterpart… On Farnell, Conrad, …, a nano is about 40€ where the Chinese clone is 2.40€ for example, a Mega is 45+€ where the chinese clone is about 12€ and so on…

          You’re saying that Pi is easier to use thanks to Bash/Python… don’t forget that C is a very common langage and that Arduino library is very complete, including for some very low level tasks.

          In my example, I rather HATE Python (that indent to define syntax is a huge step backward in coding and reminds me of how old langages like Cobol, RPG or Fortran used to use fixed code formatting). Most schools teach C/C++, Java, C# but no Python.

          The uses cases are clearly different… You need intense access to disk storage (either USB or SD card) ? Access to a digital camera ? You need to use a fullblown TCP/IP Stack (more than 4 simultaneous connections), the Pi is for you.

          You need lots of IO accesses (lots of I/O pins), analog inputs, lots of PWM outputs (or servo commands), low-power, then you’ll rather need an arduino or some other microcontroller (PIC, AVR, ESP8266 or other).

          Anyway, if you’re going for more than a blinking LED, you’ll probably need to have some real programming knowledge and the access to the Controller/Pi hardware won’t be the hardest part to program, in whatever langage you’ll use.

          1. Python is actually quite popular in schools:
            http://cacm.acm.org/blogs/blog-cacm/176450-python-is-now-the-most-popular-introductory-teaching-language-at-top-us-universities/fulltext

            I would also venture to guess that the increased usage of Raspberry Pis over the past few years in grade schools/middle schools/high schools is also increasing the use of Python.
            The indentation issue is one that is frequently brought up as a negative of Python, and I used to think the same thing – I hated that I was being “forced” to use indentation in my code. But the reality is that I had *always* used indentation in my code regardless of what language I was using, as it makes any code more readable. It took me all of about a day of programming in Python to get past that mental block.

          2. Indent having a meaning pose several problems :
            1) some forums/chat/… gobble up several spaces in ONE which make it at least uneasy to give some snippet
            2) if you take following C code
            if(a) {
            if(b) {
            c();
            d();
            }
            e();
            }

            and

            if (a) {
            if(b) {
            c();
            }
            d();
            e();
            }

            it’s very difficult to make a mistake on the scope of the second if()… In Python, it’s may only be the matter of ONE space…

            3) several people may have different coding standard… When using langages like C, Java, PHP, Perl, … you may use core reformatting tools (like “indent”) to make all part uniformly presented. This quite defeat the idea of indentation having a meaning.

            4) In langages like C,… forgetting to end the scope of a loop or conditionnal leads to a syntax error. In Python, scope is implicitely ended and the only thing that you get is a potential logic error, undetectable by the interpreter/compiler.

            (Add: the formatting on the code above disappeared when I sent the message, illustrating the problem I mentionned in point 1)

    1. Problem is that a lot of hobbyists and makers that know the systems don’t understand the difference. Multi-threaded constructs do not run on an arduino very well, but a Pi lacks the I/O richness and real-time sense/control aspects of a micro-controller. So, if I am messing around with python and learning/testing, I kind of want a Pi. If I want to build something specific, and I need real-time or large amounts of I/O, there is going to be an arduino in there.

  2. A more useful rule of thumb might be that if you already have an application written for Linux that you need to use, then go for the Raspberry Pi. For example, if you want to design your own network attached storage controller, go with a Pi running an open source NAS solution. But as long as you can easily write a subroutine (e.g., to interface with a provided REST API), then it’s extremely easy to use an Arduino. Arduino is much more suited to DIY than Raspberry Pi in my opinion, because the Pi is basically a way of fitting existing industrial solutions in small spaces.

  3. I’d say that if you already have an existing application, you aren’t asking the question as to which platform to use.

    If you are starting from scratch, this is at least as good a rule of thumb as any other.

    If you know enough to have conditions on the solution, you need (and can do) more analysis to select the correct solution.

    Another approach is to start with what you know and optimize from there. I’m a Unix programmer, so I will likely assess the Pi first for any task. Usually, I go to the Arduino when power is a significant issue. Simplicity, stability, and security can be significant considerations. There are many tasks where the overhead of the Linux OS isn’t justified, but familiarity and skill in the space can make that seem to be a small value.

  4. You should add the ESP8266 12-E in the middle as it is as smaller than an Arduino, it contains I/O (including one Analog), 4Mbits Flash, Network capabilities thru its its WiFi chipset (act as client and/or server), can be programmed in C, LUA and even Basic for $3 !

    1. the wifi bit neither arduino nor respberry pi have out of box, so anything that have “and” communicate via wifi by default should be goes to ESP8266

      1. Yep that’s why ESP is so cool it can replace Arduino in many ways (expect if lot of Analog I/O needed) and avoid the need of a huge RasPi (and unreliable long term SDCard support).

        ESP can also be Arduino’s best friend for Wifi and HTTP communication !

    2. Being a guide for people who don’t totally understand the difference between a SoC and a microcontroller, what toolchain would you recommend someone use to get started on the ESP8266? Is the Arduino IDE a painless transistion, or is there so much difference in functionality and language that’s it’s more shoehorned? I plan on checking out the LUA options, but, hmm, BASIC, what would you need to emlate a C64 or ATARI? As far as loading a BASIC program and seeing what it does? Will have to look into this :)

      1. Arduino IDE is compatible with ESP8266 so you can keep it if you want to proceed with C langage.

        MicropPython is also available on ESP8266 ;-)

        LUA is the most spread langage on ESP8266 you’ll find tons of help and examples for every need, just flash the NodeMCU firmware instead the basic AT firmware and that’s it, I use ESPlorer as editor and source uploader / serial debugger but you can use other tools.

        When you talk about BASIC I have to disagree with you as I think this langage can be as powerfull as any other langage, it’s only a question of which native functions are included, just look at Visual Basic can do.

        C64 BASIC was really limited full of PEEK POKE, ATARI BASIC was really low featured and so slow ! but GFA Basic or Omikron were much more powerfull and faster I remember I did some 3D animations with them back in time.

        The BASIC for ESP8266 is recent but functionnal and especially oriented to provide ESP8266 dedicated functions for managing I/O, Timers, Wifi, HTML output and also I2C or DS18B20 Temp sensor.

        Creating an HTML output with button is so easy :

        cls
        print “hello world”
        let bla = “Test contents of textbox”
        textbox bla
        button “This is my button 1” [test1]
        wait

        [test1]
        print “You Clicked on 1”
        print bla
        wait

        You want to post data to ThingSpeak, super easy :

        SENDTS({KEY},{FILED NUMBER},{FIELD CONTENTS})

        Wanna send a mail ? let’s rock !

        setupemail {String for server} {Value for port} {String for user name} {String for password}

        email {String To email} {String From Email} {String Subject} {String Body}

        That’s it e-mail sent !

    3. It’s cheap. It’s cool. It’s fiddley and requires a lot more work to get it to operate as an arduino.

  5. I would give totally different advice: does using a linux OS sound intimidating? Then get Arduinos. I feel terrible for all the teachers buying raspberry pis without realizing it’s a totally different operating system and comes with all the complications of created images and partitions and, well, sysadmin stuff that they don’t have time to learn. Just get an Arduino and load your program on it! It can handle more than 2 if / then statements ;)

    1. That’s a psychological barrier. Kind of like the fear of the cli a lot of people have. The structure and setup of the pi’s flash drive make it easy to master a classroom of pi stations. You have the scratch and other IDE’s. Windows is a beast to maintain because everything is hidden, so people ignore stuff until you have to reformat and reinstall. You’ve got the ghosting, and the lab lock-down systems, and the user partitioning controls, all which are cool. They do have a lot of back-end overhead.
      Pi’s aren’t quite like that. There’s this simplicity that appears inadvertently made for an education environment. Just maintain a few SD images and write them out for what ever lab you’re doing. Learning the Linux command line is not that difficult, but the key is you learn the concepts. The concepts are not that far removed from CM/P or DOS or Unix or … any other cli that has been around in the last 50 years. You need to think in terms of there is a command that lists files, instead of i type this to get a list of files.
      Sounds like you’ve done a few Linux installs… that’s not how the pi images are done at the user side…. I’ve never touched a partition tool on a Pi. I’ve been doing Linux since 94 and Pi’s since 2012. Get a new Pi, write a new SD for it. Get everything working just right? Just squirrel a copy away for later.

      1. Yes, pretty much this for me to; the OS images are pretty much throw away. If you have data you want to keep, then it’s worth either spewing it over the network immediately, or either backing up to, or redirecting storage to a volume over USB. Same goes if you need to persist config (fetch from network, or USB volume).

        That way you get the hygiene and repeatability of only needing an image compatible with your separate data/config storage & (if used in education) you’re less likely to “lose” all the kids’ assignments and can patch or replace the OS without risking data.

        I’ve taken it one step further as I wanted to run multiple services on 1 RPi – using Docker images with config/data volumes pointing at USB. In theory I can clone the config/data store and rebuild that environment on one or many other machines, with upgraded images for each service etc.

  6. I totally agree with “buy the Arduino”. IMO, if you want to learn Linux it would be a lot easier to load it onto any old laptop or run it in a Virtual Machine on your computer. When you’re done learning Linux and have concurrently learned Arduino, you’ll already know when to use one and when to use the other.

    1. If your are just using the Pi for projects, the amount of Linux knowledge required is very minimal. In fact I feel it’s a great platform to get started in Linux because you can just ease into it. I had been toying with Linux for years but was never able to mentally “make the jump” to using it on a regular basis until I started working with the RasPi. I now have it installed on my laptop.

  7. I plugged an arduino in one of the USB ports of the Raspberry Pi to get the best (worst) of both worlds :)

      1. Actually it’s a Raspberry PI shield that allows you to connect Arduino sheilds to the Ras. Which is great, but different from attaching an Arduino to the Ras.

        1. Yes, I have several Arduberries. and understand what they are. It is a Raspi shield that IS a full Arduino. It’s not just for “connecting Arduino shields to a Raspi.” It lets a Raspi drive the Arduberry directly in exactly the same way as connecting over USB to an external Arduino. It just uses the header pins for serial I/O rather than the USB port. You can run the Arduino IDE on the Raspi and program the Arduberry directly.

          1. Ok, that’s good to know. To be honest I was simply going by the description on the Arduberry web site. Seems that description could do with a bit of improvement.

      2. An even better solution is BeagleBone Black. The chip besides the standard ARM Cortex-A8 contains two PRU-ICSS units, which are essentially simple, fast microcontrollers you can use for your own purposes. Pi and two Arduinos in one chip.

        1. Correct me if I am wrong, but the BeagleBone can’t use the Arduino IDE, can’t use Arduino shields, can’t use Raspi shields, and doesn’t benefit from the Arduino’s vast library of code. Why would I want to choose this option to solve the problem the OP was asking about, which was to communicate between Raspi and Arduino?

          1. Yep, this is a different family. It’s a bit like “how can I permanently connect a trailer to a Golf”, and my answer being “why not get a van instead?” – sure you won’t be able to use garage full of Golf parts and accessories. You’ll need ones meant for that van.

      1. Ha, actually there’s more to that than one might think… They have their strengths and weaknesses too, and some will be surprised to learn that screws aren’t always the correct or even the best choice. ;)

  8. They are both totally different and totally awesome. Use them each for their strengths. Make cool stuff a share massively.

    1. =2 still Arduino. One main thread, one task delegated to interrupts.

      Still, that’s a very simplistic approach. It all depends on complexity of the task. If the chip is going to display anything more complex than a few digits or one line of text, go for Pi. Same for audio, a beep is ok for Arduino; mp3 music or speech – RPi.

  9. Simpler way to choose: are you attaching analog peripherals: use arduino; digital or no peripherals: use RPi…

  10. I hate to ever call a Make editor wrong so I’ll just say this is incomplete. It acts as if the uno is the most powerful of the Arduinos and ignores all discussion of IO which the Rasp can be terribly lacking for some applications.

  11. “I want to monitor my plants and have them Tweet me when they need water and check the National Weather Service and, if the forecast is for fair weather, turn on the irrigation system and if the forecast is for rain, do nothing.” That would best be handled by a Raspberry Pi.

    wut? you can do that with an arduino.

  12. I’m thinking about building a robot (humanoid), and trying to figure out what boards I should use… 1.) a Raspberry pi with many controllers to run the sensors and motors.
    2.) a Raspberry pi with some Arduino boards to run the many controllers to run the sensors and motors?
    The reason I’m choosing the Raspberry pi is I want the robot to be able to have wireless internet access. I’m not sure if I need the Arduino boards or not at this point, which is the reason I’m asking this question.

  13. I have an adult son who has CP and cannot speak. He is confined to a wheelchair. He has use of one hand. I want to figure out how to create a device that would do the following: Allow him to press an icon that represents a particular movie, which in turn would cause that movie to start playing on his TV. The interface would be a large sized tablet – large enough to have icons for him to easily see and press, and large enough to hold around 15 or 20 icons on one page. He won’t be able to understand how to flick between pages on a tablet hence I’d like as many movies as possible on one screen. The screen needs to be locked so that he can’t get into other apps, also.

    He has a WD media player loaded with a lot of his movies. I’d also be able to put them onto a computer’s hard drive, or any other storage device.

    I realize this might not be the best place to ask this, but I’m having trouble getting information on this.

    Does anyone have any ideas about how to do this?

    1. Hi Andrea, something like that could be easily done with an Android app or similar, If you’re still looking for something like this I’d be happy to develop one for you for free, just message me if you’re still interested. :)

  14. Wow I was literally thinking of creating a device that would notify me when my plants need watering and was wondering which of the two would be better lmao

  15. I have a borderline problem, I would like to make a Fourier transform of a noise then, according to some mathematical analysis on the spectrum, I would like to send a SMS . This should have been done just ones a day and then wait in quiet mode; Ideally this device should be supplied by battery for 3 week. I think that for the energy point of view Arduino would be better or even Atmel ATmega328 since I don’t care about the computation time, Do you think that Atmel ATmega328 would be able to perform this complex calculations?

  16. very misleading article. actually raspberry pie has a lot more easy no coding required projects..

  17. “Isn’t that rule of thumb oversimplifying what is actually a much more complex issue?

    Yes. That’s what a rule of thumb is.”

    AWESOME, Thank You!

  18. For newbies this article is well written; short and to the point, and anticipating the newbies’ questions.

  19. One important note, if you need tightly coupled real-time control, you should probably get an Arduino.

  20. I always tell myself Arduino arduino is more suited for electronic based project then a rasberry pi. Anyone can confirm?

    1. depend your need, an ESP8266 can also be a “middle” solution as it small, many I/O and also WiFi for communication.

      And you can also mix RasPi and Arduino, but as I said it’s all about what you really want/need for your project.

        1. Yep 4MB flash inside for ESP 12E/12F, PWM/I2C/SPI/ 1 analog port/multiple Digital I/O ports, Wifi module so it can be server and/or client HTTP/MQTT or low level TCP/UDP, or whatever, sleep and deep sleep mode cab be programmed in C/Lua/MicroPython and even Basic ! lot of alternative firmware available like ESPEasy (a ready to use Firmware recognizing a lot of sensors and with integrated client for ThingsSpeak or MQTT … for 3€ ;-)

  21. An Arduino because it’s for beginners? Yeah because C+ is just so much more intuitive than learning Python. It’s like saying you’ve never been biking so take a unicycle because there are fewer gears. There really isn’t any useful insights here but it’s like comparing a dune buggy and a tesla. There is overlap in their use but…why are we comparing them? If you want to control motors and read sensors in a general sense on a short timescale get a Druino hands down. If you want to learn to code in a relevant language and have powerful data logging and software options get a Pi. If you’re good at learning new stuff and like software AND electronics then get both. Then there is ESP8266 NodeMcu…Or maybe a MicroPython chip. 5V signal or 3.3V? Crap there are so many options now I’m confused…

  22. I have both. I started with Pi. The reason I got into these was to play around with circuitry. The Raspberry Pi was more than I needed since it included a full OS. The Arduino was much better since I just connect it to a PC, upload my code, and it’s good to go.

    With the Raspberry Pi having an OS, it’s a lot more flexible, and can do a little more (circuitry wise) than the Arduino out of the box if you know what you’re doing. Great fun either way!

Comments are closed.

Tagged

Patrick is an editor at MAKE. He is the author of the books Environmental Monitoring with Arduino, Atmospheric Monitoring with Arduino, The Science of Battlestar Galactica, and This is What You Just Put In Your Mouth. He has sworn to defend mankind against the eventual rise of the killer bots.

View more articles by Patrick Di Justo