En este tutorial voy a explicar como capturar datos con arduino y mandarlos a una base de datos creada con PHPMyAdmin. Tambien utilizaremos Python como mediador entre el puerto serial y la Base de Datos.
Utilizaremos dos pulsadores.
Tomaremos como base el proyecto:
Arduino y Base de Datos por USB. – El Profe Alegría
Materiales:
- Arduino UNO/Nano.
- 2 Pulsadores.
- 2 Resistencias 1Kohm.
- Cables varios.
- Protoboard.
- Cable USB.
- XAMPP instalado en PC.
- Python instalado en PC.
- Recomendación: Visual Studio Code (no es necesario pero si muy útil).
Esquema de conexiones:
Para llevar a cabo la opción en la que el Arduino se comunica con la base de datos a través de un script de Python, necesitarás:
- Configurar el Arduino para enviar datos a través del puerto serie.
- Configurar un entorno Python para recibir esos datos y registrarlos en la base de datos de phpMyAdmin.
- Crear la base de datos en phpMyAdmin.
- Ejecutar el script de Python para registrar cada pulsación.
1. Código para el Arduino:
Este código hace que el Arduino envíe un mensaje al puerto serie cada vez que se presione el pulsador.
const int buttonPinA = 2; // Pin para el pulsador A const int buttonPinB = 3; // Pin para el pulsador B int buttonStateA = 0; int buttonStateB = 0; void setup() { pinMode(buttonPinA, INPUT); pinMode(buttonPinB, INPUT); Serial.begin(9600); // Configuración del puerto serie } void loop() { buttonStateA = digitalRead(buttonPinA); buttonStateB = digitalRead(buttonPinB); if (buttonStateA == HIGH) { Serial.println("Pulsacion_A"); // Enviar "Pulsacion_A" por el puerto serie delay(1000); // Evita múltiples registros por una sola pulsación } if (buttonStateB == HIGH) { Serial.println("Pulsacion_B"); // Enviar "Pulsacion_B" por el puerto serie delay(1000); // Evita múltiples registros por una sola pulsación } }
Este código leerá el estado del pulsador y enviará «Pulsacion» al puerto serie cuando el pulsador sea presionado.
2. Configurar el entorno de Python:
Para que el script de Python funcione, necesitarás instalar las siguientes bibliotecas:
- pyserial: Para leer los datos del puerto serie.
- mysql-connector-python: Para conectarse a la base de datos MySQL (phpMyAdmin).
Para instalarlas, abre una terminal o símbolo del sistema y ejecuta:
pip install pyserial mysql-connector-python
3. Crear la base de datos en phpMyAdmin:
- Abre phpMyAdmin desde tu servidor local (por ejemplo, http://localhost/phpmyadmin). Si no sabés como hacerlo te dejo este link donde lo explico (https://elprofealegria.com/08-xampp/).
- Crea una base de datos llamada arduino.
- Crea una tabla llamada registros con las siguientes columnas:
- id (INT, autoincremental, llave primaria).
- fecha_hora (DATETIME).
4. Script de Python:
Este script leerá los datos enviados por el Arduino y registrará cada pulsación con la fecha y hora en la base de datos.
import serial import mysql.connector from datetime import datetime # Configuración de la conexión con la base de datos conn = mysql.connector.connect( host="localhost", user="tu_usuario", # Cambia esto por tu usuario de MySQL password="tu_contraseña", # Cambia esto por tu contraseña de MySQL database="arduino" ) cursor = conn.cursor() # Configuración del puerto serie (ajusta el puerto según tu sistema) ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1) # Cambia '/dev/ttyUSB0' según corresponda print("Esperando datos del Arduino...") try: while True: line = ser.readline().decode('utf-8').strip() # Leer y decodificar línea if line == "Pulsacion_A": pulsador = "A" elif line == "Pulsacion_B": pulsador = "B" else: continue # Si no es ni A ni B, ignora y vuelve al inicio del bucle # Registrar la fecha, hora y pulsador en la base de datos fecha_hora = datetime.now().strftime('%Y-%m-%d %H:%M:%S') cursor.execute("INSERT INTO registros (fecha_hora, pulsador) VALUES (%s, %s)", (fecha_hora, pulsador)) conn.commit() print(f"Registrado: {fecha_hora} - Pulsador {pulsador}") except KeyboardInterrupt: print("Cerrando la conexión...") # Cierra la conexión y el puerto serie cuando se detenga el script cursor.close() conn.close() ser.close()
5. Ejecución del script:
- Conecta el Arduino a la PC usando el cable USB y carga el código del Arduino.
- Asegúrate de que el puerto serie en el script de Python (‘COM3’) coincida con el puerto asignado a tu Arduino. Puedes verificar esto en el IDE de Arduino (Herramientas > Puerto).
- Ejecuta el script de Python desde la terminal o el símbolo del sistema:
python nombre_del_archivo.py
6. Prueba del sistema:
- Una vez que el script esté en ejecución, presiona el pulsador conectado al Arduino.
- Cada vez que lo hagas, el Arduino enviará «Pulsacion A» o «Pulsacion B» al puerto serie.
- El script de Python leerá este mensaje y registrará la fecha y hora y el pulsador en la base de datos.
- Verifica en phpMyAdmin que los registros se estén insertando correctamente en la tabla registros.
Notas adicionales:
Asegúrate de que el servidor MySQL de XAMPP esté en ejecución para que el script de Python pueda conectarse a la base de datos.
Si tienes problemas con la conexión al puerto serie, revisa que no haya otros programas interfiriendo (como el monitor serie del IDE de Arduino).
Con esta configuración, tendrás un sistema en el que cada pulsación del botón se registra en la base de datos junto con la fecha y la hora.
Resumen de cambios:
Con respecto al proyecto anterios: Arduino y Base de Datos por USB. – El Profe Alegría
- En el Arduino, el código envía «Pulsacion_A» o «Pulsacion_B» según el pulsador presionado.
- En la base de datos, se agregó la columna
pulsador
para registrar si fue el pulsador A o B. - El script de Python lee cuál pulsador fue presionado y registra el dato en la base de datos.
Con esto, tendrás registros con la fecha, hora y el pulsador específico presionado.