Category Archives: Uncategorized

Pine or Pi?

The absence of analog interface features and incompatible GPIO interface preventing use of the Pi software modules hamper use of the Pine for casual IoT hacking.

Another nuisance is the lack of Wifi onboard.

Given that the processor and memory specs on the Pine exceed those of the Raspberry Pi 3 B+ these weaknesses mean it will be hard to find a good use case for the Pine over the Pi.

Deeper into GPIO and the A64

Let’s see what the kernel thinks we have configured for the gpio interface that is letting us use the virtual filesystem driver. Using the kernel’s built in debug filesystem interface we ask it what the config is
root@pine64:/tmp# cat /sys/kernel/debug/gpio
GPIOs 0-255, platform/1c20800.pinctrl, 1c20800.pinctrl:
gpio-80 (sysfs ) out lo
gpio-166 (1c0f000.sdmmc cd ) in lo


GPIOs 352-383, platform/1f02c00.pinctrl, 1f02c00.pinctrl:
gpio-354 (wlan_regon ) out hi
gpio-355 (wlan_hostwake ) in lo
gpio-356 (bt_rst ) out hi


GPIOs 1024-1027, platform/pinctrl.1, axp-pinctrl:

So we see that gpio-80, our LED from the prior post is ‘owned’ by sysfs since I didn’t unexport it, and is an output and currently logic low or 0v

Looking deeper into the kernel config we find many more config files in the filesystem tree in these locations
/sys/kernel/debug/pinctrl/ and /sys/kernel/debug/gpio/

To find out what the kernel is really talking about on these interfaces we shuold go to the source and read the documentation. https://git.kernel.org/cgit/linux/kernel/git/linusw/linux-gpio.git/tree/Documentation/gpio/

Our A64 ia also known as a sunxi50i

Using GPIO on Pine64 from node.js

We can use a module already built that leverages the file system driver to run our LED and make it blink.

One such module is called ‘onoff’ which can be installed with npm

Here is a brief node program that blinks the LED at 1 hz ( 500 ms on / 500 off )
var Gpio=require('onoff').Gpio;
var led = new Gpio(80,'out');

console.log("starting");

setInterval(ticktock,500);

var LED=false;
function ticktock(){
if(!LED){
// turn on LED
console.log("on");
LED=true;
led.writeSync(0);
}
else {
// turn off LED
console.log("off");
LED=false;
led.writeSync(1);
}
}

Simple and functional although it must be run as root, if you don’t need anything too fancy this will be sufficient.

PineA64+ nodejs and npm installation

I like the event driven programming paradigm used by node.js, it is well suited to embedded control and many real world problems.  The version of node included in the previous post’s image does not have a working node package manager npm so we will need to install one that has access to the world of node packages.

First go and download the node.js sources from https://nodejs.org/en/download/ chose the Source Code option.

Open your terminal window. We then unpack the sources, configure and build node which included npm. If the build works, we remove the existing one and install the update. Build does take quite a while. If it fails, check for and install any missing packages.

node -v
cd /tmp
tar -xzf /home/debian/node-v6.9.1.gz
cd node-v6.9.1
./configure
make
make test
node -v
./node -v
sudo apt-get remove nodejs
sudo make install
node -v

The result should be node running the current version instead of the oddball obsolete version.

You can now start installing the node packages you like using npm as usual

nodesource.com nodejs installation method fails on pine64

As of November 22nd, 2016, this method does NOT work on the Pine64 as the nodesource repository does not have entries for arm64.

The commonly posted method for installing node on the Raspberry Pi is to run the script located here https://deb.nodesource.com/setup_7.x piped directly to bash from the command line.

I do not consider this pattern to be safe or sane from a security perspective as you do not have control over what is in that script, even if you preview it in your browser as they could serve different versions of the script for wget versus Chrome. If you want to use their automated script, and I do generally think that it is reputable and safe, download the script to your /tmp directory and review it before running it.

That said, until they add the binary-arm64 builds it will fail with the following error.  Use the manual compile method described in my other post.

  Unable to find expected entry 'main/binary-arm64/Packages' in Release file

Exploring the Pine A64+QuickStart

This board, while a bit larger than the RPi 3 has a much faster processor and double the RAM at a lower price point.  I have the 2GB model costing $29 which shipped on time and arrived quite fast from China.

Linux gurus, lenny.raposo and longsleep along with help from many others have gotten fairly solid Linus builds ready to burn on SD card and available here:  http://wiki.pine64.org/index.php/Pine_A64_Software_Release  I am using the Debian Jessie image 20160701 to start with.

Follow their directions to install the image on a fast microSD, I used a 32gb card freebie from microcenter that h2wtest rated at 16Mb/s write and 33Mb/s read.  Faster is better.

Insert burned SD and connect a powered hub to one of the USB host ports with a keyboard, mouse and wifi dongle ( or ethernet ) before booting then attach a 2.5a micro USB power supply.

Without adding drivers, certain net cards will work, come will not. The Alfa AWUS036H does work out of the box but has occasional freezes.  The Alfa AWUS036NHA does not work.  others will work, the more common in Linux the better chances it will be trouble free.

Boot the system creds are debian:debian

If you used an SD card larger than 8GB you will want to resize the filesystem to use the whole card. There is a supplied script to do it but I had to run the commands manually to get them to take effect.

sudo su
resize_rootfs.sh
df -h
# If this does not show the full capacity do the following after reading the script
less /usr/local/sbin/resize_rootfs.sh
partx -u /dev/mmcblk0
resize2fs /dev/mmcblk0p2
df -h

setup your net connection and verify you have access to the outside.

You now have a working Linux mini-PC.

Normal next step is to update any packages to get fixes.

Open a terminal window and we will get started:

sudo apt-get update
sudo apt-get upgrade –fix-missing

You now have a current and ready to run system.

In the next post we will blink and LED then install nodejs and npm.

-Bill

Exploring the IoT landscape

I have always used bare chip micro-controllers for little projects as the price point and features were a good fit.  Recently, alright, for the past few years, maker boards have been dropping in price to be competitive with single chip options while offering a much more capable feature set.

I realize that you really don’t need a full featured web browser and 4k output on your toaster but when the Pi Zero is $5.00 and a bare PIC32 in DIP is $3.41 with far less of everything it’s no longer easy to select the more ‘appropriate’ solution.

I’m going to write up my experiences with a few of these devices and their adapters as I go along but only where the current information is weak or confusing as is often the case with less mainstream options.

-Bill