Benefits of Cross Compiling from a Host Computer to the Raspberry Pi

Having just developed a number of applications for the Raspberry Pi by building and executing the code directly on the Raspberry Pi, I can tell you that this will soon become impractical for larger projects.

The benefits of cross compiling from a host computer to the Raspberry Pi are numerous. Here are six benefits that come to mind:

VNC Viewer Lag

vnc_viewer

You don’t have to deal with the lag created on the VNC viewer session on your host machine. Sometimes I would type in some text on to my keyboard, and it would take five to ten seconds to appear on the Raspberry Pi. This could become annoying for large projects when I have hundreds of lines of code.

Compile Time

compile_time

The processor in a host machine, such as my HP Omen laptop, is way more powerful than the Raspberry Pi’s processor. This leads to much faster compile times and increased responsiveness.

If you are creating a large program, you’ll need to compile that program numerous times over the course of development. Those precious seconds that you will need to spend waiting for the Raspberry Pi to finish compiling and responding add up over time, resulting in reduced productivity.

Graphical User Interface

graphical_user_interface

A host machine typically has a more advanced and user-friendly graphical user interface.

Multitasking

multitasking

A host machine, such as a Windows 10 machine, is built for heavy-duty multitasking. A Raspberry Pi is not built for such a level of multitasking. I am for example unable to search the web for code examples, check my email, and code all at the same time. Doing all of this on the Raspberry Pi presents significant challenges because of the lack of power compared to my host machine.

Debugging Capabilities

debugging_capabilities

An IDE such as the Eclipse IDE, that could be downloaded on the host machine, has a number of advanced development capabilities, including remote debugging.

Screen Resolution

screen_resolution

Even though I was able to increase the font size on the Raspberry Pi, using my own laptop resulted in a much crisper image. This is very important when I am staring at a screen and looking at code for long hours during the day.

UART vs I2C vs SPI – Communication Interfaces for Raspberry Pi

The Raspberry Pi provides us with three main communication protocols. These protocols enable devices such as sensors, display modules, other computers, and scientific instruments to communicate and exchange data with the Raspberry Pi.

Here are the communication protocols in order from slowest to fastest:

  • UART = Universal Asynchronous Receiver / Transmitter
  • I2C = Inter-Integrated Circuit
  • SPI = Serial Peripheral Interface

These methods are digital, serial communication protocols.

UART vs I2C vs. SPI Comparison

Speed

UART is slow. I2C is faster but not as fast as the SPI. SPI has a data transfer rate that is roughly twice as fast.

Number of Devices

I2C is the easiest of the three protocols for chaining multiple devices. I2C supports multiple masters and slaves. It enables up to 127 devices without extreme complexity. On the other hand, SPI gets hairy beyond two devices because a select signal line is required for each device. UART only can handle two devices.

Transmission Confirmation

I2C is the only communications protocol that ensures the data that was sent to the slave device was actually received.

Number of Wires

I2C only uses two wires. UART uses two wires, but it is slow. SPI needs four wires.

Popularity

I2C is well known and widely used. I2C has a formal standard while SPI does not.

Price

I2C is cheaper to implement than the SPI communication protocol.

Noise

I2C has less noise than SPI.

Distance

I2C can send data over greater distances than SPI. SPI is really limited to short distance communication.

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.