Archivo de la categoría: Curso Fundamentos IoT

Material Curso Smart Cities

Para el curso on-line “Fundamentos IoT y Desarrollo con Node-RED para Smart Cities”, el material necesario por parte de los Asistentes para realizarlo es:

  • 1 PC o Portátil con conexión a internet
  • Para seguir el curso on-line es recomendable dos pantallas, una para seguir el vídeo y otra para programar en Node-RED.

El PC de cada asistente deberá tener un sistema operativo instalado, ya sea un sistema Windows, MacOS o Linux. Las licencias del Sistema Operativo y el software que tenga correrán a cargo del cliente/alumno.

  • Nodo Edge/Gateway. Instalación Node-RED. Recomendable usar Raspberry Pi + tarjeta SD 16Gb + alimentador conectada a Internet por alumno, pero podría usarse una máquina virtual o en un servidor cloud. Opcionalmente puede usarse instancias en la nube de Node-RED desde el servidor de https://www.aprendiendoarduino.com/ 

Las Raspberry Pis se usarán como instancias de Node-RED y nodos edge a los que se conectan los nodos remotos, por lo que no conectaremos sensores/actuadores/periféricos a las Raspberry Pi.

  • Nodos remotos por asistente compuesto por el siguiente material:
    • 2x Wemos D1 min o NodeMCU o equivalente
    • 1x shields para wemos D1 mini relé o equivalente
    • 1x shields para wemos D1 mini neopixel o equivalente
    • 1x shields para wemos D1 mini oled o equivalente
    • 1x shields para wemos D1 mini temperatura (puede ser DHT o
    • de temperatura) o equivalente
    • 1 x Cable USB para programar Wemos

Si el alumno tiene algún HW con que quiera interactuar, puede presentarlo y lo integramos en las prácticas. El HW puede estar tanto en el aula como remotamente en su casa, oficina, etc…

Servicios Cloud para el Curso

Se usará un broker común para comunicar todos los dispositivos: mqtts://aprendiendonodered.com:8883

Los alumnos recibirán usuario y contraseña para acceder al broker con permisos de lectura y escritura en smartcities/#

Base de datos MySQL en https://enriquecrespo.com/phpmyadmin/ donde los alumnos podrán usar para almacenar datos. Los alumnos recibirán las credenciales de acceso.

Base de datos InfluxDB en https://enriquecrespo.com:8086/ donde los alumnos podrán usar para almacenar datos. Los alumnos recibirán las credenciales de acceso.

Grafana en https://enriquecrespo.com:3000/ para representar gráficamente los datos. Recibirán por correo las credenciales de acceso.

Otros servicios programados con Node-RED en aprendiendonodered.com: API, Open Data, servidor FTP, gateway servicios de terceros, simulación de datos, etc… y servicios self hosted (gotify, thingsboard, thinger.io, etc…)

Interacción con servicios cloud de terceros como: APIs, Open Data, Cámaras/Imágenes, Plataformas IoT, Redes Sociales, Servicios de Mensajería, Servicios de alertas, email, etc…

Topología de Prácticas

Presentación Curso Smart Cities

Título: “Fundamentos IoT y Desarrollo con Node-RED para Smart Cities”

El curso semipresencial “Fundamentos IoT y Desarrollo con Node-RED para Smart Cities” ha sido diseñado para conocer los fundamentos de IoT en aplicaciones de Smart Cities para capacitar en nuevas tecnologías. Este curso está enfocado en dar a conocer las nuevas tecnologías utilizadas en Smart Cities, con el fin de operar e integrar las plataformas IoT.

Motivación

Gracias a las herramientas libres/Open Source es posible democratizar el IoT y la industria 4.0. Antes se necesitaba muchísimo dinero no solo en HW y licencias de SW, sino en consultores que hacen un diseño a medida y realizan la integración de los sistemas, ahora no solo el SW libre y el HW libre y barato, sino que la comunidad da soporte a las dudas, hace documentación y tutoriales, así como librerías para facilitar el trabajo.

En la industria conectada e IoT, cada vez se está haciendo más popular el uso de Node-RED debido a su estabilidad, continuo desarrollo y aportaciones externas que hacen de ella una herramienta de programación utilizada para conectar dispositivos de hardware, APIs y servicios de internet.

Node-RED es una herramienta de programación (Low Code Programming) que se utiliza para conectar dispositivos de hardware, APIs y servicios de internet. Adecuado para los equipos dedicados al Internet de las cosas ( IoT) y personal dedicado al diseño y prueba de soluciones para la comunicación de equipos de planta con aplicaciones de IT. Dado que la mayoría de dispositivos IoT para industria 4.0 posibilitan realizar un programa de control con la herramienta de Node-Red, el dominio de dicha herramienta permitirá al equipo IoT explorar y ampliar las soluciones que ofrece.

Objetivos

El objetivo de este curso es conocer las tecnologías necesarias para el desarrollar soluciones IoT/Smart Cities y valiéndonos para ello de herramientas, tecnologías, protocolos y software libre/open source que hay a nuestra disposición, en especial el uso de Node-RED, desarrollo e integración con sistemas externos y plataformas enfocadas IoT/Smart Cities

Con los conocimientos adquiridos, los asistentes aprenderán las tecnologías necesarias para hacer aplicaciones IoT/Smart Cities sencillas o integrar desarrollos propios en sistemas ya implantados.  Se adquirirán conocimientos en cuanto manejo, montaje y parametrización de redes de comunicación IoT, protocolos IoT y hardware IoT.

Se aprenderá a usar Node-RED, un framework enfocado a IoT para programar, automatizar e integrar plataformas IoT.

Metodología Curso On-Line

El curso se realizará entre el 3 de mayo y el 9 de junio de 2022.

El curso semipresencial consiste en 36 horas de formación, repartidas de la siguiente forma:

  • 10 sesiones on-line en directo de 3 horas cada una los lunes y miércoles de 17:00 a 20:00 entre el 3 de mayo y el 1 de junio de 2022. Se realizará un descanso de 10-15 minutos a la mitad de las sesión.
  • Una sesión presencial de 6 horas el 9 de junio de 2022 en las instalaciones del cliente, que se organizará a lo largo del curso.

La plataforma en vídeo usada será https://meet.jit.si/aprendiendoarduino y se grabarán todas las sesiones. En casos de problemas con esta plataforma se podrá usar Google Meet.

Los recursos utilizados para la realización de este curso son:

Toda la documentación será on-line con el objetivo de mantenerla actualizada y no con un documento físico que se queda obsoleto rápidamente. Después de finalizar el curso toda la documentación on-line seguirá estando disponible de forma pública.

Toda la documentación está liberada con licencia Creative Commons.

Reconocimiento – NoComercial – Compartir Igual (by-nc-sa): No se permite un uso comercial de la obra original ni de las posibles obras derivadas, la distribución de las cuales se debe hacer con una licencia igual a la que regula la obra original.

Aprendiendo Arduino by Enrique Crespo is licensed under a Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional License.

Requisitos

Para la realización de este curso es necesario tener conocimientos básicos o experiencia en algunas de estas áreas: programación, redes TCP/IP, redes inalámbricas, protocolos de comunicación, bases de datos, uso de sistemas linux, microcontroladores, autómatas, electrónica, uso de sensores, actuadores, etc…

Es recomendable un conocimiento medio de Inglés puesto que gran parte de la documentación oficial de referencia está en Inglés.

Programación del Curso

FechaTemarioHoras On-line (live)Prácticas
Día 1
3 de mayo
17:00-20:00
Presentación
Fundamentos IoT
Verticales IoT/Smart Cities
1h
1h 30m
30m
0
Día 2
4 de mayo
17:00-20:00
Hardware IoT (1/2)
Comunicaciones IoT (1/2)
1h
1h 
1h – Práctica 1: Instalación y Configuración Raspbian
Día 3
9 de mayo
17:00-20:00
Hardware IoT (2/2)
Comunicaciones IoT (2/2) 
1h
1h
1h – Práctica 2: Sensorización y Comunicación con ESP8266 (1/2)
Día 4
11 de mayo
17:00-20:00
Protocolos IoT (1/2)
2h1h – Práctica 2: Sensorización y Comunicación con ESP8266 (2/2)
Día 5
16 de mayo
17:00-20:00
Protocolos IoT – MQTT (2/2)1h 30m1h 30m – Práctica 3: Wifi + MQTT con ESP8266
Día 6
18 de mayo
17:00-20:00
Administración Node-RED (1/2)1h 30m1h 30m – Práctica 4: Instalar y configurar Node-RED (1/2)
Día 7
23 de mayo
17:00-20:00
Administración Node-RED (2/2)1h 30m1h 30m – Práctica 4: Instalar y configurar Node-RED (2/2)
Día 8
25 de mayo
17:00-20:00
Programación con Node-RED (1/3)2h 1h – Práctica 5: Desarrollo Node-RED: MQTT y Dashboard
Día 9
30 de mayo
17:00-20:00
Desarrollo con Node-RED (2/3)2h1h – Práctica 5: Desarrollo Node-RED: MQTT y Dashboard (1/2)
Día 10
1 de junio
17:00-20:00
Dashboard con Node-RED2h1h – Práctica 5: Desarrollo Node-RED: MQTT y Dashboard (2/2)
Día 11
9 de junio
8:00-14:00
Sesión presencial en las instalaciones del cliente.
Plataformas IoT
2h2h – Práctica 6: Desarrollo Node-RED: BBDD y Tratamiento Datos
2h – Práctica 7: Integración de Datos en Plataforma IoT
TOTAL21h 30m14h 30m

Contenido del Curso

Toda la documentación del curso y el código usado es libre y accesible desde: https://www.aprendiendoarduino.com/cursos/fundamentos-iot-y-desarrollo-node-red-para-smart-cities/ 

Contenido:

  • Fundamentos IoT
  • Hardware IoT
  • Comunicaciones IoT
  • Protocolos IoT
  • Administración Node-RED
  • Desarrollo con Node-RED

Presentaciones

  • ¿Nombre?
  • Breve presentación con el rol/puesto y aplicación de los puntos del curso al trabajo.

Contacto

Para cualquier consulta durante el curso y en cualquier otro momento mediante email: aprendiendoarduino@gmail.com

Twitter @jecrespo: https://twitter.com/jecrespom

Y más información sobre el curso y el autor: http://www.aprendiendoarduino.com/acerca-de/

Proyecto Final IoT con Node-RED

Descripción del Proyecto

Proyecto final full stack IoT con Node-RED aplicando los conceptos vistos.

Repositorio: https://github.com/jecrespo/proyecto-fundamentos-iot 

Material del Proyecto

M5stack: https://m5stack.com/collections/m5-core/products/basic-core-iot-development-kit 

M5Stick-C con sensor ENV:

Raspberry Pi Zero: Instalada en local con cámara y programada con Node-RED, usada como dispositivo remoto.

Raspberry Pi 3B+: Instalada en local con Node-RED, Mosquitto y BBDD, usada como servidor.

Wibeee instalado y publicando datos.

Wibeee ONE 2W

Si el alumno tiene algún HW con que quiera interactuar, puede presentarlo y lo integramos en las prácticas.

Esquema del Proyecto

Topología del proyecto IoT:

Datos Disponibles

Topic Map Nodo00 (Enrique):

  • educantabria/nodo00/wemos1/dato10s – publica mensaje numerado cada 10s
  • educantabria/nodo00/wemos1/dato60s – publica mensaje numerado cada 60s
  • educantabria/nodo00/wemos1/reset – publica mensaje cada reset o inicio
  • educantabria/nodo00/wemos1/led – suscrito (1 led ON, otro valor  led OFF)
  • educantabria/nodo00/wemos1/text – suscrito (muestra el mensaje por pantalla)
  • educantabria/nodo00/wemos1/rele – suscrito (1 relé ON, otro valor  relé OFF). Con firmware relé
  • educantabria/nodo00/wemos2/dato10s – publica mensaje numerado cada 10s
  • educantabria/nodo00/wemos2/dato60s – publica mensaje numerado cada 60s
  • educantabria/nodo00/wemos2/reset – publica mensaje cada reset o inicio
  • educantabria/nodo00/wemos2/led – suscrito (1 led ON, otro valor  led OFF)
  • educantabria/nodo00/wemos2/text – suscrito (muestra el mensaje por pantalla)
  • educantabria/nodo00/wemos2/temperatura – publica dato temperatura cada 10 segundos. Con firmware DS18B20
  • educantabria/nodo00/wibeee/# – datos eléctricos de Wibeee. Varios parámetros.
  • educantabria/nodo00/m5atom/aviso – suscrito (“alarma” – leds rojos, “aviso” – leds amarillos, “ok” – leds verdes, otro mensaje apaga)
  • educantabria/nodo00/m5atom/boton – al pulsar publica “press” o “longpress”
  • educantabria/nodo00/m5stack/boton/A – al pulsar botón A publica “press”
  • educantabria/nodo00/m5stack/boton/B – al pulsar botón B publica “press” 
  • educantabria/nodo00/m5stack/boton/C – al pulsar botón C publica “press”
  • educantabria/nodo00/m5stack/led – suscrito (1 dibuja en pantalla círculo rojo, otro valor  dibuja en pantalla círculo verde)
  • educantabria/nodo00/m5stack/text – suscrito, muestra por pantalla el texto
  • educantabria/nodo00/m5stick/temperatura – publica dato temperatura cada 1 segundo
  • educantabria/nodo00/m5stick/humedad – publica dato humedad cada 1 segundo
  • educantabria/nodo00/m5stick/presion – publica dato presión cada 1 segundo
  • educantabria/nodo00/m5stickplus/distancia – publica dato distancia cuando se activa
  • educantabria/nodo00/m5stickplus/button – al pulsar botón publica “press”
  • educantabria/nodo00/m5stickplus/led – suscrito (1 led ON, otro valor  led OFF)
  • educantabria/nodo00/m5stickplus/label  – suscrito (“red” – circulo rojo, “yellow” – circulo amarillo, “green” – circulo verde, “black” – círculo verde)
  • educantabria/nodo00/raspberry3/CPU – publica Node-RED el datos de CPU 
  • educantabria/nodo00/raspberry3/Temperatura – publica Node-RED el datos de temperatura procesador
  • educantabria/nodo00/raspberry3/Memoria – publica Node-RED el datos de memoria libre
  • educantabria/nodo00/raspberry3/Dashboard/# – publica Node-RED cualquier dato del Dasboard
  • educantabria/nodo00/raspberry3/Datos/# – suscrito Node-RED para recibir cualquier dato externo
  • educantabria/nodo00/raspberry3TT/CPU – publica Node-RED el datos de CPU 
  • educantabria/nodo00/raspberry3TT/Temperatura – publica Node-RED el datos de temperatura procesador
  • educantabria/nodo00/raspberry3TT/Memoria – publica Node-RED el datos de memoria libre
  • educantabria/nodo00/raspberry3TT/Dashboard/# – publica Node-RED cualquier dato del Dasboard
  • educantabria/nodo00/raspberry3TT/Datos/# – suscrito Node-RED para recibir cualquier dato externo
  • educantabria/nodo00/raspberryzero/tomafotomqtt – suscrito Node-RED un valor cualquiera enviado, toma una foto y publica en el topic educantabria/nodo00/raspberryzero/foto en baja resolución.
  • educantabria/nodo00/raspberryzero/foto – publica Node-RED una foto al mandar cualquier dato en el topic educantabria/nodo00/raspberryzero/tomafotomqtt 
  • educantabria/nodo00/raspberryzero/tomafotoweb suscrito Node-RED un valor cualquiera enviado, toma una foto y la actualiza en https://www.aprendiendoarduino.com/servicios/imagen.jpg en alta resolución

Topic Map Alumnos Nodoxx:

  • educantabria/nodo{xx}/wemos{y}/dato10s – publica mensaje numerado cada 10s
  • educantabria/nodo{xx}/wemos{y}/dato60s – publica mensaje numerado cada 60s
  • educantabria/nodo{xx}/wemos{y}/reset – publica mensaje cada reset o inicio
  • educantabria/nodo{xx}/wemos{y}/led – suscrito (1 led ON, otro valor  led OFF)
  • educantabria/nodo{xx}/wemos{y}/text – suscrito (muestra el mensaje por pantalla)
  • educantabria/nodo{xx}/wemos{y}/rele – suscrito (1 relé ON, otro valor  relé OFF). Con firmware relé
  • educantabria/nodo{xx}/wemos{y}/oled – suscrito (muestra el mensaje por pantalla oled). Con firmware oled
  • educantabria/nodo{xx}/wemos{y}/temperatura – publica dato temperatura cada 10 segundos. Con firmware DS18B20
  • educantabria/nodo{xx}/wemos{y}/matrix – suscrito (0 efecto y apaga, de 1 a 8 ilumina de 1 a 8 líneas de matriz). Con firmware matrix.
  • educantabria/nodo{xx}/raspberry{y}/CPU – publica Node-RED el datos de CPU 
  • educantabria/nodo{xx}/raspberry{y}/Temperatura – publica Node-RED el datos de temperatura procesador
  • educantabria/nodo{xx}/raspberry{y}/Memoria – publica Node-RED el datos de memoria libre
  • educantabria/nodo{xx}/raspberry{y}/Dashboard/# – publica Node-RED cualquier dato del Dasboard
  • educantabria/nodo{xx}/raspberry{y}/Datos/# – suscrito Node-RED para recibir cualquier dato externo

{xx} número de alumno

{y} número de sensor

AlumnoNº Nodo
SERGIO A.nodo01
Alberto B.nodo02
Pablo C.nodo03
Soraya C.nodo03
isaías C.nodo04
Mª del Mar E.nodo05
Santiago F.nodo06
José Ángel G.nodo07
Oscar G.nodo08
MARCOS G.nodo09
Jose Luis G.nodo10
Evelio H.nodo11
Roberto I.nodo12
RAMON L.nodo13
Eduardo P.nodo14
FRANCISCO JAVIER R.nodo15
Sara T.nodo16

Tareas del Proyecto

Fase 1 – Monitorización Local

Instalar nodo con todo el SW:

Instalar los sensores en la ubicación.

Fase 2 – Conectar a la Nube

Conectar sensores:

Fase 3 – Automatizar

Configurar y securizar Node-RED: 

Programar Node-RED y MQTT:

Fase 4 – Integración con Terceros

Integración de datos con terceros:

Instalación Raspbian

Raspberry Pi OS: https://en.wikipedia.org/wiki/Raspberry_Pi_OS 

Software quickstart: https://www.raspberrypi.org/learning/software-guide/quickstart/ 

Guías de iniciación:

Copia de Seguridad de Raspberry Pi

Si vamos a instalar de cero una Raspberry Pi que ya estaba funcionando, por ejemplo, con una versión antigua de Raspberry Pi OS o de Raspbian, es aconsejable hacer una copia de seguridad de nuestra tarjeta microSD.

En windows usar Win32DiskImager, no solo se puede copiar una imagen sino guardar una imagen de una tarjeta SD: Descarga https://sourceforge.net/projects/win32diskimager/

En Linux Terminal usar estos comandos:

  • backup: dd if=/dev/sdb of=sd.img bs=4M
  • restore: dd if=sd.img of=/dev/sdb bs=4M

Los comandos que usado en Linux o MAC:

  • df -h
  • sudo diskutil unmount /dev/disk2s1
  • sudo dd if=/dev/rdisk2 of=~/sd.img bs=1m

En MAC OS puedes usar apple pi baker: https://www.tweaking4all.com/software/macosx-software/applepi-baker-v2/

Formatear la tarjeta SD de la forma correcta.

Uno de los errores más frecuentes de los usuarios de tarjetas de memoria SD está en creer que este tipo de memorias funcionan igual que una memoria USB o un disco duro y se pueden formatear con las utilidades del sistema operativo. A diferencia de otros dispositivos de almacenamiento, las tarjetas SD incluyen una zona especial denominada “Protected Area”, empleada para temas de seguridad, que requiere un tratamiento especial. Adicionalmente – y dependiendo de la configuración y el tipo de tarjeta – es necesario un formateo ajustado al tipo de tarjeta.

Descargar e instalar la utilidad “SD Card Formatter” provista por la SD Association, los mismos que definen los estándares de este medio de almacenamiento. Después de instalada, se debe proceder a formatear la tarjeta SD antes de utilizarla. De esta forma se garantiza que se usará todo el espacio disponible de la tarjeta y se optimizará su desempeño y almacenamiento de acuerdo con las especificaciones del fabricante.

Descarga https://www.sdcard.org/downloads/formatter_4/eula_windows/index.html 

Instalar Imagen Raspberry Pi OS (Antiguo Raspbian)

Instalación recomendada usando Raspberry Pi Imager: https://www.raspberrypi.org/software/

Raspberry Pi Imager es la forma rápida y fácil de instalar Raspberry Pi OS y otros sistemas operativos en una tarjeta microSD, lista para usar con su Raspberry Pi. Vídeo: https://www.youtube.com/watch?v=J024soVgEeM 

Descargue e instale Raspberry Pi Imager con un lector de tarjetas SD. Coloque la tarjeta SD que usará con su Raspberry Pi en el lector y ejecute Raspberry Pi Imager.

Descargar imagen Raspbian zip: https://www.raspberrypi.org/downloads/

Descargar Raspbian with desktop desde: https://www.raspberrypi.com/software/operating-systems/ 

La versión por defecto de Raspbian es ahora una instalación mínima – le da el escritorio, el navegador Chromium, el reproductor multimedia VLC, Python, y algunos programas accesorios. Junto a esto se encuentra la imagen «Raspbian Full», que también incluye todos los programas recomendados: LibreOffice, Scratch, SonicPi, Thonny, Mathematica y varios otros.

El programa de software recomendado se puede utilizar para instalar o desinstalar cualquiera de los programas adicionales que se encuentran en la imagen completa; si descarga la imagen mínima y comprueba todas las opciones en el software recomendado, terminará con la imagen completa, y viceversa.

Buster la nueva versión de Raspbian: https://www.raspberrypi.org/blog/buster-the-new-version-of-raspbian/

Guía de instalación https://www.raspberrypi.org/documentation/installation/installing-images/README.md 

Para copiar la imagen a una SD usar:

Tutoriales de instalación de Raspbian:

Etcher

Etcher es una herramienta gráfica de escritura de tarjetas SD que funciona en Mac OS, Linux y Windows, y es la opción más fácil para la mayoría de los usuarios. Etcher también soporta la escritura de imágenes directamente desde el archivo zip, sin necesidad de descomprimirlas.

balenaEtcher es otra opción fácil para la mayoría de los usuarios de escribir imágenes en tarjetas SD, por lo que es un buen punto de partida. Si busca una alternativa en Windows, puede usar Win32DiskImager.

Pasos:

  • Descargar SO: Raspbian
  • Formatear microSD: SD Card Formatter 4.0
  • Flashear: Etcher
  • Acceder a la SD desde un PC: Partición “/boot” es accesible desde Windows, partición extendida.
  • Preconfiguración (recomendado para modo headless): SSH

Win32DiskImager

Con Win32DiskImager no solo se puede copiar una imagen sino guardar una imagen de una tarjeta SD, pero el uso de Etcher es más sencillo.

Descarga https://sourceforge.net/projects/win32diskimager/

Post Instalación

Una vez instalado Raspberry Pi OS, enchufar la Raspberry Pi, conectar un monitor, teclado y ratón a Raspberry Pi para seguir con su configuración.

En caso de no tener un monitor, se puede hacer una instalación headless:

Pasos para instalación headless:

Vídeos instalación Raspberry Pi OS headless:

Una vez tenemos la IP podemos conectarnos por SSH: https://www.raspberrypi.com/documentation/computers/remote-access.html#secure-shell-from-linux-or-mac-os o en windows instalar PuTTY: https://www.putty.org/ 

Conectarse por SSH con el usuario por defecto: pi y la contraseña por defecto: raspberry

Una vez dentro de la consola habilitar VNC (ya viene preinstalado) para conectarse al escritorio y continuar con la instalación desde el escritorio remoto: https://www.raspberrypi.com/documentation/computers/remote-access.html#enabling-the-vnc-server

  • sudo raspi-config
  • Navigate to Interfacing Options.
  • Scroll down and select VNC › Yes.

Ahora ya nos podremos conectar por VNC desde nuestro ordenador usando VNC Viewer: https://www.realvnc.com/es/connect/download/viewer/ 

Una vez entramos en Raspberry Pi por VNC, seguimos los pasos de wizard que nos indica para cambiar contraseña, cambiar el nombre (hostname), configurar y actualizar Raspberry Pi, etc…

Luego es posible hacer más configuraciones desde “Configuración de  Raspberry Pi” o desde comando de consola “sudo raspi-config”:

  • expand filesystem (solo versiones antiguas)
  • Cambiar la contraseña
  • Poner nombre (hostnamer): p.e. EnriquePi
  • Configurar resolución de pantalla
  • Habilitar VNC
  • Habilitar VNC conectividad en la nube (usuario y contraseña de VNC)
  • Habilitar SSH
  • Actualizar con sudo apt-get update  y sudo apt-get upgrade
  • Configuración: https://www.raspberrypi.org/documentation/configuration/

Conexión a la Red

La forma general de conectar a Internet la Raspberry Pi es mediante 

  • Conexión a Ethernet por DHCP
  • Conectar a Wifi por DHCP

Por este motivo no es necesario configurar nada si conectamos a un router con DHCP configurado para ethernet y en WiFi solo deberemos configurar la red wifi.

DHCP:

La propia Raspberry Pi podría hacer de servidor DHCP: https://www.raspberrypi.org/learning/networking-lessons/lesson-3/plan/ 

La Raspberry Pi 3 es la primera de la familia en incluir WIFI estándar de serie, lo que es un gran avance de salida y garantiza que se normalice las conexiones, a diferencia de las versiones previas en las que había que comprar un módulo WiFi y configurar la WIFI en función del modelo de adaptador que usasemos.

En el caso actual, la configuración de la WIFI se reduce a listar las redes disponibles y elegir la nuestra, para después proporcionar la contraseña de acceso. 

Detalle seleccion WIFI

Aquí tienes iconos para la configuración de varios elementos, como el volumen de audio la WIFI y hasta el Bluetooth, que recuerda viene de serie en la nueva Raspi3. Para configurar la WIFI pincha y selecciona el icono y selecciona la WiFi a conectarse.

Desplegando wifi

Una vez configurado comprobar que se puede navegar.

Aunque hayas conectado correctamente a Internet hay mil razones por las que necesitas conocer más información de tus conexiones IP, especialmente saber la IP para que al actuar como servidor saber a qué IP conectarnos.

Con el comando “ifconfig” podemos saber qué interfaces están conectados y que DNS usan o que Gateway o router estas usando como salida.

ifconfig 0

Para obtener los datos de ethernet teclea ifconfig eth0 y para wifi teclea ifconfig wlan0

Con el comando route -ne se pueden ver las rutas configuradas

Más información: https://www.prometec.net/conectar-a-internet/ 

Para obtener más información de las redes ver los directorios:

  • /sys/class/net/eth0
  • /sys/class/net/wlan0

Por ejemplo en el fichero address está la dirección MAC del controlador de red

En algunas ocasiones nos puede interesar asignar una IP fija, para ello seguir el tutorial: https://www.luisllamas.es/raspberry-pi-ip-estatica/ 

Los fichero de configuración de IP son:

  •  /etc/dhcpcd.conf
  • /etc/network/interfaces

Más información: https://raspberrypi.stackexchange.com/questions/39785/dhcpcd-vs-etc-network-interfaces 

También es conveniente cambiar el hostname, seguir este tutorial: https://www.howtogeek.com/167195/how-to-change-your-raspberry-pi-or-other-linux-devices-hostname/

Acceso Remoto

Una vez instalado vamos a asegurarnos el acceso remoto para no tener que tener conectado a un monitor y un teclado y ratón y podamos manejarlo.

Acceso Remoto: https://www.raspberrypi.org/documentation/remote-access/

SSH

La mejor forma de acceder a Raspberry Pi remotamente en modo comando en línea estando en la misma red es usando SSH. 

SSH sigue un modelo cliente-servidor. El cliente inicia una petición al servidor, que autentifica la comunicación e inicia el entorno Shell. Múltiples clientes pueden conectarse a un mismo servidor. Por defecto SSH emplea el puerto TCP 22 aunque puede cambiarse fácilmente. 

SSH dispone de más usos muy interesantes. por ejemplo, podemos copiar archivos de forma segura entre dos dispositivos, o tunelizar cualquier conexión de otra aplicación a través de un canal seguro SSH.

Para activar el servidor SSH en Raspberry Pi comprobar que estás activado en menu – Preferencias- Configuración de Raspberry Pi – Interfaces

Esta conexión sólo funciona en red local. Para poder acceder desde fuera, a través de Internet, hay que configurar un mapeo de puertos en el router. El proceso completo depende del router.

Para conectarnos desde Windows a SSH, deberemos emplear un cliente SSH para conectarnos con Raspberry Pi. El cliente más utilizado en Windows es Putty, que es Open Source y está disponible en https://www.putty.org/

Descargamos y ejecutamos Putty y nos aparece una ventana donde podemos introducir la dirección IP (o el nombre) de la Raspberry Pi. Al conectarnos se nos preguntará el nombre del usuario y la contraseña.

Más información:

VNC

La mejor forma de acceder a Raspberry Pi remotamente en modo escritorio estando en la misma red es usando VNC.

VNC es un programa de software libre basado en una estructura cliente-servidor que permite observar las acciones del ordenador servidor remotamente a través de un ordenador cliente. VNC no impone restricciones en el sistema operativo del ordenador servidor con respecto al del cliente: es posible compartir la pantalla de una máquina con cualquier sistema operativo que admita VNC conectándose desde otro ordenador o dispositivo que disponga de un cliente VNC portado.

Seguir este tutorial: https://www.raspberrypi.org/documentation/remote-access/vnc/README.md

La conexión de VNC de RealVNC se incluye con Raspbian. Consiste en el servidor de VNC, que permite controlar Raspberry Pi remotamente, y el VNC viewer, que permite que controlar ordenadores remotamente de su Raspberry Pi.

El servidor VNC debe habilitarse para poder conectarse remotamente, para ello ir a menu – Preferencias- Configuración de Raspberry Pi – Interfaces y asegurarse que VNC está activado.

Una vez activado establecer la conexión desde el ordenador instalando el VNC viewer: https://www.realvnc.com/en/connect/download/viewer/ y conectarse a la IP de nuestra Raspberry:

Con VNC también se puede establecer una conexión en la nube.

Más información:

Team Viewer

En el caso que queramos conectarnos a nuestra Raspberry Pi estando en cualquier parte del mundo, una buena opción es TeamViewer.

TeamViewer es un software informático privado de fácil acceso, que permite conectarse remotamente a otro equipo. Entre sus funciones están: compartir y controlar escritorios, reuniones en línea, videoconferencias y transferencia de archivos entre ordenadores.Team Viewer es gratuito para uso personal.

Web: https://www.teamviewer.com/es/ 

La instalación es muy simple solo hay que descargarse TeamViewer Host para raspberry Pi desde https://www.teamviewer.com/es/descarga/linux/ y acerse una cuenta en la web de TeamViewer https://www.teamviewer.com/es/ 

Enlace de descarga: https://download.teamviewer.com/download/linux/teamviewer-host_armhf.deb 

Instalar el fichero teamviewer-host_xxx_armhf.deb, simplemente haciendo doble click o con el comando “sudo dpkg -i filename.deb”

Si hay dependencias solucionarlo con  “sudo apt-get update” y “sudo apt-get -f upgrade”

Una vez instalado ejecutar TeamViewer en Raspberry Pi y poner las credenciales de la cuenta de TeamViewer

Finalmente acceder a https://login.teamviewer.com/LogOn con la cuenta de TeamViewer y ya podemos acceder a nuestra Raspberry Pi. Necesitaremos instalar el cliente de TeamViewer o la app de Chrome:

Solo para controlar la Raspberry Pi remotamente ejecutar el cliente “TeamViewer_Setup.exe” de esta forma:

Más información:

Instalación Software Raspberry Pi

Instalar servidor LAMP

El acrónimo LAMP está compuesto por las iniciales de sus cuatro componentes: Linux, Apache, MySQL y PHP. Estos forman la infraestructura en el servidor, que hace posible la creación y el alojamiento de páginas web dinámicas. Los componentes individuales se acumulan unos sobre otros, por lo que esta plataforma también recibe el nombre de LAMP stack (del inglés “apilar”).

Su funcionamiento es muy simple. Linux sirve como sistema operativo base para ejecutar el servidor web Apache. Este último no puede interpretar contenidos dinámicos, pero es aquí donde PHP entra a ejercer sus funciones de programación del lado del servidor. El proceso funciona entonces de la siguiente manera: Apache le envía un código fuente al intérprete PHP, incluyendo la información correspondiente sobre las acciones del visitante de la web, y permite el acceso a la base de datos MySQL. El resultado es devuelto a Apache y este se muestra finalmente en el navegador web del visitante.

El lenguaje de programación PHP es uno de los más extendidos para el desarrollo de páginas web. La ventaja de utilizar PHP para el desarrollo de páginas web es que nos permite crear páginas web dinámicas, es decir, que se generan cuando un usuario visita la página.

MySQL es un sistema de gestión de bases de datos relacional desarrollado bajo licencia dual: Licencia pública general/Licencia comercial por Oracle Corporation y está considerada como la base datos de código abierto más popular del mundo, y una de las más populares en general junto a Oracle y Microsoft SQL Server, sobre todo para entornos de desarrollo web.

La alternativa libre es mariaDB: https://mariadb.org/ 

Este proyecto monta un pequeño servidor web Apache con lo que podrías por ejemplo alojar tu propia página web entre otras cosas. Además, si despliegas alrededor de tu casa, por ejemplo, varios sensores y actuadores (temperatura, humedad, luces, etc…) comandados por Arduino, podrías utilizar la Raspberry Pi 3como centro de envío y recepción de datos a través de su red. Y por supuesto utilizar la página Web para mostrar y controlar los datos a través de Internet.

Instrucciones para su instalación:

#Update system

  • sudo apt-get update
  • sudo apt-get upgrade

#Install Apache2

  • sudo apt-get install apache2

Comprobar que accedemos entrando a la IP de la Raspberry Pi desde un navegador

La página web por defecto está en /var/www/html

Crear un fichero prueba.html en el directorio /var/www/html que contenga el texto: “HOLA MUNDO”

Para comprobar que funciona entrar desde un navegador a la dirección: http://ip_raspberry/prueba.html y ver que aparece el texto “HOLA MUNDO”

También podemos comprobar que funciona conectando un Arduino a la red de la Raspberry Pi y cargar este sketch: https://github.com/jecrespo/Curso-IoT-Open-Source/blob/master/Conecta_Raspberry/Conecta_Raspberry.ino 

Curso configuración Apache: https://plataforma.josedomingo.org/pledin/cursos/apache24/ 

#Install PHP

  • sudo apt-get install php libapache2-mod-php

La versión que se instala es la 7.

Para comprobar el funcionamiento crear un fichero llamado info.php y en su interior el código: <?php phpinfo(); ?>

Luego en un navegador ir a http://IP-raspberry/info.php

#Install MariaDB

  • sudo apt-get install mariadb-server mariadb-client php-mysql
  • sudo mysql_secure_installation
  • sudo service apache2 restart

Durante el proceso de instalación se pedirá el password de root de MySQL, poner el mismo que tiene el usuario pi de la Raspberry Pi y poner a Yes todas las opciones de mysql_secure_installation 

Estos comando instalan una BBDD MariaDB

Para comprobar que todo funciona ejecutar sudo mysql -u root -p y poner la contraseña, saldrá:

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 61
Server version: 10.1.23-MariaDB-9+deb9u1 Raspbian 9.0

Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

#Install MySQL (Opcional)

En caso de querer instalar MySQL usar estos comandos:

Más información:

#Install PhpMyAdmin

  • sudo apt-get install phpmyadmin

Durante el proceso pide la contraseña del usuario phpmyadmin de MySQL y el servidor a instalar el apache y poner yes en dbconfig-common

IMPORTANTE: Seleccionar con la barra espaciadora apache2 y asegurarse que aparece un asterisco que indica que se ha seleccionado.

En caso que no hayamos configurado el servidor web correctamente o queramos hacer una configuración de phpmyadmin después de la instalación, usar el comando: sudo dpkg-reconfigure -plow phpmyadmin

phpMyAdmin es una herramienta escrita en PHP con la intención de manejar la administración de MySQL a través de páginas web, utilizando Internet. Actualmente puede crear y eliminar Bases de Datos, crear, eliminar y alterar tablas, borrar, editar y añadir campos, ejecutar cualquier sentencia SQL, administrar claves en campos, administrar privilegios, exportar datos en varios formatos y está disponible en 72 idiomas. Se encuentra disponible bajo la licencia GPL Versión 2.

Para probar que funciona ver en un navegador: http://IP-raspberry/phpmyadmin con el usuario phpmyadmin y la contraseña usada.

El usuario phpmyadmin no tiene privilegios. Para crear un usuario “pi” con privilegios ejecutar:

  • sudo mysql -u root -p
  • CREATE USER ‘pi’@’localhost’ IDENTIFIED BY ‘tu_contrasena‘;
  • CREATE USER ‘pi’@’%’ IDENTIFIED BY ‘tu_contrasena‘;
  • GRANT ALL PRIVILEGES ON * . * TO ‘pi’@’localhost’; (Para acceso local)
  • GRANT ALL PRIVILEGES ON *.* TO ‘pi’@’%’;  (Para acceso remoto)
  • GRANT GRANT OPTION ON *.* TO ‘pi’@’localhost’; (Privilegios para dar permisos a otros usuarios)
  • FLUSH PRIVILEGES;

Para conectarnos desde otro servidor: mysql -h ip_raspberry -u root -p

#Install servidor ftp (VSFTPD) (Opcional)

  • sudo apt-get install vsftpd

Una vez instalado, configurar con: sudo nano /etc/vsftpd.conf 

Comentar estas dos opciones:

#local_enable=YES
#ssl_enable=NO

Y añadir al final del fichero:

# CUSTOM
ssl_enable=YES
local_enable=YES
chroot_local_user=YES
local_root=/var/www
user_sub_token=pi
write_enable=YES
local_umask=002
allow_writeable_chroot=YES
ftpd_banner=Welcome to my Raspberry Pi FTP service.

También necesitamos añadir el usuario pi al grupo www-data, dar la propiedad de la carpeta /var/www al usuario y al grupo www-data, cambiar la carpeta de inicio del usuario pi a la misma, y aflojar algunos permisos en la carpeta /var/www:

  • sudo usermod -a -G www-data pi
  • sudo usermod -m -d /var/www pi
  • sudo chown -R www-data:www-data /var/www
  • sudo chmod -R 775 /var/www

Y reiniciar el servicio: sudo service vsftpd restart 

Para comprobar que funciona usar un cliente ftp con https://filezilla-project.org/ y hacer una conexión con la siguiente configuración:

  • Host – 192.xxx.x.xxx (IP address)
  • Port – 21
  • Protocol – FTP (File Transfer Protocol)
  • Encryption – Use explicit FTP over TLS if available
  • Logon Type – Normal (username & password)
  • Username – pi
  • Password – [enter password]

Más información: 

Y si quisieramos instalar un wordpress: https://www.raspberrypi.org/learning/lamp-web-server-with-wordpress/

Con esto ya tenemos listo un servidor para recibir conexiones de arduino y guardar datos y mostrarlos

Recordar cada vez que se haga una modificación grande en Raspberry Pi hacer una copia de seguridad de la tarjeta SD con Win32DiskImager.

Descarga https://sourceforge.net/projects/win32diskimager/

Escribir el nombre de la imagen en la ruta donde los guardemos.

Y luego pulsar read. Una vez hecho esto, esperar a que el proceso finalice.

Probar LAMP con Arduino

Para probar el servidor LAMP que acabamos de instalar en nuestra Raspberry Pi vamos a usar Arduino y mandar datos de luminosidad de la sala usando un LDR.

Una fotorresistencia o LDR (por sus siglas en inglés “light-dependent resistor”) es un componente electrónico cuya resistencia varía en función de la luz.

Se trata de un sensor que actúa como una resistencia variable en función de la luz que capta. A mayor intensidad de luz, menor resistencia: el sensor ofrece una resistencia de 1M ohm en la oscuridad, alrededor de 10k ohm en exposición de luz ambiente, hasta menos de 1k ohm expuesto a la luz del sol. Aunque estos valores pueden depender del modelo de LDR.

El LDR actúa como una resistencia variable. Para conocer la cantidad de luz que el sensor capta en cierto ambiente, necesitamos medir la tensión de salida del mismo. Para ello utilizaremos un divisor de tensión, colocando el punto de lectura para Vout entre ambas resistencias. De esta forma:

Dónde Vout es el voltaje leído por el PIN analógico del Arduino y será convertido a un valor digital, Vin es el voltaje de entrada (5v), R2 será el valor de la resistencia fija colocada (10k ohm generalmente) y R1 es el valor resistivo del sensor LDR. A medida que el valor del sensor LDR varía, obtendremos una fracción mayor o menor del voltaje de entrada Vin.

Instalación:

Más información https://www.luisllamas.es/medir-nivel-luz-con-arduino-y-fotoresistencia-ldr/ 

Crear una base de datos llamada “DatosArduino” con una tabla llamada “luminosidad” que tenga 4 campos: “id” auto incremental y sea el campo clave, “fecha” de  tipo timestamp y que se actualice al actualizar, un campo “arduino” de tipo entero y un campo “IntensidadLuminosa” que sea de tipo entero.

O con la query:

CREATE TABLE `luminosidad` (
  `id` int(11) NOT NULL,
  `fecha` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  `arduino` int(11) NOT NULL,
  `IntensidadLuminosa` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

ALTER TABLE `luminosidad`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `luminosidad`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

Para insertar un dato:

INSERT INTO `luminosidad` (`arduino`, `IntensidadLuminosa`) VALUES ('22', '22');

Subir por FTP seguro los ficheros Graba_GET.php y Graba_POST.php a Raspberry Pi al directorio /var/www/html o crearlos con el comando nano:

Se puede probar que funciona ejecutando desde el navegador: http://127.0.0.1/Graba_GET.php?arduino=2&IntensidadLuminosa=89 

Ejecutar en Arduino estos sketches para GET o POST para mandar cada 5 segundos el dato de luminosidad:

Ver en la web de phpmyadmin los datos que se están subiendo y descargar en formato csv los datos guardados en unos minutos.

NOTA: Para ver los errores de PHP activar en /etc/php/7.0/apache2/php.ini la línea:

  • Development Value: E_ALL

Instalar Node-RED

No instalar la versión que aparece en el software recomendado de Raspberry Pi OS.

Seguir esta instalacióm: https://nodered.org/docs/getting-started/raspberrypi 

Ejecutar el comando para instalar y actualizar: bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)

Para ejecutar Node-RED en el arranque: sudo systemctl enable nodered.service

En caso de problemas ver el log con: node-red-log

Instalar Webmin

Webmin es una herramienta de configuración de sistemas accesible vía web para sistemas Unix, como GNU/Linux y OpenSolaris. Con él se pueden configurar aspectos internos de muchos sistemas operativos, como usuarios, cuotas de espacio, servicios, archivos de configuración, apagado del equipo, etcétera, así como modificar y controlar muchas aplicaciones libres, como el servidor web Apache, PHP, MySQL, DNS, Samba, DHCP, entre otros.

Web: http://www.webmin.com/

Instalación:

Para comprobar que se ha instalado acceder desde un navegador a https://ip_address:10000 con usuario pi y la contraseña

Más información:

Manejar GPIO Raspberry Pi

Blink Led

Antes de empezar recordar comprobar la posición de los pines porque en caso de error podemos dañar la Raspberry Pi ya que los GPIO no tienen ninguna protección.

  • Cuando conectes cables a los GPIO procura no equivocarte y fíjate bien.
  • Usa cables con recubrimiento del tipo Dupont Macho-hembra por ejemplo, y no acerques cables sin proteger a tus GPIO (Y mucho menos un destornillador) porque puedes hacer un corto con facilidad.
cables M-F
  • Una vez que conectes un cable hembra protegido, vuelve a mirar y asegúrate de que lo has conectado al pin que querías y no al de al lado.
  • Especial cuidado con los pines que uses para sacar 3V o 5V de tu Raspi. No dejes el otro extremo al aire: Asegúrate de conectarlo a algún sitio.
  • NO CONECTES NADA DE 5V si no estás seguro. Tu Raspberry funciona a 3.3V y meterle 5V en un pin puede suponer quemar el procesador central. 

Instalar las librerías para el uso de los pines GPIO desde Python, asegurandonos de tener actualizado Raspbian:

  • sudo apt-get update
  • sudo apt-get upgrade
  • sudo apt-get install python-dev
  • sudo apt-get install pyton-rpi.gpio

Tened en cuenta que en esta ocasión vamos a alimentar el LED con 3.3V (Que es lo que proporciona un pin de la Raspi) y que la intensidad que obtendremos será: 3.3 / 1K Ω = 3 mA, que no es mucho para iluminar un LED pero suficiente.

Esquema de GPIO:

Conectamos GND al pin 6 de la Raspberry y vamos a usar el pin 12 (GPIO 18) como control del encendido mediante una resistencia intermedia. El esquema de conexión es:

Abrir el IDLE de Python 3 para empezar nuestro programa:

Y copiar código:

import RPi.GPIO as gpio

import time

gpio.setmode(gpio.BOARD)
gpio.setup(12, gpio.OUT)

for  x in range ( 0, 10):

    gpio.output(12, True)
    time.sleep(0.5)

    gpio.output(12, False)
    time.sleep(0.5)

print “Ejecución finalizada”

Guardar el fichero con el nombre blink.py en /home/pi y ejecutarlo pulsando F5

Más información: