Después de estar pelándome para montar y programar un scanner de presencia Bluetooth en modo clásico con el Wemos D1 y los módulos BT HC-05 , no había forma de que me respondiera al comando AT+INQ? , tras perder unas cuantas horas vi en un articulo que a partir del firmware 2.0 solo funcionaban en modo esclavo , este modo por desgracia no permite el comando inquiry , mas información aqui , lo intente con el ESP32 que teóricamente tiene BLE y Bluetooth clásico , pero en los firmwares habituales solo viene activado el BLE por lo que tras unas pruebas quedo descartado.
Empecé a mirar diferentes opciones para hacer el scanner bluetooth y tras investigar me decidí por comprar un par de las nuevas PI Zero 2 W y ver si lo conseguía de esa forma , el problema es el inexistente stock actual , los precios en aliexpress estan a cuatro veces el precio oficial , y en wallapop lo mismo , al final directamente en la zona de partners de la pagina de rapsberry encontre uno en España que tenia a 15€ cada una, aunque las tuve que comprar de una en una , supongo que para evitar la especulación ,
Estas son las especificaciones técnicas de la Raspberry Pi Zero 2 W
RASPBERRY PI ZERO 2 W | |
---|---|
DIMENSIONES Y PESO | 65 x 30 mm16 gramos |
PROCESADOR | Broadcom BCM2710A1Cuatro núcleos ARM Cortex-A53 a 1 GHz |
MEMORIA RAM | 512 MB LPDDR2 |
CONECTIVIDAD | Wi-fi 2,4 GHz 802.11b/g/nBluetooth 4.2 (BLE)1x Micro USB 2.0 (OTG)1x Mini HDMI1x Micro USB para la alimentaciónToma de E/S GPIO de 40 pinesRanura para tarjetas microSDConector de cámara CSI-2 |
MULTIMEDIA | Descodificación H.264, MPEG-4 (1080p30)Codificación H.264 (1080p30)Gráficos OpenGL ES 1.1, 2.0 |
OTROS | Pines de vídeo compuesto y reset mediante puntos de soldadura de texto |
PRECIO | 16,50 euros |
El factor forma es exactamente el mismo que la Zero W , por lo que se pueden aprovechar todos los accesorios de la versión precia de Pi zero
Una vez desembalado y con una uSD de 32Gb procedemos a su configuración previa
Instale Ubuntu 20.04 pero no se lleva bien con la parte Bluetooth de la placa no reconociéndolo, por ello al final monte Raspian
Lo primero instalar Raspbian en la tarjeta uSD pondremos en la raíz un fichero llamado ssh sin extensión con el contenido en blanco y pondremos un fichero llamado wpa_supplicant.conf donde configuraremos las opciones de conexión de nuestra pi , el contenido tiene que ser similar a este , adaptándolo a las necesidades de cada uno
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 country=ES network={ ssid="Wifi_1" psk="Contraseña_1" key_mgmt=WPA-PSK priority=100 } network={ ssid="Wifi_2" psk="Contraseña_2" key_mgmt=WPA-PSK priority=0 } network={ ssid="Wifi_3" psk="Contraseña_3" key_mgmt=WPA-PSK priority=50 }
Una vez arrancado y localizada la ip del dispositivo entraremos por ssh con usuario pi y contraseña raspberry
Crearemos un nuevo usuario y le daremos permisos de acceso
sudo useradd antonio sudo passwd antonio sudo usermod antonio -a -G pi,adm,dialout,cdrom,sudo,audio,video,plugdev,games,users,input,netdev,spi,i2c,gpio
Acto seguido cambiaremos la contraseña del usuario pi
sudo passwd pi
Actualizaremos los paquetes del sistema a la ultima version
sudo apt-get update sudo apt-get upgrade -y
Cambiaremos el nombre del equipo (hostname) con raspi-config
sudo raspi-config sudo reboot
Instalaremos unas aplicaciones que son siempre utiles
sudo apt install net-tools sudo apt install nano sudo apt install htop
Instalaremos Samba y crearemos las carpetas a compartir
sudo apt-get install samba mkdir /home/antonio mkdir /home/antonio/Containers mkdir /home/antonio/Containers/dockercompose chmod -R 777 /home/antonio/Containers
Haremos una copia de la configuración de samba y lo modificaremos según nuestras necesidades añadiendo esto a smb.conf
cp /etc/samba/smb.conf /etc/samba/smb.conf.bak sudo nano /etc/samba/smb.conf [global] ntlm auth = true [Containers] comment = directorio compartido Containers path = /home/antonio/Containers valid users = antonio public = no writable = yes vfs objects = recycle recycle:repository = Recycle Bin create mask=0777 directory mask=0777
Pondremos la contraseña al usuario de Samba y reiniciamos el servicio , entonces deberíamos poder conectarnos sin problemas a la carpeta compartida
sudo smbpasswd -a antonio sudo service smbd restart sudo service smbd start sudo service smbd status \\192.168.1.XXX\Containers
Instalaremos docker , luego ya jugaremos con docker y le iremos sacando partido
sudo apt install docker.io sudo apt install docker-compose sudo systemctl status docker service docker restart
Como monitor para dockers a mi personalmente me gusta CTOP , lo instalaremos de esta manera
sudo wget https://github.com/bcicen/ctop/releases/download/0.7.6/ctop-0.7.6-linux-amd64 -O /usr/local/bin/ctop sudo chmod +x /usr/local/bin/ctop
Crearemos una tarea en cron para que se reincie de forma automatica cada semana
sudo crontab -e #Reinicio semanal 0 5 * * 1 /sbin/shutdown -r now
Al tener poca memoria optimizaremos creando un mayor espacio de swap
sudo dphys-swapfile swapoff sudo nano /etc/dphys-swapfile CONF_SWAPSIZE=2048 sudo dphys-swapfile setup sudo dphys-swapfile swapon
Instalaremos un watchdog para reiniciar si no hay conectividad
sudo apt-get install watchdog sudo cp /etc/watchdog.conf /etc/watchdog.conf.backup sudo nano /etc/watchdog.conf Añadir # Watchdog ping: if unresponsive, reboot: interface = wlan0 # use interface wlan0 ping-count = 5 # ping 5 times ping = 192.168.1.1 # ping test destination IP address # Change default interval from 1 second to 20: interval = 300 # perform watchdog checks every 300 seconds
Para aumentar algo la justa potencia de esta pi evitaremos que entre en modo ahorro energia , podemos consultar el estado actual con :
sudo iw dev wlan0 get power_save power_save: on
Para deshabilitarlo insertermos en /etc/rc.local la siguiente linea
/sbin/iw dev wlan0 set power_save off
Una de las cosas que lleva muy mal la Pi Zero es lo de apagar a las bravas , por ello me gusta poner un pulsador de apagado entre los pines 37 y 39 , GPIO 26 y GND para que así el apagado sea el correcto
Crearemos un fichero que se llame piShutdown.py que contendrá este código , usaremos este mismo modulo para hacer otras cosas , pero eso será mas adelante
from gpiozero import Button #import button from the Pi GPIO library import time # import time functions import os #imports OS library for Shutdown control stopButton = Button(26) # defines the button as an object and chooses GPIO 26 while True: #infinite loop if stopButton.is_pressed: #Check to see if button is pressed time.sleep(1) # wait for the hold time we want. if stopButton.is_pressed: #check if the user let go of the button os.system("shutdown now -h") #shut down the Pi -h is or -r will reset time.sleep(1) # wait to loop again so we don't use the processor too much.
comprobaremos que funciona correctamente ejecutándolo y cerrado contacto entre ambos pines
sudo python /home/antonio/piShutdown.py
Para que se cargue al inicio lo incluiremos en el fichero /etc/rc.local
sudo nano /etc/rc.local
Añadiremos la llamada antes de la linea exit 0
sudo python /home/antonio/piShutdown.py & exit 0
Ahora instalaremos ZRAM que comprime los datos de la swap y los almacena en la RAM, no utilizando la tarjeta SD de la Raspberry ganando mayor velocidad ,esto lo haremos siguiendo estos pasos.
sudo wget -O /usr/bin/zram.sh https://raw.githubusercontent.com/Bash-Projects/rpi_zram/master/zram.sh sudo chmod +x /usr/bin/zram.sh mkdir ~/scripts
Crear el fichero con nano
nano /home/antonio/scripts/zram.sh
E insertar este contenido
#!/bin/bash /usr/bin/zram.sh &
Lo añadimos al crontab
sudo crontab -e
Añadir esta linea
@reboot ( sleep 60 ; sudo /home/antonio/scripts/zram.sh )
Y solo queda reiniciar para ver los cambios
sudo reboot now
Bonus tip , para poner a cero todo el espacio libre , esto nos ira muy bien a la hora de sacar copias de nuestra uSD , yo suelo usar Win32DiskImager , y a la hora de comprimir esta imagen se nota muchísimo en el espacio total , tarda un rato pero vale la pena
#Poner a cero espacio en blanco sudo cat /dev/zero > zero.file sync sudo rm zero.file
Problemas
No vemos el uso de memoria y de CPU en el monitor de dockers , tenemos que modificar /boot/cmdline.txt y con nano añadir al final esto
cgroup_enable=memory cgroup_memory=1 swapaccount=1
Pendiente
Tengo pendiente de que me llegue e instalarle este shield para alimentarla directamente en una toma USB , lo pads de la version 1 y 2 son compatible
Situación de los pads en la pi zero 2 w
En futuras entradas veremos como sacarle todo el partido a esta maravilla creando nuestros dockers y dandole mas partido , son los mejores 15€ gastados
A pesar de solo tener 512Mb de RAM y parecer unas prestaciones justas la verdad es que no deja de sorprenderme , para muestra el consumo de CPU y ram