NanoPi Duo

From FriendlyARM WiKi
Jump to: navigation, search



  • The NanoPi Duo is designed and developed by FriendlyElec for makers, hobbyists and professionals. It is small, just 50 x 25.4 mm. It uses Allwinner’s Cortex-A7 H2+ SoC. It has 256M/512M DDR3 RAM and an onboard WiFi module. A UbuntuCore image is ready for it.
  • On such a small board rich interfaces such as Ethernet, USB, SPI, UART, I2C, PWM, IR and audio are exposed. It is powered from a MicroUSB port and boots OS from a MicroSD card.
  • Popular libraries and utilities: WiringPi, RPi.GPIO and Python are ported to the NanoPi Duo’s system and they all are open source. The NanoPi Duo perfectly suits various light-weight IoT applications.

Hardware Spec

  • CPU: Allwinner H2+, Quad-core Cortex-A7
  • DDR3 RAM: 256MB/512MB
  • Connectivity: 10/100M Ethernet
  • Wifi:XR819
  • USB Host: 2.54mm pin x2, exposed in 2.54mm pitch pin header
  • MicroSD Slot x 1
  • MicroUSB: OTG and power input
  • Debug Serial Interface: exposed in 2.54mm pitch pin header
  • Audio input/output Interface: exposed in 2.54mm pitch pin header
  • GPIO: 2.54mm spacing 12pin x2. It includes UART, SPI, I2C, IO etc
  • PCB Dimension: 25.4 x 50mm
  • Power Supply: DC 5V/2A
  • Temperature measuring range: -40℃ to 80℃
  • OS/Software: U-boot,Linux Kernel 4.11.2 (mainline) , Ubuntu 16.04.2 LTS (Xenial)
  • Weight: xxg(With Pin-headers)

Software Features


  • uboot

Ubuntu 16.04

  • mainline kernel: Linux-4.11.2
  • Ubuntu 16.04.2
  • rpi-monitor: check system status and information
  • npi-config: system configuration utility for setting passwords, language, timezone, hostname, SSH and auto-login, and enabling/disabling i2c, spi, serial and PWM
  • software utility: wiringNP to access GPIO pins
  • software utility: RPi.GPIO_NP to access GPIO pins
  • networkmanager: manage networks
  • system log output from serial port
  • nano editor
  • welcome window with basic system information and status
  • auto-login with user account "pi" with access to npi-config
  • sudoers include "fa"
  • on first system boot file system will be automatically extended.
  • supports file system auto check and repair on system boot.
  • supports audio recording and playing with 3.5mm audio jack
  • supports USB Host and 100M Ethernet
  • fixed MAC address

Diagram, Layout and Dimension


NanoPi Duo Layout
  • GPIO Pin Description
Pin silk screen Name Linux gpio Pin silk screen Name Linux gpio

  1. SYS_3.3V: 3.3V power output
  2. VDD_5V: 5V power input/output. When the external device’s voltage is greater than the MicroUSB's voltage the external device is powering the board,
otherwise the board powers the external device. The input range is 4.7V ~ 5.6V
  1. All pins are 3.3V, output current is 5mA
  2. For more details refer to the document NanoPi Duo Schematic

Dimensional Diagram


For more details refer to the document NanoPi_Duo_v1.0_1706 pcb file in dxf format

Get Started

Essentials You Need

Before starting to use your NanoPi Duo get the following items ready

  • NanoPi Duo
  • microSD Card/TFCard: Class 10 or Above, minimum 8GB SDHC
  • microUSB power. A 5V/2A power is a must
  • A Host computer running Ubuntu 16.04 64 bit system
  • a serial communication board

TF Cards We Tested

To make your NanoPi Duo boot and run fast we highly recommend you use a Class10 8GB SDHC TF card or better. The following cards are what we used in all our test cases presented here:

  • SanDisk TF 8G Class10 Micro/SD TF card:

SanDisk MicroSD 8G

  • SanDisk TF128G MicroSDXC TF 128G Class10 48MB/S:

SanDisk MicroSD 128G

  • 川宇 8G C10 High Speed class10 micro SD card:

chuanyu MicroSD 8G

Install OS

Download Image Files

Get the following files from here download link to download image files (under the official-ROMs directory) and the flashing utility (under the tools directory):

Image Files: FriendlyCore (base on UbuntuCore) Image File, kernel:Linux-4.x.y
Flash Utility:
win32diskimager.rar Windows utility. Under Linux users can use "dd"


Boot from TF
  • FriendlyCore / Debian / Ubuntu are all based on a same Linux distribution and their installation methods are the same.
  • Extract the Linux image and win32diskimager.rar files. Insert a TF card(at least 8G) into a Windows PC and run the win32diskimager utility as administrator. On the utility's main window select your TF card's drive, the wanted image file and click on "write" to start flashing the TF card.
  • Insert this card into your board's BOOT slot and power on (with a 5V/2A power source). If the PWR LED is on and the STAT LED is blinking this indicates your board has successfully booted.

NanoPi Duo can work with FriendlyElec's Mini Shield

The NanoPi Duo can work with FriendlyElec's Mini Shield for NanoPi Duo. Here is link to the wiki site of Mini Shield for NanoPi Duo Mini Shield for NanoPi Duo. Here is a hardware setup.
Mini Shield for NanoPi Duo-Duo

Work with FriendlyCore


FriendlyCore is a light Linux system without X-windows, based on ubuntu core, It uses the Qt-Embedded's GUI and is popular in industrial and enterprise applications.

Besides the regular Ubuntu core's features our FriendlyCore has the following additional features:

  • it supports our LCDs with both capacitive touch and resistive touch(S700, X710, HD702, S430, HD101 and S70)
  • it supports WiFi
  • it supports Ethernet
  • it supports Bluetooth and has been installed with bluez utilities
  • it supports audio playing
  • it supports Qt5.9 EGLES and OpenGL ES1.1/2.0 (Only for S5P4418/S5P6818)

FriendlyCore's User Accounts

  • If your board is connected to an HDMI monitor you need to use a USB mouse and keyboard.
  • If you want to do kernel development you need to use a serial communication board, ie a PSU-ONECOM board, which will allow you to operate the board via a serial terminal.Here is a setup where we connect a board to a PC via the PSU-ONECOM and you can power on your board from either the PSU-ONECOM or its MicroUSB:

For example, NanoPi-M1:
You can use a USB to Serial conversion board too.
Make sure you use a 5V/2A power to power your board from its MicroUSB port:

  • FriendlyCore User Accounts:

Non-root User:

   User Name: pi
   Password: pi


   User Name: root
   Password: fa

The system is automatically logged in as "pi". You can do "sudo npi-config" to disable auto login.

  • Update packages
$ sudo apt-get update

Configure System with npi-config

The npi-config is a commandline utility which can be used to initialize system configurations such as user password, system language, time zone, Hostname, SSH switch , Auto login and etc. Type the following command to run this utility.

$ sudo npi-config

Here is how npi-config's GUI looks like:

Extend TF Card's Section

When FriendlyCore is loaded the TF card's section will be automatically extended.You can check the section's size by running the following command:

$ df -h


You can use the NetworkManager utility in FriendlyCore to manage its network. You can run "nmcli" in the commandline utility to start it. Here are the commands to start a WiFi connection:

  • Check device list
sudo nmcli dev

Note: if the status of a device is "unmanaged" it means that device cannot be accessed by NetworkManager. To make it accessed you need to clear the settings under "/etc/network/interfaces" and reboot your system.

  • Start WiFi
sudo nmcli r wifi on
  • Scan Surrounding WiFi Sources
sudo nmcli dev wifi
  • Connect to a WiFi Source
sudo nmcli dev wifi connect "SSID" password "PASSWORD"

The "SSID" and "PASSWORD" need to be replaced with your actual SSID and password.If you have multiple WiFi devices you need to specify the one you want to connect to a WiFi source with iface
If a connection succeeds it will be automatically setup on next system reboot.

For more details about NetworkManager refer to this link: Use NetworkManager to configure network settings

  • Use USB WiFi

Our OS system has support for popular USB WiFi drivers. Many USB WiFi modules are plug and play with our system. Here is a list of models we tested;

Number Model
1 RTL8188CUS 802.11n WLAN Adapter
2 RT2070 Wireless Adapter
3 RT2870/RT3070 Wireless Adapter
4 RTL8192CU Wireless Adapter
5 mi WiFi mt7601

Ethernet Connection

If a board is connected to a network via Ethernet before it is powered on it will automatically obtain an IP with DHCP activated after it is powered up. If you want to set up a static IP refer to: Use NetworkManager to configure network settings


If your board has an onboard bluetooth module you can search for surrounding bluetooth devices by running the following command:

hcitool scan

You can run "hciconfig" to check bluetooth's status.

Playing Audio

You can play an audio file by running the following command:

aplay -t raw -c 2 -f S16_LE -r 44100 /root/test.pcm

HDMI Audio Output

Our system's default audio output is the 3.5mm audio jack. You can turn on the HDMI audio by editing the /etc/asound.conf file:

pcm.!default {
    type hw
    card 1
    device 0
ctl.!default {
    type hw
    card 1

card 0 points to the 3.5mm audio jack and card 1 points to the HDMI audio. You need to save your changes and reboot your system to make your changes take effect.

Connect to USB Camera(FA-CAM202)

The FA-CAM202 is a 200M USB camera.
Refer to this link for more details on how to connect to a FA-CAM202: Connect NanoPi M1 to DVP Camera CAM500B

Develop Qt Application

Please refer to: How to build Qt application

Setup Program to AutoRun

You can setup a program to autorun on system boot with npi-config:

sudo npi-config

Go to Boot Options -> Autologin -> Qt/Embedded, select Enable and reboot.

Run Qt Demo

Run the following command

$ sudo /opt/QtE-Demo/

Here is what you expect to observe. This is an open source Qt Demo:

Connect to DVP Camera CAM500B

Note: this function is only supported in Linux-3.4.y
The CAM500B camera module is a 5M-pixel camera with DVP interface. For more tech details about it you can refer to Matrix - CAM500B.
connect your H3 board to a CAM500B. Then boot OS, connect your board to a network, log into the board as root and run "mjpg-streamer":

$ cd /root/mjpg-streamer
$ make
$ ./

The mjpg-streamer application is an open source video steam server. After it is successfully started the following messages will be popped up:

 i: Using V4L2 device.: /dev/video0
 i: Desired Resolution: 1280 x 720
 i: Frames Per Second.: 30
 i: Format............: YUV
 i: JPEG Quality......: 90
 o: www-folder-path...: ./www/
 o: HTTP TCP port.....: 8080
 o: username:password.: disabled
 o: commands..........: enabled

In our case the board's IP address was We typed in a browser and were able to view the images taken from the camera's. Here is what you would expect to observe:
The mjpg-streamer soft-encodes data with libjpeg and you can hard-encode its data with ffmpeg which will greatly increase CPU's efficiency and speed up data encoding:

$ ffmpeg -t 30 -f v4l2 -channel 0 -video_size 1280x720 -i /dev/video0 -pix_fmt nv12 -r 30 \
        -b:v 64k -c:v cedrus264 test.mp4

By default it records a 30-second video. Typing "q" stops video recording. After recording is stopped a test.mp4 file will be generated.

Check CPU's Working Temperature

You can use the following command to read H3's temperature and frequency


Check System Information with Rpi-Monitor

Our OS contains the Rpi-Monitor utility with which users can check system information and status.
In our case our board's IP was and we typed the following IP in a browser:

We were directed to the following page:
Users can easily check these system information and status.

Access GPIO Pins/Wirings with WiringNP

The wiringPi library was initially developed by Gordon Henderson in C. It contains libraries to access GPIO, I2C, SPI, UART, PWM and etc. The wiringPi library contains various libraries, header files and a commandline utility:gpio. The gpio utility can be used to read and write GPIO pins.
FriendlyElec integrated this utility in FriendlyCore system allowing users to easily access GPIO pins. For more details refer to WiringNP WiringNP

Boot System from SSD

A NanoPi-Duo can be booted from the SSD on a Mini Shield for NanoPi Duo. Booting OS from an SSD has the following benefits:
1) faster read/write;
2) much longer life time than a TF card;
3) more reliable than booting from a TF card;

You can install an OS to SSD by using the npi-config utility. Here are the steps to follow:

sudo npi-config

Enter the "Boot Options" menu, go to "Boot device" and you will see two options:
1) D1 Hard drive
2) D2 TF card
Select "D1 Hard drive" and proceed with its prompts.
Select "D2 TF card" to boot OS from a TF card.

If your npi-config doesn't have a "Boot device" menu it might be that your npi-config is out of date and you can update it by selecting "Update" in the menu.

Make Your Own FriendlyCore

Use Mainline BSP

The NanoPi Duo has support for kernel Linux-4.x.y with Ubuntu Core 16.04. For more details about how to use mainline u-boot and Linux-4.x.y refer to :Mainline U-boot & Linux

Connect External Modules to Duo

Connect Mini Shield for NanoPi NEO Duo to Duo

3D Printing Files


Schematics & Datasheets

Update Log


  • Released English Version


  • Updated section 1


  • Added section 3


  • Corrected spelling and grammar errors


  • Added section 6.11