Guía básica de Raspberry Pi – instalando un sensor de temperatura y humedad

Nuestro glorioso Tech Admin, también conocido como El Vikingo, The flying Dutch o unreal4u para sus íntimos nos presenta una serie de guías para sacarle el jugo a tu Raspberry Pi. En este primer capítulo traemos los pasos para instalar un sensor de temperatura y humedad.

Hace un par de meses atrás (por allá en el invierno del 24 de Junio 2019), se lanzó de forma sorpresiva la nueva Raspberry Pi 4, así que su redactor presente se le ocurrió comprar uno de estos de forma inmediata… sólo para tener que esperar por un poco más de 2 meses antes que finalmente le llegara ya que no quedaba stock. La intención fue buena, la ejecución en cambio… menos mal que ya no tenemos el slogan “Lo leíste primero en Capa9”.

En el intertanto, ya muchísimo se ha hablado acerca de lo bueno, malo y feo de este aparato, pero para aquellos que han estado viviendo bajo una roca, un pequeño resumen:

Lo bueno:

  • La nueva Raspberry Pi 4 (de ahora en adelante simplemente rPi 4) incluye un procesador quad core basado en Cortex A74 en vez de la Cortex A53 como en la rPi 3b+.
  • La posibilidad de elegir entre el modelo con 1GB, 2GB y 4GB en RAM. Cabe señalar que encargamos la versión más jugosa posible y obviamente la primera que se agotó en tiempo récord: la versión de 4GB.
  • La rPi 4 trae además 2 puertos microHDMI con soporte para 4K a 60fps, alimentado gracias a la nueva VideoCore GPU que ya va en la sexta generación (VI) en vez de la IV como en rPi 3b+.
  • Mientras que la rPi 3b+ traía 4 conexiones USB, estos eran sólo 2.0. La rPi 4 trae igualmente 4 conexiones USB, pero esta vez son 2 puertos 2.0 y 2 puertos 3.0.
  • El puerto de alimentación igualmente obtuvo un upgrade, gracias a que ahora es un puerto USB-C en vez de un simple mini USB.
  • Por último, esta nueva rPi 4 también viene con un puerto Gigabit Ethernet en vez de un puerto que se limita a sólo 100Mbps.

Lo malo:

  • La Raspberry Pi Foundation (la organización que está detrás de esta pequeña maravilla) no preveyó lo exitoso que sería la versión de 4GB, dando como resultado un grave desabastecimiento al principio que recién ahora están empezando a solucionar.
  • No se puede bootear directamente desde los puertos USB 3.0. Solucionarán esto en el futuro a través de software, pero es algo a tener en cuenta ya que por el momento una tarjeta microSD ES necesaria para poder utilizar la rPi.

Lo feo:
Durante la época de diseño y posterior testeo… durante más de un año… a la Raspberry Pi Foundation nunca se les ocurrió probar un cable USB-C que tuviera una marca electrónica, dando como resultado que se les olvidó incluir una resistencia adicional en la placa haciendo que este dispositivo no se pueda ocupar con cables que tienen esta marca electrónica. Los cables que ocupan este tipo de marca son por ejemplo todos los que ha producido Apple.

raspberrypi4

En fin, no nos enfoquemos en lo negativo y veamos el lado positivo: con todos estos cambios, las aplicaciones que pueden hacer uso de este aparato se acrecentan bastante: una NAS casera ya está dentro de las posibilidades reales gracias a sus dos puertos USB 3.0 y sistemas que ocupan múltiples pantallas (digital signage) también se verán fuertemente beneficiadas.

Lo mejor de todo es el precio: incluso con todos estos cambios, el precio base de la rPi 4 con 1GB de RAM siga siendo la modesta suma de USD 35. Pequeño disclaimer si: ese es el precio por la placa madre. Hay que sumarle la fuente de poder, una tarjeta microSD, la carcaza y cables opcionales.

Sin embargo, lo que nos trae a esta guía será algo más simple que eso: en mi casa quiero monitorear la temperatura y unas cuantas cosas más que vendrán en el futuro, así que por lo pronto necesitaremos lo siguiente:

  • Raspberry Pi 4 (nótese que para estos propósitos, la 3b+ o incluso la original sirven)
  • Un DHT11 que nos permitirá monitorear no sólo la temperatura, sino que también humedad. Un DHT22 o un AM2302 igual sirven, sólo hay que ajustar una pequeña configuración. Recomiendo como mínimo un DHT22 ya que es más exacto que un DHT11: llenarán varias comas decimales en vez de… ninguno como la DHT11 pero lamentablemente es lo único que tengo en este momento.

Lo primero es bajar la distro que corresponde, para los rPi lo más recomendado es bajar Raspbian a menos que uno vaya a ocupar aplicaciones más específicas. Para bajar esto, se hace desde aquí: https://www.raspberrypi.org/downloads/raspbian/

Luego hay que formatear la tarjeta microSD. Como yo estoy ocupando un Mac, los pasos son los siguientes:

  1. Inserta la tarjeta microSD
  2. Abre la aplicación Utilidad de Discos
  3. Anota el número de la tarjeta SD (en mi caso era disk3s1, por lo tanto anotamos el número 3).
  4. Desmonta la unidad
  5. Descarga y descomprime la imagen
  6. En la terminal, ejecuta el siguiente comando:
    sudo dd bs=1m if=~/Downloads/X.img of=/dev/rdiskY

    Reemplazando la X y la Y respectivamente por lo que corresponde: la X por la imagen que acaban de bajar y la Y por el número de la tarjeta SD en paso 3.

  7. Cuando eso termine y como quiero dejar este sistema totalmente headless (sin gráficas), lo otro que es necesario es habilitar SSH cuando bootee el equipo. Para hacer esto, en la terminal pueden ejecutar lo siguiente:
    cd /Volumes/boot
    touch ssh

    Una vez hecho eso, la imagen queda lista.

  8. Desmonten la tarjeta, sáquenla del equipo flasheador e inserten la tarjeta en la rPi.

Cabe destacar que si no la van a conectar directamente a un cable ethernet, pueden habilitar que se conecte automáticamente a una wifi, creando un archivo llamado wpa_supplicant.conf con el siguiente contenido:

country=cl
update_config=1
ctrl_interface=/var/run/wpa_supplicant

network={
   scan_ssid=1
   ssid="LaSSIDDeSuRed"
   psk="LaContraseñaDeSuRed"
}

Una vez hecho eso y enchufada la rPi, empieza la diversión! Lo primero que tendremos que saber es a qué ip conectarnos. Echen un vistazo a su firewall y/o router para eso. En mi caso, fue la siguiente ip: 172.16.10.20.

En una terminal, conéctense ahora via SSH:

ssh [email protected]

El usuario predeterminado es pi y la contraseña predeterminada es “raspberry“. Les sugiero cambiarlo para que no tengan que googlear por este artículo cada vez que se quieran meter a la máquina.

Lo primero que haremos será actualizar a la última versión e instalar algunos paquetes que en mi caso siempre encuentro útiles, seguido de un reboot para empezar fresquitos:

sudo rm /etc/localtime && sudo ln -s /usr/share/zoneinfo/America/Santiago /etc/localtime
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install vim ncdu git
sudo reboot

Ahora empieza lo realmente interesante.

gpio-numbers-pi2

La imagen de arriba es justamente la razón por la que la Raspberry Pi se hizo tan popular: estos puertos permiten enchufar una cantidad de sensores increíbles y obtener la salida de ellas para poder hacer algo en otros puertos, lo único que se requiere es un poco de programación.

Como esta guía ya es bastante larga, partiré con un ejemplo sencillo que es simplemente leer datos desde el sensor de temperatura y humedad. Antes de conectar cualquier cosa apaguen su rPi, no lo hagan en caliente.

La parte del sensor es bastante sencilla: trae sólo 3 pines, uno para electricidad DC positivo, el otro negativo (tierra) y el tercero es el bus de datos.

dht11-01

Si tienen el mismo modelo que el que está arriba, lo más probable es que la del centro sea para datos.

El VCC lo conectaremos a un puerto que entregue 5v mientras que GND lo conectaremos a alguna tierra, la línea de datos se puede conectar al pin 17. Siéntanse libres de conectarlo a cualquier otro pin a su conveniencia, pero ajusten el código en ese caso.
Pequeña nota al respecto: si tienen una rPi4 con un buen cargador y un cable no tan largo, intenten primero conectarlo a la línea de 3.3v ya que el DHT11 tiene un rango operativo de entre 3.5v a 5.5v, sin embargo, durante mis pruebas, 3.3v fue más que suficiente.

Una vez hecho eso, nos meteremos via SSH a la raspberry de nuevo y ejecutaremos los siguientes comandos:

sudo apt-get install build-essential python-dev python3-pip
cd
mkdir .python-dependencies
cd .python-dependencies
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT/
sudo python3 -m pip install --upgrade pip setuptools wheel
sudo python3 setup.py install
cd
mkdir -p gpio/read-dht11
cd gpio/read-dht11/
touch read-sensor.py

En ese archivo colocaremos el siguiente código:

import Adafruit_DHT

humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT11, 17)

humidity = round(humidity, 2)
temperature = round(temperature, 2)

if humidity is not None and temperature is not None:
  print('{0:0.1f}|{1:0.1f}'.format(temperature, humidity))
else:
  print('')

Si tienen la DHT22 o la AM2302, cambien la siguiente línea por esto otro:

# Viejo:
humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT11, 17)

# Nuevo:
humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.DHT22, 17)
humidity, temperature = Adafruit_DHT.read_retry(Adafruit_DHT.AM2302, 17)

Ahora necesitamos correr este archivo:

python3 read-sensor.py

Y esto debería dar la siguiente salida (por supuesto que los valores van a ser distintos):

22.0|56.0

Qué significa esta cifra? Pues simple: hacen 22° C y hay una humedad relativa de un 56%. Ahora pueden hacer lo que ustedes quieran con esto! En lo personal, yo creé un script que sube estos datos a mi broker MQTT para que sea procesado por Home Assistant.

Y con eso concluye esta guía que se irá entregando en partes: en la próxima entrega veremos otra arista distinta y esta será la instalación de Home-Assistant. En el intertanto, pueden dejar sus comentarios en el siguiente thread.

Hasta la próxima!