Índice I. Primeros pasos con la RPi 1. Conexión con la RPi 1.1 Conexión inicial mediante Ethernet 1.2 Activación del servicio VNC 1.3 Conexión mediante VNC 1.4 Configuración WiFi 1.5 Creación de una red WiFi con nuestro móvil 2. Guía rápida de Linux 2.1 Superusuario - Comando sudo 2.2 Cómo (re)instalar el SO 3. Introducción a Python 3.1 ¿Qué es Python? 3.1.1 Variables 3.1.2 Scripts en Python 3.1.3 “Hola mundo” en un script de Python 3.1.4 Control de flujo 3.1.5 Funciones 3.1.6 Importar módulos 3.1.7 Editor de Código: Thonny II Manejo de periféricos 4 Entradas y salidas digitales 4.1 GPIO 4.1.1 Control de los GPIO con GPIOZero y Python 4.2 Interrupciones con GPIOZero 4.3 Manejo del PWM 4.4 Comunicación serie mediante UART 4.5 Ejercicios propuestos 5 SenseHat: manejo y aplicaciones 5.1 Características 5.2 Primer ejemplo básico: lectura de los sensores 5.3 Uso del joystick 5.3.1 Representación de datos con Matplotlib 5.4 Uso del giróscopo y acelerómetro 5.5 Uso de la matriz de LEDs 5.6 Ejercicios propuestos 6 Uso de la RaspiCamera y OpenCV 6.1 Instalación de la RaspiCam 6.2 Manejo de la cámara con Python 6.2.1 Captura de imagen 6.2.2 Captura de vídeo 6.3 Computer Vision con OpenCV 6.3.1 Primer ejemplo con OpenCV 6.3.2 Eventos con OpenCV 6.3.3 Filtrado por colores 6.3.4 Combinación de imágenes por canal alpha 6.3.5 Detector de movimiento 6.4 Detección de caras con Filtros HAAR 6.5 Ejercicios propuestos III Desarrollo de aplicaciones IoT 7 Comunicaciones IoT: MQTT y HTTP 7.1 Protocolos de transporte de datos 7.2 Transmisión de datos usando MQTT 7.2.1 Publicador con PAHO-MQTT 7.2.2 Suscriptor con PAHO-MQTT 7.3 Servidor HTTP con API REST 7.3.1 Servidor REST con Flask 7.3.2 Respuesta en formato JSON 7.3.3 Paso de parámetros 7.3.4 Servidor REST para un sensor y un actuador 7.3.5 Cliente REST con Flask 7.3.6 Incluyendo el SenseHat 7.4 Servidor ThingSpeak 7.4.1 Envío y recepción de datos a través de API 7.5 Creación de interfaces gráficas con TKinter 7.5.1 Creación de una interfaz sencilla 7.5.2 Uso de la pantalla táctil de 7’ 7.6 Ejercicios propuestos 8 Bases de datos SQL para IoT 8.1 Tipos de Bases de datos 8.1.1 Modelo de base de datos plana 8.1.2 Modelo de base de datos jerárquica 8.1.3 Modelo relacional 8.1.4 Modelo no relacional 8.1.5 Modelo orientado a objetos 8.2 SQL, lenguaje de consulta 8.2.1 Comandos SQL 8.2.2 Comandos del lenguaje de definición de datos (DDL) 8.2.3 Comandos del lenguaje de manipulación de datos (DML) 8.3 Sistema Gestor de Bases de Datos (SGBD) 8.4 SQLITE 3 8.4.1 Descarga e instalación 8.4.2 Operaciones sobre la base de datos SQLITE3 8.4.3 Operaciones con columnas 8.5 Entorno gráfico - DBeaver 8.5.1 Creación de una base de datos a partir de DBeaver 8.5.2 Conexión a una base de datos existente 8.6 Ejercicios propuestos 9 Desarrollo de APIs para IoT 9.1 Módulo Flask y SQLAlchemy 9.2 Desarrollo de la API 9.2.1 Servidor Flask 9.3 Configuración de una base de datos 9.4 Especificaciones de la API REST V1 9.5 Implementación de la API REST v1 9.5.1 Listado de plazas de garajes 9.5.2 Datos de una plaza de garaje 9.5.3 Datos de una plaza de garaje a partir de un identificador de vehículo 9.5.4 Listado de plazas de garaje extendido 9.6 Implementación de la API REST v2 9.6.1 Inserción de nuevo dato en tabla 9.6.2 Creación de un cliente 9.7 Ejercicios propuestos IV RPi y la Inteligencia Artificial 10 Introducción a las Redes Neuronales para Visión Artificial 10.1 Machine learning y Deep learning 10.1.1 Introducción al Deep Learning 10.1.2 Aprendizaje supervisado y aprendizaje no supervisado 10.2 Introducción a las redes neuronales 10.2.1 Perceptrón 10.2.2 Redes multicapa o redes densamente conectadas 10.2.3 Funciones de activación 10.3 Entrenamiento de una red neuronal 10.3.1 Métricas de funcionamiento 10.4 Redes convolucionales 10.4.1 Capa convolucional 2D 10.4.2 Capa de max-pooling 10.4.3 Capa densa - lineal 10.5 Instalación de Miniconda 10.6 Entrenamiento de redes neuronales con PyTorch 10.6.1 Entrenamiento de clasificador de dígitos: MNIST 10.6.2 Clasificador basado en redes convolucionales 10.6.3 Evaluación de la red neuronal 10.7 Ejercicio propuesto: clasificador de señales de tráfico 10.7.1 Dataset 10.8 Ejercicios propuestos 11 Inferencia neuronal en RPi 11.1 Cuantización de modelos 11.1.1 Escalado y redondeo en la cuantización 11.1.2 Tipos de cuantización en Pytorch 11.1.3 Cuantización Estática 11.1.4 Cuantización Dinámica 11.1.5 Quantization-Aware Training 11.1.6 Resumen de los tipos de cuantización en PyTorch 11.2 Compilador Just-In-Time (JIT) 11.3 Inferencia en tiempo real 11.4 Otras arquitecturas neuronales 11.5 Inferencia en tiempo real con MobileNet 11.6 Ejercicios propuestos