Orange Pi has a 40-pin extension connector (GPIO) compatible with the Raspberry Pi (model B +). In this tutorial, we will install python as well as the pyA20 library adapted to the GPIO of Orange Pi. On paper, the connector is compatible, only flat the call of the pins is different which requires to resume Python programs developed for The Raspberry. This is a bit of a shame but the very attractive price of the Orange Pi range remains a weighty argument.
For this tutorial, I used Armbian installed on an Orange Pi Lite (Wi-Fi version). The GPIO is the same throughout the Orange Pi range except the Orange Pi Zero which has a 26-pin GPIO.
Installing Python and Libraries
Let’s start by preparing the environment by installing Python
sudo apt-get install python-dev
Then install the pyA20 library
sudo pip install pyA20
Now we need to install the library to manage the Orange Pi GPIO. Place yourself in your home folder (eg /home/ft) and then clone the pyH3 library (https://github.com/duxingkei33/orangepi_PC_gpio_pyH3). This is an adaptation made by Duxingkei Chow of the library “python control orangepi_PC ext GPIO ALLwinner H3” based on the “pyA20 0.2.1” library.
cd /home/pi git clone https://github.com/duxingkei33/orangepi_PC_gpio_pyH3
Enter the library directory
cd orangepi_PC_gpio_pyH3
And run the installation (it is better to do the previous command with a sudo if you are not logged in as root).
sudo python setup.py install
Correspondence of pins between Orange Pi and Raspberry Pi (model B+)
As I mentioned in the introduction, the expansion slot is compatible with the Raspberry B + (40-pin). However, the location is different.
Raspberry Pi | Orange Pi | Pin
(Left column) |
Broche
(Right column) |
Orange Pi | Raspberry Pi |
3V3 | 1 | 2 | +5V | +5V | |
GPIO2
SDA1 I2C |
PA12 | 3 | 4 | +5V | +5V |
GPIO3
SCL I2C |
PA11 | 5 | 6 | GND | GND |
GPIO4 | PA6 | 7 | 8 | PA13 | GPIO14
UART_TXD |
GND | GND | 9 | 10 | PA14 | GPIO15
UART_RXD |
GPIO17 | PA1 | 11 | 12 | PD14 | GPIO18
PCM_CLK |
GPIO27 | PA0 | 13 | 14 | GND | GND |
GPIO22 | PA3 | 15 | 16 | PC4 | GPIO23 |
3V3 | 3V3 | 17 | 18 | PC7 | GPIO24 |
GPIO10
SPI0_MOSI |
PC0 | 19 | 20 | GND | GND |
GPIO9
SPI0_MISO |
PC1 | 21 | 22 | PA2 | GPIO25 |
GPIO11
SPI0_SCLK |
PC2 | 23 | 24 | PC3 | GPIO8
SPI0_CE0_N |
GND | GND | 25 | 26 | PA21 | GPIO7
SPI0_CE1_N |
ID_SD
I2C ID EEPROM |
PA19 | 27 | 28 | PA18 | ID_SC
I2C ID EEPROM |
GPIO5 | PA7 | 29 | 30 | GND | GND |
GPIO6 | PA8 | 31 | 32 | PG8 | GPIO12 |
GPIO13 | PA9 | 33 | 34 | GND | GND |
GPIO19 | PA10 | 35 | 36 | PG9 | GPIO16 |
GPIO26 | PA20 | 37 | 38 | PG6 | GPIO20 |
GND | GND | 39 | 40 | PG7 | GPIO21 |
Just like the Raspberry Pi, the output voltage is 3.3V.
Finally the last difference (and not least!), The connector is turned 180 degrees compared to that of the Raspberry. Needless to say that it will be necessary to use a connection for breadboard with a flexible cable if you want to connect the Orange to a breadboard (breakout) connection.
Lighting a Python Led
For this first tutorial on the GPIO of Orange Pi, we will not go far. Either way it’s exactly the same as Raspberry. There is only the call of the pins that differs.
Create a new file. For example test.py
nano test.py
Paste the following code and save with Ctrl + X then Y. This code is very simple, it lights for 2 seconds a LED connected to the PG7 pin (equivalent to the Raspberry GPIO21). Connect a LED on pin PG7 (the last one in the right column) to a GND via a 220Ω resistor.
#import the library / Import des librairies from pyA20.gpio import gpio from pyA20.gpio import port from time import sleep #initialize the gpio module / initialise le GPIO gpio.init() #setup the port (same as raspberry pi's gpio.setup() function) #Configure la broche PG7 (equivalent au GPIO21 du Raspberry) comme une sortie gpio.setcfg(port.PG7, gpio.OUTPUT) #now we do something (light up the LED) #Maintenant, on allume la LED gpio.output(port.PG7, gpio.HIGH) #turn off the LED after 2 seconds #Et on eteint après 2 secondes sleep(2) gpio.output(port.PG7, gpio.LOW)
We make the script executable
chmod +x test.py
If you are not logged in as root, you must preface the python command with a sudo (you will be prompted for the password).
sudo python test.py
If the wiring is correct, the LED must illuminate for 2 seconds.
Now you have everything you need to use the Orange Pi GPIO. It’s a shame the calls are different. Existing programs will not be directly usable. Other regret, the rotation of the connector makes the use of HAT boards much less convenient (and compact!)
Orange Pi Comparison Chart
- Model
- SoC
- RAM
- eMMC storage
- WiFi
- Bluetooth
- GPRS
- FCC/CE certificated
- Connector (!not compatible with Raspberry Pi)
- Misc
- Best prices
-
Which Orange Pi to choose in 2020 ? Allwinner H2, H3, H6, RK3399
Prices start from: $90.50 Check all prices - Allwinner H3@1,2GHz
- 512MB DDR2
- ~
- 1
-
-
- 1
- CSI Camera
- 5V micro USB OTG power supply
5V DCIN power supply
POWER + LED button
IPEX connector
Ethernet 10/100M
Dimensions: 69x48 mm
Weight: 36g
GPU Mali400MP2 @ 600MHz
Header 3 pin debug UART
Hearder 40 pins comp. Raspberry Pi 3
- $90.50 Buy It Now
Updates
[2017/08/10] – Install pyA20 library manually. Thank’s to Daniel
- Install Home Assistant (HASS) on an Orange Pi running under Armbian
- IoT development based on Orange Pi, Arduino (Firmata), Nodejs, Blynk and Johnny-Five
- Blynk + Node.js + Johnny-Five: drive a Pan-Tilt PTZ SG90 kit on Orange Pi with an Arduino / Firmata
- Start programming with Node Js and Johnny-Five: IoT and robotics based on Arduino, Raspberry Pi, Orange Pi
- Orange Pi: test of the OPI.GPIO package for Node-Red (node-red-contrib-opi-gpio)
- Orange Pi (Armbian): replace the GPIO by an Arduino/Firmata, Node-RED and Johnny-Five
Hola amigo, configure una Orangepi One nueva con Armbian server, ya lo actualice y sigo tus pasos pero me da este error..
https://uploads.disquscdn.com/images/bee8046f0c6f87119f49e23590738c5d23d1c4d222ae8fbe7160b78246523ad4.png
File “test.py”, line 2
from pyA20.gpio import gpio from pyA20.gpio import port
^
Gracias de antemano por la ayuda.
Hi John Alejandro, I had the same problem. First you have to install python-pip to manage python modules
> sudo apt-get install python-pip
Then install the module pyA20 to run the sample.
> sudo pip install pyA20
Hope it helps,
Thank you very much Daniel. I added the tip to the tutorial.
Can you help me i get a segmentation fault error.
Hello Tony. I’m sorry, but i think you need to re-install the system 🙁 It’s the problem with SD Card and SBC.