----- Date:

First Lick of the Atomic Pi

Last month I caught an Atomic Pi, a $35 Intel Atom based single board computer. I hadn't paid attention to their kickstarter ("$72,000+ pledged of $3,500 goal"), I had seen the Hackaday coverage... Which is quite negative about the limited quantity of this board.

The Digital Loggers FAQ states:

Q: What is the anticipated design lifetime and what follow-on projects
 do you plan?

A: The APi has been shipping since December 2018, and we anticipate
the design will last through early 2020.  The special purchase of
Bosch components was a one-time deal, so the price of the APi is sure
to increase gradually as that supply is depleted.  The AAEON UP board
should be considered for follow-on designs

My conclusion after a first look is that this is a great price for this collection of hardware, so buy some now while they last. I'm not building a line of business on these, or even planning "dozens of units"; so I don't mind the drawbacks that Hackaday mentions. I'm OK with neat surplus at a good price.

Only about 28,000 Atomic Pis will ever be produced

... according to Hackaday. I'm really happy I scored one.

I got the $35 kit which comes with a small PSU/GPIO breakout board, and a USB webcam board in addition to the SBC with its built in goodies. Physically, this is a well put together system; the heatsink is solid and the connectors are all solid and not the cheap versions.

I'm running it on a cardboard box on the desk right now; but it certainly looks as if it could survive existence in a moderately energetic robot / motion frame, which I gather is the point of the design. I'm certain there's subtleties to the physical design I'm too ignorant to appreciate; what I can see I approve of.

They also have the bigger kit with TWO Atomic Pi's and the bigger breakout board, which looks like fun.

Spec Sheet PDF

The included BNO-055 sensor is a thing in itself.

First Boot #

Hooked up to monitor, keyboard, and power, it lights right up. It has a Linux with GUI (Ubuntu) right on the eMMC "boot ROM" already. I saw a regular PC-ish looking BIOS screen flash by, too. They supply several system images, including multiple Ubuntu versions, a Debian Buster image, and Windows 10 drivers.

They've got a generated "default password" on the atomicpi user account; OK thats fine and has advantages but yuck its ugly to type in. I want to change it, their FAQ has the answer:

atomicpi@localhost$ sudo bash
root@localhost# passwd atomicpi
 Enter new UNIX password: *****

I use a trivial password for these things so deeply ingrained into muscle memory I dont recall typing it sometimes. It fails the complexity checks their pre-installed system has when trying to change the password as the atomicpi user, but setting it as root works.

Idling on the desktop, out in the open on a room temperature desk (24C / 76F), the heatsink measures 37C (98F). It's a large impressive heatsink; I think this will be good for fanless operation with natural airflow under small load.

The LAN and WiFI came right up; I have no WiFi antennas on it but its 8ft from the access point so that's not an issue. The default image has no hostname set. It does have an SSH server running.

atomicpi@localhost:~$ df -h

Filesystem      Size  Used Avail Use% Mounted on
/dev/mmcblk0p1   15G  4.6G  9.0G  34% /

Specs say 16GB of eMMC; 9GB available is decent. Inexcusably and yet inevitably; emacs isn't present on this image. However, they've released an updated Ubuntu system image 10 days ago as I write this; so I'm going to fetch that to work with.

It has a BIOS, the boot order can be changed there and it can thus boot from an SD card or USB / whatever device. There's even a netboot.

Custom stuff #

The FAQ mentions an atomicpi-version command, so I wonder what other custom stuff they have on the $PATH.

atomicpi@localhost:~$ atomicpi-version 
Atomic Pi v. 1.0.0.150

atomicpi@localhost:~$ atomicpi- [TAB_KEY]
atomicpi-base-system                  atomicpi-hold-xmos
atomicpi-default-password-monitor     atomicpi-make-openocd-config
atomicpi-hide-default-password-hints  atomicpi-reset-xmos
atomicpi-hold-mic                     atomicpi-version

There is a README for their system images, which i'll quote from:

Here is a manifest of the files we provide which may aid in adding support for other distributions:
/home/atomicpi/doc/
/home/atomicpi/samples/
/usr/src/

/usr/sbin/mmc-status


/usr/bin/atomicpi-version
/usr/bin/atomicpi-base-system

/usr/src/spi-gpio-custom-0.1
/usr/src/i2c-gpio-custom-0.1.1
/etc/i2c-gpio-custom.d/
/etc/spi-gpio-custom.d/
/etc/systemd/system/spi-gpio-custom.service
/etc/systemd/system/i2c-gpio-custom.service
/etc/modules-load.d/i2c-dev.conf
/etc/modules-load.d/spi-dev.conf
/usr/sbin/gpio-custom-bus-modprobe
/usr/lib/gpio-present.sh
/usr/lib/spi-gpio-custom-filter.sh
/usr/lib/i2c-gpio-custom-filter.sh

/usr/lib/python2.7/dist-packages/atomicpi.py
/usr/lib/atomicpi.sh
/usr/lib/node/atomicpi.js

/usr/sbin/atomicpi-hold-xmos
/usr/sbin/atomicpi-hold-mic
/etc/systemd/system/atomicpi-hold-mic.service
/etc/systemd/system/atomicpi-hold-xmos.service
/usr/sbin/atomicpi-reset-xmos

/etc/systemd/system/efi-keep-current-boot.service
/usr/sbin/efi-keep-current-boot

That's nice. mmc-status looks intersting:

atomicpi@localhost:~$ sudo mmc-status 
mmc0:0001: 95% ± 5% life time remaining

The doc/ and samples/ directories look promising:

atomicpi@localhost:~$ ls -lR doc/ samples/
doc/:
total 5588
-rw-r--r-- 1 atomicpi atomicpi 5669085 Jan  1  1970 atomicpi.pdf
-rw-r--r-- 1 atomicpi atomicpi   42209 Jan  1  1970 enchilada.pdf
drwxr-xr-x 3 atomicpi atomicpi    4096 May  3  2019 guide

doc/guide:
total 188
drwxr-xr-x 2 atomicpi atomicpi   4096 May  3  2019 html
-rw-r--r-- 1 atomicpi atomicpi 184892 Jan  1  1970 refman.pdf

samples/:
total 20
-rw-r--r-- 1 atomicpi atomicpi  682 Jan  1  1970 bno055-test.js
-rw-r--r-- 1 atomicpi atomicpi  718 Jan  1  1970 bno055-test.py
drwxr-xr-x 2 atomicpi atomicpi 4096 May  3  2019 camera
-rw-r--r-- 1 atomicpi atomicpi  402 Jan  1  1970 gpio-test.js
-rw-r--r-- 1 atomicpi atomicpi  409 Jan  1  1970 gpio-test.py

samples/camera:
total 12
-rwxr-xr-x 1 atomicpi atomicpi 111 Jan  1  1970 gstreamer.sh
-rwxr-xr-x 1 atomicpi atomicpi  33 Jan  1  1970 guvcview.sh
-rwxr-xr-x 1 atomicpi atomicpi  57 Jan  1  1970 mplayer.sh

doc/guide/refman.pdf contains a few interesting words about the UEFI BIOS, how it won't boot from MBR, how it wants to boot from PXE/LAN first, and a description of "boot target anomalies" that is too complicated to summarize.

If the wired network is connected at power up; boot times may be slow as it waits for a PXE search timeout. I haven't observed that; seems to boot OK with the wired LAN plugged in.

If the network has a PXE server but it's not intended to boot from it, unexpected operation can occur.

In other words, a monkey may well fly from your nose, I guess. The last time I played with PXE, it was to boot Alpha systems that're now old enough to drink alcohol legally.

WTF is a BNO-055? #

It's a magical electronic position, orientation, an motion sensor:

From the Adafruit BNO055 document:

The BNO055 can output the following sensor data:

  • Absolute Orientation (Euler Vector, 100Hz)
    • Three axis orientation data based on a 360° sphere
  • Absolute Orientation (Quaterion, 100Hz)
    • Four point quaternion output for more accurate data manipulation
  • Angular Velocity Vector (100Hz)
    • Three axis of 'rotation speed' in rad/s
  • Acceleration Vector (100Hz)
    • Three axis of acceleration (gravity + linear motion) in m/s^2
  • Magnetic Field Strength Vector (20Hz)
    • Three axis of magnetic field sensing in micro Tesla (uT)
  • Linear Acceleration Vector (100Hz)
    • Three axis of linear acceleration data (acceleration minus gravity) in m/s^2
  • Gravity Vector (100Hz)
    • Three axis of gravitational acceleration (minus any movement) in m/s^2
  • Temperature (1Hz)
    • Ambient temperature in degrees celsius

Adafruit's BNO055 breakout board is $35 itself, the sensor, bare, from mouser or digikey is $10+.

I have no idea what I might actually do with any of that data (in fact I'm not certain I'm sure what some of that means precisely). Much more motivated to try figuring something out with such a sensor to hand than when it's something to be ordered and learned about.

There are Python and Javascript examples of reading the sensor provided in samples/. This is the Python example:

from Adafruit_BNO055.BNO055 import BNO055
from time import sleep

# BNO055 is configured on I2C bus 50 in /etc/i2c-gpio-custom.d/bno055-bus by default
sensor = BNO055(busnum=50)
assert(sensor.begin())

while True:
    print('Euler=%0.2f:%0.2f:%0.2f Quaternion=%0.2f:%0.2f:%0.2f:%0.2f Temp=%0.2fC Mag=%0.2f:%0.2f:%0.2f Gyr=%0.2f:%0.2f:%0.2f Accel=%0.2f:%0.2f:%0.2f LAccel=%0.2f:%0.2f:%0.2f Gravity=%0.2f:%0.2f:%0.2f'%(
        sensor.read_euler() +
        sensor.read_quaternion() +
        (sensor.read_temp(),) +
        sensor.read_magnetometer() +
        sensor.read_gyroscope() +
        sensor.read_accelerometer() +
        sensor.read_linear_acceleration() +
        sensor.read_gravity()
    ))
    sleep(1)

I picked it up and moved it around a little while this ran:

atomicpi@localhost:~$ sudo python samples/bno055-test.py 

Euler=0.00:0.00:0.00 Quaternion=0.00:0.00:0.00:0.00 Temp=39.00C Mag=0.00:10.00:-44.56 Gyr=0.00:-0.00:0.00 Accel=-1.18:-0.29:10.74 LAccel=0.00:0.00:0.00 Gravity=0.00:0.00:0.00
Euler=359.94:-6.06:1.56 Quaternion=-0.01:0.05:0.00:1.00 Temp=39.00C Mag=0.75:11.06:-42.88 Gyr=-0.01:0.00:0.00 Accel=-1.20:-0.32:10.18 LAccel=-0.16:-0.05:0.43 Gravity=-1.03:-0.26:9.74
Euler=0.62:-8.38:8.75 Quaternion=-0.08:0.07:-0.01:0.99 Temp=39.00C Mag=3.50:12.50:-24.19 Gyr=0.04:0.05:-0.08 Accel=-1.48:-1.74:9.70 LAccel=-0.18:-0.18:0.19 Gravity=-1.44:-1.47:9.58
Euler=1.88:-6.75:4.25 Quaternion=-0.04:0.06:-0.02:1.00 Temp=39.00C Mag=2.25:10.88:-23.50 Gyr=-0.06:0.16:0.08 Accel=-1.13:-0.71:10.03 LAccel=0.05:0.02:0.33 Gravity=-1.19:-0.73:9.70
Euler=1.25:-7.50:4.69 Quaternion=-0.04:0.07:-0.01:1.00 Temp=39.00C Mag=6.25:11.00:-24.56 Gyr=0.04:0.06:0.19 Accel=-1.48:-0.95:9.50 LAccel=-0.18:-0.16:-0.17 Gravity=-1.30:-0.78:9.68

XMOS Audio #

The API page links a datasheet for the "XMOS Digital Audio Processor", but im not finding much about that on the system. It shows up in lsusb.

atomicpi@localhost:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: Audio [Intel HDMI/DP LPE Audio], device 0: HdmiLpeAudio [Intel HDMI/DP LPE Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: Audio [Intel HDMI/DP LPE Audio], device 1: HdmiLpeAudio [Intel HDMI/DP LPE Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: Audio [Intel HDMI/DP LPE Audio], device 2: HdmiLpeAudio [Intel HDMI/DP LPE Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

card 1: Audio_1 [Mayfield Audio], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

Oh there it is, card 1. There's something up with PulseAudio on the image im using right now; I guess. Apparently this has onboard power amp (the little breakout board I have takes a 5v barrel jack power input, and has a JST header for a 5v/12v supply for the audio amplifier).

The 4x? Microphone inputs and volume control are are on the JST headers on the base board. the microphone JST header is for I2S digital microphones; I've never played with those. I was thinking more analog.

The data sheet is eye-poppingly complicated, describing configurable DSP(?) blocks and such. Further prodding will reveal more.

Camera #

The included samples for using the camera look like any other USB webcam, so far as I know. exec v4l-wrap mplayer -fps 30 -vc ffh264 tv://

They link to a kernel patch and that leads to ... im not sure what but I don't think its necessary for my use yet. They appear to be optimizing the h264 output.

The camera that came with mine doesn't appear to work; I'm not terribly disappointed. I haven't use for a camera on this that I can think of; and if I do it'll likely need to be more than whatever this included one was supposed to be.

Support #

Hackaday says,

there will be no community built around this thirty five dollar single board computer. This is a piece of electronic flotsam that will go down in history right next to the Ouya console.

The reddit isn't setting the world on fire, but it's still there 9 months after the hackaday review. Digital Loggers has done a fine job collecting up the documentation they have. They recently released an updated system image dated 2020.03.19, further refuting Hackaday's assumptions that there'd be no more software updates. I note however the line

In the above, the Atomic Pi functionality is the same. Only the Linux distribution is different.

from the DLI Download Center page, which might be used to argue that Hackaday was technically correct and this isn't a "real" update. I'll settle for "it's not undocumented / covered in NDA seekrit sauce".

Given the fact that its a fairly vanilla PC to the software, the lack of dedicated community support (as the Raspberry Pi community has) isn't the drawback it might otherwise be.

Conclusion #

I commented publicly on Hacker News last month, about this board, questioning its value relative to a Raspberry Pi 4. Then I ordered one. I'm glad I did, it does have strengths the Pi4 doesn't, and for me the drawbacks aren't a concern.

Sure, this thing is surplus; it's funky etc. It's a viable little thing for all of that. It can do things that a dumpster laptop can't; and it can do them for the price of a flea market "just before dumpster" laptop.

I can see how people might take the "Pi" appellation wrong: at this point it's something like selling a Victor 9000 as an IBM PC compatible... not quite kosher, ya'know?

Put another way: you could saddle up a zebra and call him "Trigger," but in doing so you have not led your customer to expect the experience they are likely to have.

On the other hand, by any name, this is a incredible value in a single board computer and an unusually capable and openly documented surplus part. By all measures I can think to apply, it's a great deal.

I salute the people at Digital Loggers for rescuing these boards and making them friendlier for hackers.