Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
5648028
Modifico el main y creo el módulo system
avillacampafiuba May 29, 2024
0f6bea4
Saco los módulos viejos y creo los nuevos (vacíos).
avillacampafiuba May 29, 2024
0aaeb79
Saco comentarios del main
avillacampafiuba May 29, 2024
2a20554
Creo clase led y primera prueba
avillacampafiuba Jun 8, 2024
5be3d8b
delay con objetos e implementado en system
avillacampafiuba Jun 8, 2024
74651ca
Implemento la clase button
avillacampafiuba Jun 8, 2024
80300d2
Implemento clase _switch
avillacampafiuba Jun 8, 2024
def9352
Implemento clase tranquera
avillacampafiuba Jun 9, 2024
f93b127
compilacion condicional, define pines placa y FSM en tranquera
avillacampafiuba Jun 9, 2024
1295dfc
FSM de tranquera con un switch
avillacampafiuba Jun 9, 2024
c1c88bb
Interrupciones para los botones. Clases con mayúsculas
avillacampafiuba Jun 10, 2024
e029b9b
Implemento clase Scale
avillacampafiuba Jun 11, 2024
144fd1d
Test puerto serie
avillacampafiuba Jun 11, 2024
ce1e1af
SerialCom puede escribir float e int
avillacampafiuba Jun 11, 2024
b718f38
Módulo MFRC522
avillacampafiuba Jun 13, 2024
9aee8ff
Prueba de RFID, FUNCIONA!!!
avillacampafiuba Jun 13, 2024
c60bb0b
pequeños cambios
avillacampafiuba Jun 14, 2024
d02fdeb
Empezando WiFi
avillacampafiuba Jun 23, 2024
b8cbd90
Agrego librería MQTT
avillacampafiuba Jun 23, 2024
3331428
Agrego librería MQTT (ahora si)
avillacampafiuba Jun 23, 2024
8bb43d3
MQTT anda con esp32
avillacampafiuba Jun 28, 2024
d8ddd18
Clase RFID. Leo con RFID y lo mando por MQTT. Lectura cada 3s
avillacampafiuba Jun 29, 2024
8956b27
nonBlockingDelay con interrupciones. Interrupciones en clases. Envío ID.
avillacampafiuba Jun 30, 2024
899f2f0
.
avillacampafiuba Jun 30, 2024
7e49a65
Procesamiento de comandos MQTT. Puedo abrir y cerrar la tranquera!!
avillacampafiuba Jul 1, 2024
135991d
Clase Scale. README. global_defines con TODOS los defines.
avillacampafiuba Jul 2, 2024
003f8eb
Envío el estado de tranquera, y tengo modo de solo lectura
avillacampafiuba Jul 3, 2024
765c63c
Create MQTT.h
avillacampafiuba Jul 3, 2024
01e76d9
Create MQTT.cpp
avillacampafiuba Jul 3, 2024
392343f
Borro archivos sobrantes
avillacampafiuba Jul 3, 2024
5d0ff17
Clase ModeSelector. Implementados los modos con leds, y envío el modo
avillacampafiuba Jul 3, 2024
ef2e88a
bug fix
avillacampafiuba Jul 3, 2024
d65dcd0
Corrección send_system_mode
avillacampafiuba Jul 4, 2024
2385f0d
Agrego código ESP32, APK y Esquemático.
avillacampafiuba Jul 8, 2024
1ccf1ff
Elimino serial_com
avillacampafiuba Jul 11, 2024
be5c62d
Merge branch 'master' of https://github.com/avillacampafiuba/Proyecto…
avillacampafiuba Jul 11, 2024
240a438
Update README.txt
avillacampafiuba Jul 11, 2024
1dc2785
Delete Esquemático.pdf
avillacampafiuba Jul 11, 2024
db08393
Agrego esquemático
avillacampafiuba Jul 11, 2024
cd45844
Add files via upload
avillacampafiuba Jul 12, 2024
6117c04
Update README.txt
avillacampafiuba Jul 12, 2024
03d98e6
Delete Memoria del Trabajo Final del Seminario de Sistemas Embebidos …
avillacampafiuba Jul 31, 2024
d516ed9
Add files via upload
avillacampafiuba Jul 31, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ BUILD
compile_commands.json
.clangd
.cache
MQTT
155 changes: 155 additions & 0 deletions Codigo_ESP32.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,155 @@
#include <WiFi.h>
#include <PubSubClient.h>

WiFiClient esp32Client;
PubSubClient mqttClient(esp32Client);

const char* ssid = "Telecentro-5401";
const char* password = "Z2NKJZ3WYJFD";

char *server = "192.168.0.43";
int port = 1883;

int ledpin = 23; // Nuevo pin para el LED
int mqttStatusPin = 21; // Pin para indicar estado MQTT
int messagePin = 19; // Pin para indicar que se recibión un mensaje y se reenvió por UART
int var = 0;

#define RXD2 16
#define TXD2 17

void wifiInit() {
Serial.print("Conectándose a ");
Serial.print(ssid);
Serial.print("\n");

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.print("\n");
Serial.print("Conectado a WiFi");
Serial.print("\n");
Serial.print("Dirección IP: ");
Serial.print(WiFi.localIP());
}

void callback(char* topic, byte* payload, unsigned int length) {
char payload_string[length + 1];
memcpy(payload_string, payload, length);
payload_string[length] = '\0';

if (strcmp(topic, "ProyectoTranquera/TestMQTT") == 0) {
int resultI = atoi(payload_string);
var = resultI;
}

Serial.print("Mensaje recibido [");
Serial.print(topic);
Serial.print("]: ");
Serial.print(payload_string);
Serial.print("\n");

// Reenviar el mensaje por UART
Serial2.print(topic);
Serial2.print(":");
Serial2.print(payload_string);
Serial2.print("\n");

digitalWrite(messagePin, HIGH);
digitalWrite(messagePin, LOW); // Hago un pulso cuando envié un mensaje
}

void reconnect() {
while (!mqttClient.connected()) {
Serial.print("Intentando conectarse MQTT...");
Serial.print("\n");
digitalWrite(mqttStatusPin, LOW); // Indicar que está desconectado

if (mqttClient.connect("ESP32")) {
Serial.print("Conectado");
Serial.print("\n");
digitalWrite(mqttStatusPin, HIGH); // Indicar que está conectado
mqttClient.subscribe("ProyectoTranquera/TestMQTT");
} else {
Serial.print("Fallo, rc=");
Serial.print(mqttClient.state());
Serial.print(" intentar de nuevo en 5 segundos");
Serial.print("\n");
delay(5000);
}
}
}

void setup() {
pinMode(ledpin, OUTPUT);
pinMode(mqttStatusPin, OUTPUT); // Configurar el pin de estado MQTT como salida
pinMode(messagePin, OUTPUT); // Configurar el pin de mensaje como salida
Serial.begin(115200);
Serial2.begin(115200, SERIAL_8N1, RXD2, TXD2); // Configuración UART2 a 115200 baudios
delay(10);
wifiInit();
mqttClient.setServer(server, port);
mqttClient.setCallback(callback);
digitalWrite(mqttStatusPin, LOW); // El Pin empieza en LOW
digitalWrite(messagePin, LOW); // El Pin empieza en LOW
}

void loop() {
if (!mqttClient.connected()) {
reconnect();
} else {
digitalWrite(mqttStatusPin, HIGH); // Mantener en HIGH si está conectado
}
mqttClient.loop();

if (var == 0) {
digitalWrite(ledpin, LOW);
} else if (var == 1) {
digitalWrite(ledpin, HIGH);
}

if (Serial2.available()) {
String uartMessage = Serial2.readStringUntil('\n'); // Leer mensaje UART
int separatorIndex = uartMessage.indexOf(':');

if (separatorIndex != -1) {
String command = uartMessage.substring(0, separatorIndex);
String argument = uartMessage.substring(separatorIndex + 1);

if (command == "subscribe") {
mqttClient.subscribe(argument.c_str());
Serial.print("Suscrito a: ");
Serial.print(argument);
Serial.print("\n");
Serial2.print("subscribed:");
Serial2.print(argument);
Serial2.print("\n");
digitalWrite(messagePin, HIGH);
digitalWrite(messagePin, LOW); // Hago un pulso cuando envié un mensaje
} else if (command == "unsubscribe") {
mqttClient.unsubscribe(argument.c_str());
Serial.print("Desuscrito de: ");
Serial.print(argument);
Serial.print("\n");
Serial2.print("unsubscribed:");
Serial2.print(argument);
Serial2.print("\n");
digitalWrite(messagePin, HIGH);
digitalWrite(messagePin, LOW); // Hago un pulso cuando envié un mensaje
} else {
// Publicar mensaje en MQTT
mqttClient.publish(command.c_str(), argument.c_str());
Serial.print("Mensaje enviado: ");
Serial.print("\n");
Serial.print("Tópico: ");
Serial.print(command);
Serial.print(", Mensaje: ");
Serial.print(argument);
Serial.print("\n");
}
}
}
}
Binary file added Esquemático.pdf
Binary file not shown.
Binary file not shown.
Binary file added Proyecto_Tranquera.apk
Binary file not shown.
19 changes: 19 additions & 0 deletions README.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
En este repositorio se encuentra el desarrollo de un proyecto para el control automático de tranqueras
en mangas. Se incluye en este repositorio todo el firmware desarrollado, un esquemático del hardware
usado, un archivo .apk para la instalación de una aplicación movil necesaria para el uso del sistema,
un video demostrativo del funcionamiento, y una memoria del desarrollo del trabajo.

Realizado entre abril y julio de 2024 por Augusto Villacampa Horta como trabajo final del seminario
de Sistemas Embebidos de la Facultad de Ingeniería de la Universidad de Buenos Aires.

Link al video demostrativo del funcionamiento:
https://www.youtube.com/watch?v=cxtm0vdYiug

Consideraciones:

- En el archivo mbed_app.json se configura el tamaño de los buffers internos de transmisión y
recepción desde la ESP32, es decir los mensajes que llegan por MQTT y otras configuraciones

- En el archivo global_defines.h se configuran varios parámetros para el funcionamiento del
sistema o de los módulos. En el ultimo caso, en los distintos módulos se verifica si estos
parámetros fueron definidos, y los define si no lo fueron. Esto como medida de seguridad.
12 changes: 8 additions & 4 deletions main.cpp
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
//=====[Libraries]=============================================================

#include "smart_home_system.h"
#include "mbed.h"
#include "arm_book_lib.h"

#include "system.h"

//=====[Main function, the program entry point after power on or reset]========

int main()
{
smartHomeSystemInit();
system_init();
while (true) {
smartHomeSystemUpdate();
system_update();
}
}
}

8 changes: 6 additions & 2 deletions mbed_app.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
{
"target_overrides": {
"*": {
"target.printf_lib": "std"
"platform.stdio-convert-newlines": 1,
"target.printf_lib": "std",
"drivers.uart-serial-rxbuf-size": 1024,
"drivers.uart-serial-txbuf-size": 256
}
}
}
}

Loading