Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
| guias:orangepizero [2021/04/16 20:41] – editor externo 127.0.0.1 | guias:orangepizero [2023/01/02 17:26] (actual) – Sergio Alvariño | ||
|---|---|---|---|
| Línea 1: | Línea 1: | ||
| + | ====== Orange Pi Zero: Empezar rápido desde linux ====== | ||
| + | |||
| + | Para usar la Orange Pi Zero tendremos que crear imágenes arrancables en tarjetas micro SD. | ||
| + | |||
| + | ===== Crear una SD arrancable ===== | ||
| + | |||
| + | Dependiendo de donde conectemos la tarjeta tendremos que usar diferentes rutas. En el procedimiento descrito a continuación ''< | ||
| + | |||
| + | Si la tarjeta se conecta via adaptador USB, linux la va a asociar a un dispositivo /dev/sdx, por ejemplo en mi portátil el disco duro es ''< | ||
| + | |||
| + | Si conectamos una memoria con un adaptador USB linux la podría mapear en ''< | ||
| + | |||
| + | Si la memoria se conecta mediante una ranura SD, linux la asociará a un dispositivo ''< | ||
| + | |||
| + | Los datos se pueden almacenar directamente en la memoria SD o en una partición creada en la memoria. | ||
| + | |||
| + | Resumiendo: | ||
| + | |||
| + | * ''< | ||
| + | * ${card}${p} será ''< | ||
| + | |||
| + | Antes de seguir adelante hay que estar completamente seguro del dispositivo asociado a nuestra memoria SD para no armar ningún estropicio. | ||
| + | |||
| + | Hay varias comprobaciones que se pueden hacer: | ||
| + | |||
| + | ''< | ||
| + | |||
| + | ''< | ||
| + | < | ||
| + | |||
| + | Disk / | ||
| + | Units: sectors of 1 * 512 = 512 bytes | ||
| + | Sector size (logical/ | ||
| + | I/O size (minimum/ | ||
| + | Disklabel type: dos | ||
| + | Disk identifier: 0x00000000 | ||
| + | |||
| + | </ | ||
| + | |||
| + | ''< | ||
| + | |||
| + | < | ||
| + | | ||
| + | | ||
| + | |||
| + | </ | ||
| + | |||
| + | Descargamos la imagen de Jessie adaptada a la //Orange Pi Zero// | ||
| + | |||
| + | Descomprimimos la imagen y la grabamos en la tarjeta SD con el comando: | ||
| + | < | ||
| + | |||
| + | sudo dd if=./ | ||
| + | |||
| + | </ | ||
| + | |||
| + | Insertamos la tarjeta en la //Orange Pi// y le damos alimentación. El primer arranque llevará alrededor de tres minutos, y tras ese tiempo aun hará falta un minuto más para poder hacer login. Este retardo es debido a que el sistema intentará actualizar la lista de paquetes y creará un area de swap de emergencia en la SD, y además cambiará el tamaño de la partición que hemos creado para ocupar todo el espacio libre en la SD. | ||
| + | |||
| + | De momento solo la he arrancado y efectivamente las particiones han cambiado tras el arranque así que tiene buena pinta. | ||
| + | |||
| + | Volvemos a insertar la SD en la //Orange Pi// y la conectamos con un cable ethernet al router de casa. El Armbian viene configurado por defecto para obtener su IP desde un servidor DHCP. | ||
| + | |||
| + | Como mi cutre-router no me da información de las IP asignadas usamos //nmap//: | ||
| + | |||
| + | < | ||
| + | nmap -sP 192.168.0.0/ | ||
| + | |||
| + | </ | ||
| + | |||
| + | Con eso averiguamos la IP asignada a la //Orange Pi Zero// | ||
| + | |||
| + | < | ||
| + | ssh [email protected] | ||
| + | |||
| + | </ | ||
| + | |||
| + | ¡Y ya estamos! | ||
| + | |||
| + | {{: | ||
| + | |||
| + | Lo primero es poner al dia el sistema: | ||
| + | |||
| + | < | ||
| + | apt-get update | ||
| + | apt-get upgrade | ||
| + | |||
| + | </ | ||
| + | |||
| + | Si quieres puedes reconfigurar el //time zone//: | ||
| + | |||
| + | < | ||
| + | dpkg-reconfigure tzdata | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== Conexión WIFI ===== | ||
| + | |||
| + | Vamos a comprobar que todo va bien: | ||
| + | |||
| + | < | ||
| + | root@orangepizero: | ||
| + | lo no wireless extensions. | ||
| + | |||
| + | tunl0 no wireless extensions. | ||
| + | |||
| + | wlan0 IEEE 802.11bgn | ||
| + | Mode: | ||
| + | Retry long limit: | ||
| + | Encryption key:off | ||
| + | Power Management: | ||
| + | |||
| + | eth0 no wireless extensions. | ||
| + | |||
| + | </ | ||
| + | |||
| + | Todo tiene buena pinta, vamos a ver si detecta WIFIs: | ||
| + | |||
| + | < | ||
| + | root@orangepizero: | ||
| + | ESSID:" | ||
| + | ESSID:" | ||
| + | ESSID:" | ||
| + | ESSID:" | ||
| + | ESSID:" | ||
| + | ESSID:" | ||
| + | ESSID:" | ||
| + | ESSID:" | ||
| + | ESSID:" | ||
| + | ESSID:" | ||
| + | ESSID:"" | ||
| + | ESSID:" | ||
| + | |||
| + | </ | ||
| + | |||
| + | Para configurar el wifi echamos un ojo al fichero ''< | ||
| + | < | ||
| + | |||
| + | # Armbian ships with network-manager installed by default. To save you time | ||
| + | # and hassles consider using 'sudo nmtui' instead of configuring Wi-Fi settings | ||
| + | # manually. | ||
| + | |||
| + | </ | ||
| + | |||
| + | Así que basta con ejecutar ''< | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Ejecutamos ''< | ||
| + | < | ||
| + | |||
| + | ifconfig | ||
| + | |||
| + | wlan0 Link encap: | ||
| + | inet addr: | ||
| + | inet6 addr: fe80:: | ||
| + | UP BROADCAST RUNNING MULTICAST | ||
| + | RX packets:2 errors:0 dropped:0 overruns:0 frame:0 | ||
| + | TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 | ||
| + | collisions: | ||
| + | RX bytes:328 (328.0 B) TX bytes:852 (852.0 B) | ||
| + | |||
| + | </ | ||
| + | |||
| + | ====== Orange Pi Zero, características técnicas ====== | ||
| + | |||
| + | La tarjeta de desarrollo Orange Pi Zero viene equipada con un procesador Cortex A7 Allwinner H2+ quad core, con 256 o 512MB RAM, Ethernet, y puertos USB. Disponible en Aliexpress (tienda oficial) por 6.99 dolares, mas 3.39 dolares como gastos de envío. | ||
| + | |||
| + | ===== Especificaciones ===== | ||
| + | |||
| + | * SoC – Allwinner H2(+) quad core Cortex A7 processor @ 1.2 GHz with Mali-400MP2 GPU @ 600 MHz | ||
| + | * System Memory – 256 to 512 MB DDR3-1866 SDRAM | ||
| + | * Storage – micro SD card slot | ||
| + | * Connectivity – 10/100M Ethernet + 802.11 b/g/n WiFi (Allwinner XR819 WiFi module) with u.FL antenna connector and external antenna | ||
| + | * USB – 1x USB 2.0 host ports, 1x micro USB OTG port | ||
| + | * Expansion headers – Unpopulated 26-pin “Raspberry Pi B+” header + 13-pin header with headphone, 2x USB 2.0, TV out, microphone and IR receiver signals | ||
| + | * Debugging – Unpopulated 3-pin header for serial console | ||
| + | * Misc – 2x LEDs | ||
| + | * Power Supply – 5V via micro USB port or optional PoE | ||
| + | * Dimensions – 52 x 46 mm | ||
| + | * Weight – 26 grams | ||
| + | |||
| + | ===== Esquema de pines ===== | ||
| + | |||
| + | Un excelente esquema de pines puede conseguirse en [[https:// | ||
| + | |||
| + | [[: | ||
| + | |||
| + | El mapeado de los pines de la Orange (de los micros Allwinner en realidad) en el kernel de Linux viene dado por la formula: | ||
| + | < | ||
| + | |||
| + | (Position of letter in alphabet - 1) * 32 + Pin number | ||
| + | |||
| + | </ | ||
| + | |||
| + | Para todos los pines PA de nuestra Orange Pi Zero, el número del kernel coincide con el del pin. Pero para los pines // | ||
| + | |||
| + | ===== Esquemas eléctricos ===== | ||
| + | |||
| + | Pueden bajarse de [[http:// | ||
| + | |||
| + | ====== Accediendo al hardware desde linea de comandos ====== | ||
| + | |||
| + | La memoria es más que suficiente para correr programas. El Armbian consume únicamente 40Mb en funcionamiento. | ||
| + | < | ||
| + | |||
| + | root@orangepizero: | ||
| + | | ||
| + | Mem: 247068 | ||
| + | -/+ buffers/ | ||
| + | Swap: | ||
| + | |||
| + | </ | ||
| + | |||
| + | Vamos a hacer algunas pruebas con el hardware. En Armbian, como todo Unix que se precie, todo es un fichero. | ||
| + | |||
| + | En el directorio ''< | ||
| + | |||
| + | < | ||
| + | root@orangepizero: | ||
| + | backlight | ||
| + | bdi devfreq | ||
| + | block disp | ||
| + | bsg dma hwmon leds | ||
| + | cedar_dev | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== LEDs ===== | ||
| + | |||
| + | Si miramos dentro del directorio ''< | ||
| + | |||
| + | < | ||
| + | root@orangepizero: | ||
| + | root@orangepizero:/ | ||
| + | green_led | ||
| + | |||
| + | </ | ||
| + | |||
| + | Podemos ver, por ejemplo, a que evento está asociado cada led ejecutando ''< | ||
| + | |||
| + | < | ||
| + | root@orangepizero:/ | ||
| + | none mmc0 mmc1 timer heartbeat backlight [default-on] rfkill0 phy1rx phy1tx phy1assoc phy1radio | ||
| + | root@orangepizero:/ | ||
| + | [none] mmc0 mmc1 timer heartbeat backlight default-on rfkill0 phy1rx phy1tx phy1assoc phy1radio | ||
| + | |||
| + | </ | ||
| + | |||
| + | O podemos encender el led rojo ejecutando ''< | ||
| + | |||
| + | ===== GPIO ===== | ||
| + | |||
| + | Podemos ver los GPIO disponibles ejecutando: | ||
| + | |||
| + | < | ||
| + | root@orangepizero: | ||
| + | GPIOs 0-383, platform/ | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | </ | ||
| + | |||
| + | Podemos activar un nuevo puerto GPIO, digamos el 15: | ||
| + | |||
| + | < | ||
| + | root@orangepizero: | ||
| + | |||
| + | </ | ||
| + | |||
| + | Ahora veremos el puerto activo: | ||
| + | |||
| + | < | ||
| + | root@orangepizero: | ||
| + | GPIOs 0-383, platform/ | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | |||
| + | </ | ||
| + | |||
| + | En el directorio ''< | ||
| + | |||
| + | ====== Bibliotecas útiles ====== | ||
| + | |||
| + | ===== Python ===== | ||
| + | |||
| + | ==== Instalación de virtualenv ==== | ||
| + | |||
| + | Para probar bibliotecas de Python instalamos: | ||
| + | |||
| + | < | ||
| + | sudo aptitude install python-pip | ||
| + | sudo aptitude install python-virtualenv | ||
| + | sudo aptitude install python-dev | ||
| + | |||
| + | </ | ||
| + | |||
| + | El caso es que el // | ||
| + | |||
| + | < | ||
| + | pip install --upgrade pip | ||
| + | pip install --upgrade virtualenv | ||
| + | |||
| + | </ | ||
| + | |||
| + | Despues de eso ya he podido usar // | ||
| + | |||
| + | ==== orangepi_PC_gpio_pyH3 ==== | ||
| + | |||
| + | Tenemos dos repos disponibles: | ||
| + | |||
| + | El repositorio original con las librerías // | ||
| + | |||
| + | < | ||
| + | git clone https:// | ||
| + | |||
| + | </ | ||
| + | |||
| + | Y un fork del repositorio original **ya adaptado** | ||
| + | |||
| + | < | ||
| + | git clone https:// | ||
| + | |||
| + | </ | ||
| + | |||
| + | **IMPORTANTE: | ||
| + | |||
| + | Por ejemplo: la definicion de // | ||
| + | |||
| + | < | ||
| + | { " | ||
| + | |||
| + | </ | ||
| + | |||
| + | Nos clonamos el repo. Vamos a hacer todas las pruebas desde la cuenta de **root**. | ||
| + | |||
| + | Creamos un entorno para pruebas y lo activamos: | ||
| + | |||
| + | < | ||
| + | virtualenv test_pyH3_zero | ||
| + | source test_pyH3_zero/ | ||
| + | |||
| + | </ | ||
| + | |||
| + | Compilamos la biblioteca: | ||
| + | |||
| + | < | ||
| + | cd orangepi_PC_gpio_pyH3 | ||
| + | python setup.py install | ||
| + | |||
| + | </ | ||
| + | |||
| + | Y ya podemos probar los ficheros de ejemplo: | ||
| + | |||
| + | < | ||
| + | examples/ | ||
| + | examples/ | ||
| + | |||
| + | </ | ||
| + | |||
| + | El resto de ejemplos no van a funcionar, están escritos para la // | ||
| + | |||
| + | ===== Acceso desde C ===== | ||
| + | |||
| + | ==== pyA20 ==== | ||
| + | |||
| + | La biblioteca de Python // | ||
| + | |||
| + | < | ||
| + | cd pyA20 | ||
| + | ls | ||
| + | gpio/ i2c/ __init__.py | ||
| + | |||
| + | </ | ||
| + | |||
| + | Nos interesa probar las bibliotecas en los directorios // | ||
| + | |||
| + | Probamos el acceso al // | ||
| + | |||
| + | < | ||
| + | #include < | ||
| + | sunxi_gpio_init(); | ||
| + | sunxi_gpio_set_cfgpin(SUNXI_GPA(17), | ||
| + | while(1) { | ||
| + | sunxi_gpio_output(SUNXI_GPA(17), | ||
| + | sleep(1); | ||
| + | sunxi_gpio_output(SUNXI_GPA(17), | ||
| + | sleep(1); | ||
| + | } | ||
| + | |||
| + | </ | ||
| + | |||
| + | ==== WiringOP-Zero ==== | ||
| + | |||
| + | Esta biblioteca imita a la // | ||
| + | |||
| + | Tenemos un fork que viene preparado para la Orange Pi Zero disponible aquí: | ||
| + | |||
| + | < | ||
| + | https:// | ||
| + | |||
| + | </ | ||
| + | |||
| + | GPIO funciona completamente y al parecer aun no han testeado el i2c (tiene mala pinta) | ||
| + | |||
| + | Para compilarla seguimos las instrucciones: | ||
| + | |||
| + | < | ||
| + | git clone https:// | ||
| + | cd WiringOP-Zero | ||
| + | chmod +x ./build | ||
| + | sudo ./build | ||
| + | |||
| + | </ | ||
| + | |||
| + | Podemos comprobar que todo se ha instalado correctamente: | ||
| + | |||
| + | < | ||
| + | gpio readall | ||
| + | | ||
| + | | H2+ | wPi | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | ||
| + | | H2+ | wPi | | ||
| + | | ||
| + | |||
| + | </ | ||
| + | |||
| + | Instalamos las i2c-tools ''< | ||
| + | |||
| + | ==== WiringPI-Python-OP ==== | ||
| + | |||
| + | Una receta para compilar WiringPI-Python-OP | ||
| + | |||
| + | Edited by nopnop2002 at 2017-3-18 22:51 | ||
| + | |||
| + | diyer replied at 2017-3-6 06:03 can someone explain how to map wiringPO on zero plaese? | ||
| + | |||
| + | You can update WiringPi-Python-OP to WiringPi-Python-OP-ZERO. | ||
| + | |||
| + | 1.Download [WiringOP libary for the Orange Pi Zero] from here. | ||
| + | |||
| + | https:< | ||
| + | |||
| + | 2.Download [[# | ||
| + | |||
| + | https:< | ||
| + | |||
| + | 3.Replace base library | ||
| + | |||
| + | cd WiringPi-Python-OP rm -R WiringPi cp -R $HOME/ | ||
| + | |||
| + | 4.Build WiringPi-Python-OP-ZERO library | ||
| + | |||
| + | sudo apt-get install python-dev python-setuptools swig swig2.0 -python wiringpi.i sudo python setup.py install cd tests sudo python test.py | ||
| + | |||
| + | WiringPi-Python-OP-ZERO have there pin. PysPin PinInLib 1(3.3V) 2(5V) 3 8 4(5V) 5 9 6(GND) 7 7 8 15 9(GND) 10 16 11 0 12 1 13 2 14(GND) 15 3 16 4 17(3.3V) 18 5 19 12 20(GND) 21 13 22 6 23 14 24 10 25(GND) 26 11 | ||
| + | |||
| + | This is same as RPI TYPE A or B | ||
| + | |||
| + | ===== Referencias ===== | ||
| + | |||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | ====== Distribuciones disponibles para Orange Pi Zero ====== | ||
| + | |||
| + | ===== Armbian oficial ===== | ||
| + | |||
| + | En la página oficial de [[https:// | ||
| + | |||
| + | ==== Ubuntu Server (legacy kernel) ==== | ||
| + | |||
| + | Es la versión estable | ||
| + | |||
| + | ==== Ubuntu Server (mainline kernel) ==== | ||
| + | |||
| + | Es la versión de desarrollo. | ||
| + | |||
| + | ===== Orange Pi oficial ===== | ||
| + | |||
| + | Tiene [[http:// | ||
| + | |||
| + | ===== Diet Pi ===== | ||
| + | |||
| + | En [[http:// | ||
| + | |||
| + | ====== Monitorizar temperatura ====== | ||
| + | |||
| + | Podemos ver estadísticas de nuestra OPI con: | ||
| + | < | ||
| + | |||
| + | sudo armbianmonitor -m | ||
| + | |||
| + | Stop monitoring using [ctrl]-[c] | ||
| + | Time CPU load %cpu %sys %usr %nice %io %irq CPU | ||
| + | 21:04:18: 1152MHz | ||
| + | 21: | ||
| + | 21: | ||
| + | 21: | ||
| + | 21: | ||
| + | 21: | ||
| + | 21: | ||
| + | 21: | ||
| + | 21: | ||
| + | 21: | ||
| + | 21: | ||
| + | 21: | ||
| + | 21: | ||
| + | 21: | ||
| + | 21: | ||
| + | |||
| + | </ | ||
| + | |||
| + | También podemos instalar RPi-Monitor con el comando: | ||
| + | |||
| + | < | ||
| + | sudo armbianmonitor -r | ||
| + | |||
| + | </ | ||
| + | |||
| + | Una vez instalado podemos visitar desde nuestro navegador la dirección ip de nuestra OPI Zero // | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | ¡Ojo! Las gráficas no se refrescan automáticamente hay que recargar la página. | ||
| + | |||
| + | Para desinstalar el RPi-Monitor basta con: | ||
| + | < | ||
| + | |||
| + | sudo aptitude uninstall rpimonitor | ||
| + | |||
| + | </ | ||
| + | |||
| + | ====== Referencias ====== | ||
| + | |||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | * [[http:// | ||
| + | * [[https:// | ||
| + | * [[http:// | ||
| + | |||
| + | ** | ||
| + | |||