When to Use Arduino Instead of Raspberry Pi for Your Projects

Arduino has limited RAM, a small amount of storage, and minimal processing power compared to Raspberry Pi. Arduino is a microcontroller motherboard and is designed for simple, low-level tasks. On the other hand, Raspberry Pi is a full-blown general-purpose computer capable of multitasking and executing high level interaction between software and hardware.

If Raspberry Pi is so powerful, more powerful than an Arduino, why would anyone ever think of using an Arduino instead of a Raspberry Pi for a project?

The rule of thumb is as follows:

  • If you can explain what your system is designed to do with fewer than two “and’s”, use an Arduino.
  • If your system requires more than two “and’s” to describe, use a Raspberry Pi.

For example:

  • I want my system to read temperature sensor data and generate a noise when the temperature exceeds 32°F. – Use an Arduino
  • I want my system to read temperature sensor data and send me an email with the temperature and generate a noise when the temperature exceeds 32°F. – Use a Raspberry Pi

In short, Arduino excels for projects that require capturing data from sensors quickly and doing something simple with that data. Raspberry Pi is great for projects where you need to have multiple things going on simultaneously.

Raspberry Pi definitely has the steeper learning curve compared to Arduino. You can get an Arduino up and running in only a matter of minutes. Raspberry Pi setup can be arduous. The first time I used Raspberry Pi, it took one to two hours to get everything up and running.

The benefit of both platforms is that both Raspberry Pi and Arduino have vibrant communities where you can go to ask questions if you get stuck with your project. In contrast, less popular platforms (Beaglebone for example) have small communities with just a handful of books that cover the details. If you have a project that requires your system to do something complex and you run into a brick wall, you are going to have to figure everything out by yourself.

One other thing. In order to shutdown Raspberry Pi, you have to shut it down properly typing this command:

sudo shutdown -h now

If you shut down a Raspberry Pi by cutting off its power, bad things can happen. However, with Arduino, you just unplug it or cut off its power to turn it off.

Common Tools and Instrumentation for Embedded System Debugging

Imagine you’re a software manager and are in charge of developing an embedded system. What tools will you use to debug? In this post, I will cover the common tools and instrumentation for embedded system debugging.

Host Machine with Test Scaffold

We do not want to begin our troubleshooting on the target system. Troubleshooting on the target system present a lot of complications. We need a host machine with test scaffold because the hardware might go through several iterations and is often replete with bugs and unstable early in the development process. It is also hard to create repeatable tests on the target system.

Think of a test scaffold as a test site on your host computer that mimics what would occur on the target hardware. Just like a construction scaffold, it is a temporary work area.

Finally, since embedded systems do not often contain a permanent storage medium, it can be difficult to keep track of the results of the debugging process. There is no “GitHub”-like system that can be implemented on an embedded target system.

Instruction Set Simulators

I need instruction set simulators in order to measure response time and throughput as well as to debug the startup code.

Assert Macro

The assert macro will help me to test my assumptions since it stops as soon as one of those assumptions is false.

Mechanism to Get the Software into the Target System

The locator output file needs to get into the target system somehow. We have a lot of options: PROM programmers, ROM emulators, In-circuit emulators, flash memory, and monitors. My personal choice would be PROM programmers since this is the “classic” way to get software into the target system. Using PROM programmers means that we are able to make changes to the software when we deem necessary.

Multimeter

multimeter

A multimeter is a must-have tool for testing hardware. The kinds of multimeters that exist nowadays are a voltmeter, ohmmeter, and ammeter all-in-one tool.

Oscilloscope

oscilloscope

Oscilloscopes are another useful tool for testing the hardware. Oscilloscopes enable us to receive and display analog signals.

Logic Analyzer

logic_analyzer

Logic analyzers enable us to receive and display digital signals instead of analog signals. This tool is useful for hardware debugging.

In-circuit Emulator

This tool is used as a replacement for the actual microprocessor on the target system. With the in-circuit emulator, you can to debug like you would with a normal debugger in a desktop environment.

Queues vs Mailboxes vs Pipes for RTOSs

In this post, I will discuss the differences between message queues, mailboxes, and pipes. Message queues, mailboxes, and pipes are services that are provided by RTOSs that enable tasks to communicate with each other. Tasks need to communicate with each other in order to coordinate activities and to share data.

What is a Mailbox?

urgent_not_urgent_matrix
Image Source: Vegpuff/Wikipedia

If you need strong control over prioritization, mailboxes might be a good choice. You can easily prioritize mailbox messages no matter when they entered the mailbox.

This characteristic provides a definite advantage over other inter-task communication options such as queues which are particularly sensitive to the order in which messages are added and removed from the data structure.

The other benefit of mailboxes is that there is typically no size limit on individual mailboxes. The size limit is typically fixed and is set by the programmer.

What is a Queue?

data_queue
Image Source: Davidjcmorris

If you have an implementation that requires first-in-first-out prioritization, queues are a great choice. They are flexible and relatively easy to implement, making them a common choice in RTOS implementations.

The downside of queues is that, unlike mailboxes, you are often limited in the amount of data that you can write to the queue in any given call. Many RTOSs don’t have a lot of flexibility when it comes to this.

What is a Pipe?

If you need to be able to write messages of varying lengths, pipes are the best choice. Pipes are identical to queues except they are byte-oriented. The main difference between pipes and queues is that  pipes allow you to write messages of any length, while queues do not.