submit to programming reddit
 

(May 2019)

Atomic PI

For the TL;DR crowd:

A month ago, while browsing in CNX software, I stumbled on an article about an Intel-based Single Board Computer (SBC); that apparently cost only 35$. For that price, the specs were beyond impressive - they were in the "so cheap, there must be something wrong" category.

I decided I just *had* to try this out.

One week later, the "bare-bones" board arrived. And another two weeks later, this little machine has really pushed my limits. I've never soldered on Intel HW before; an Intel machine somehow always created a kind of mental block in my head:

"This is not a toy! Don't solder/mess with it!..."

Well, the price of the Atomic PI allowed the rational part of my brain to overcome the (ridiculous) mental block... And I was able to achieve the results shown below.

Here it is, in all its splendor, my nerdy brothers and sisters... My new little UNIX server.

The New Beast (TM)

The New Beast (TM) - with my custom power adapter, and a soldered-on (extra) USB connector

Before Atomic PI

I love SBCs.

I started playing with them 3 years ago, beginning with a Raspberry PI2. A year later I "graduated" into a setup that was a bit more advanced... A 12 Euro OrangePI board, that I assembled into an always-on file server, and borgbackup server; with an I2C attached LCD screen, a fan, and various other bells and whistles.

I was pretty sure that for my needs, the price/performance ratio I reached with the OrangePI was unbeatable. The nearest "competitor", the Raspberry PI3 was three times as expensive - and at the same time offered substantially less I/O-performance (since in RPIs everything must pass through a single USB root hub).

Instead, my dirt-cheap Orange PI Zero contains 4 USB root-level hubs. After connecting an external female USB port to the appropriate set of header pins, I was able to connect two external USB drives directly - i.e. on separate hubs. Data transfer between them worked at the full USB2.0 speed - approximately 37 MBytes/sec (try that with a Raspberry PI and you'll instantly see the difference...)

The Old Beast (TM)

The Old Beast (TM) - 4-core ARM, PI(D)-controlled FAN, I2C 1602, level-shifter...

Simply put, I was able to have more than twice the speed, via a board that cost 1/3rd the price of an RPI3!

And as for SW, I compiled the ARMBIAN image for my Beast myself - from sources - so I was fully in control of this tiny UNIX server. Borgbackup worked perfectly inside it over the last year - and it has already saved me a couple of times, by giving me the ability to have dozens of mountable backup snapshots; without paying storage-wise for anything beyond the compressed "deltas" between them. This includes huge Virtual machine images - try backing those up with anything except Borg and you'll see what I mean; a simple sector-worth of data inserted in the middle of a 10GB VMDK file causes most other backup SW to store an "extra" 10GB... Borg instead only stores a compressed version of the changed sector.

"No, that's impossible..."

But then, a month ago, while browsing in CNX software, I stumbled on an article about an Intel-based Single Board Computer (SBC); that apparently cost only 35$, while being equipped with a 4 core Atom processor, 2GB of RAM, and 16GB of EMMC. And this being an Intel machine, it came with USB3.0; and also Gigabit Ethernet; and Wi-Fi.

If you keep in touch with the current state of computer HW, your reaction to this is probably like mine:

What the... That's impossible!
The pieces alone cost a lot more than 35$, never mind putting all this together!

So yes, I just had to try this out... I took a leap of faith (betting that it's not some fraudulent scheme), and ordered this from Amazon.

It arrived to the Netherlands in 5 days.

And I immediately realized that this is not a common SBC... There was no "mainstream" way to power it on. It needed 5V/3A to be fed over an unusual female pin header - and had no 5.5x2.1mm or 5.5x2.5mm jack, or any kind of a USB power one.

Hmm...

I like challenges.

I already had an Excelway configurable-voltage power supply that could provide the required amps at 5V; so I ordered a female 5.5x2.5mm jack that I could use to drive the power to the Atomic PI.

But while waiting for this to arrive, I just had to see if the board worked.

So I took my Arduino board - which had such a jack (one that the Excelway's power plug fit in) and soldered two wires on the power pins - driving the output directly to the Atomic PI's pin 3 (5V) and pin 6 (GND).

First step: "stealing" power from an Arduino

It worked!

I booted the machine, found that it had a Debian-based distro pre-installed in the EMMC, and enjoyed compiling and running my CPU-based renderer. I was not disappointed - the Atom was at least 3 times faster than my Orange PI Zero; and more importantly, the huge heatsink kept it cool while staying dead-silent! With all 4 cores 100% busy rendering a statue, temperature rose to about 50C - a far, far better result than my Orange PI zero (more than 60C, downthrottling,... I had to attach a fan and write my own PI(D) controller to keep it cool). No such worries with the Atomic PI.

What about mainstream stuff?

I launched Firefox, went to Youtube and watched in full screen a 4K 60fps video. It worked like a charm - with no hiccups of any kind. And this being an Intel GPU, I have nothing to worry about regarding the GPU drivers maintenance... The curse of most ARM-based SBCs in terms of video support is that you are probably stuck at an ancient kernel (because the makers of most SBCs just bundle Android kernels of e.g. series 3.x). You can, in theory, compile a kernel from the mainline - but you usually end up with a barely functioning framebuffer-based, non-accelerated X11 experience.

What about storage?

Well, a simple dd test on the Atomic PI showed that the EMMC (read sequentially) was delivering data at 170MBytes/sec. Another huge speed difference, compared to any SD card inside a Raspberry or an Orange PI... And that SD card, mind you, you'd have to buy extra yourself - whereas the EMMC in the Atomic PI is already there, covered in the 35$ you paid to get the board.

Power measurements

The 5.5x2.5mm adapter arrived a few days later. I quickly desoldered the wires from my Arduino board, and put my adjustable buck PSU in the loop - so I could measure power:

Power measurements on Atomic PI

Idle power measurements on Atomic PI: 5V x 0.7A = 3.5W

Those were, admittedly, higher power numbers than those of my two ARM-based SBCs - but not insanely so. Moreover, when I installed a spartan version of Debian Stretch (with nothing X related, and a minimal amount of services that I need for my file/backup needs), I found that the idle power went even lower, to 2.5W (0.5A). I am guessing that when the HDMI port is not connected, some parts of the design power off.

Old-school: the serial port

Even though it's nice to have accelerated X11 and video decoding, the purpose I had in mind for my Atomic PI was replacing my old OrangePI-based server with this much more powerful, headless machine. This would allow me to do things like offline ffmpeg-based video transcoding - taking advantage of the huge optimizations done over the years with Intel-specific hand-written assembly routines.

That, in turn, meant no monitor attached to the Atomic PI's HDMI port. And even though I planned to use the machine over SSH with a static IP address, I still wanted to have a fallback of a serial port - just as I had for my ARM SBCs.

Connector CN10 of the board offered the required 3 pins: TX, RX and GND. After connecting them to a PL2303HX USB/TTL, I was able to see my machine boot up over minicom...

Monitoring a boot over a serial port

...and in fact, I could enter the BIOS and change settings over this serial connection!

That was a surprise!... I never expected to be able to do this on a PC.

It means that I can use a 2-Euro ESP8266 board to "remote-serial" this machine; connect to the ESP8266 over WiFi, and via its serial port, access the Atomic PI and change BIOS settings, install different distros (or OpenBSD), etc - without being physically present next to it.

Awesome.

UPDATE: A Redditor asked me for more details about this last part; the steps are relatively simple:
  • the GND/TX/RX pins of the ESP8266 must be connected to the GND/RX/TX pins of the SBC
  • the ESP8266 itself must be programmed with this.
  • After powering it up, the ESP will connect to the WiFi; and you can then connect to it with a script like this:
$ cat remoteMonitor.sh

stty -icanon -echo
stty intr undef
nc <IP_ADDR_OF_ESP8266> 23
stty intr 
stty icanon echo

That's all. Whatever happens on the SBC's serial port will then be shown in your terminal. On the Atomic PI in particular, it will allow you to enter and modify your BIOS settings.

If you are wondering about the stty commands, they allow sending control characters - e.g. Ctrl-C is sent across to the remote, not to the local nc. This means you can use the connection to perform logins, etc. And when you want to disconnect, just killall nc (assuming this is your only use of netcat:-) 

Final solution to power - and an extra USB port.

But the female 5.5x2.5mm jack still annoyed me. It was a brittle setup; I didn't like it. I wanted a better, more sturdy solution.

So I ordered a few ingredients for a much better "soup": an adapter I made that uses male pin headers to give life to the Atomic PI, getting power from a normal 5.5x2.5mm plug. It also has a switch and a power LED.

And since I did all this and no magic smoke came out, I did one final augmentation: I soldered a female USB breakout on the "webcam" connector, since I saw in the schematics that this was in fact a USB 2.0 port:

Adapter from 5.5x2.5mm jack, with switch and LED

Adapter from 5.5x2.5mm jack, with switch and LED

Bottom-side of adapter

Bottom-side of adapter

Final form - before turning it on. My power adapter plugs in the female header.

Final form - before turning it on. My power adapter plugs in the female pin header of the PI.

Final form - switched on. The cable in the back is the serial cable.

Final form - switched on. The cable in the back is the serial cable.

To stabilize, electrically-isolate and provide some strength to the soldered USB port wires, I hot-glued them into place.

In fact, that's the thing I am most grateful to Digital Loggers for; by selling such a cheap Intel-based machine, they allowed me to break through the "mental block" associated with any Intel HW:

"It's not a toy, don't solder/mess with it!"

Well, I've now soldered stuff on Intel-equipped motherboards.
Guess I've crossed another threshold :-)

Conclusion

I've shared some of the material above on the Atomic PI subreddit ; but I've decided that it's far better to write it all down in my blog as well. At the very least this may help people - by addressing some of their questions, and also showing them what is possible with the Atomic PI.

Overall, this is a fantastic little machine - and probably the best bargain I've ever seen, anywhere, in terms of computing power. No other SBC comes close to this price/performance ratio - if you don't believe me, Google for the prices of Intel motherboards equipped with the same processor, then add 2GB of RAM, and 16GB of EMMC - and compare the result to 35$.

As for how this incredible price was achieved, some rumours indicate the boards came out from a failed robotics company. In my mind, that makes it even better: I have here in front of me, the heart of a robot. And though it's a bit sad that it didn't amount to what it was meant to... well, at least it will serve me - and it will serve me well.

My new Beast smiles at me from across the room, with his green LED indicating that life is good.

I love it :-)

UPDATE: I added remote-controlled poweron/poweroff functionality, via an ESP8266.

 
Discuss on Reddit



profile for ttsiodras at Stack Overflow, Q&A for professional and enthusiast programmers
GitHub member ttsiodras
Back to index  My CVLast update on: Sun Jul 28 12:02:51 2019

The comments on this website require the use of JavaScript. Perhaps your browser isn't JavaScript capable or the script is not being run for another reason. If you're interested in reading the comments or leaving a comment behind please try again with a different browser or from a different connection.