Quiero enviar datos desde el monitor serial del soft de Arduino en un principio a un tracker (GPS) de la marca GTE S15, este admite entradas TTL, pero no logro entablar una comunicación exitosa.
Ya probe conectar el TX --- RX RX ---- TX y compartir las masas del mismo cable de comunicación. (TR0)
Nodemcu 1.0 ----> GPS GTE S15
Solo puedo usar el TR0 porque son trackers que ya vienen configurados y con contraseña.
Los datos técnicos de GTE
Puertos seriales 5 (TTL)
2 Full Duplex (1200 a 115200 bps)
2 Configurables solo RX (1200 a 9600 bps)
1 Full Duplex para interacción con Python (1200 a 115200 bps)
Compatibles con adaptador USB GTE
Procesamiento de datos entrantes 20 Disparadores totalmente configurables.
Se pueden procesar y/o convertir textos o datos binarios provenientes de cualquier Puerto de datos
Ej:
Puertos Seriales (TR0, TR1, TR2, TR3 o TR4)
Puertos I2C
Puerto de escucha del GPS
Puerto de escucha del Módem GSM
Estaba intentando con el siguiente código.
// Define el pin TX TTL
const int txPin = D1; // D1 pin que deseas utilizar
void setup() {
Serial.begin(9600);
// Configura el pin TX como salida
pinMode(txPin, OUTPUT);
// Datos a enviar
String dataToSend = "1234567890123456";
// Envia datos a través del pin TTL
enviarDatosTTL(dataToSend);
}
void loop() {
// No hay necesidad de código en el bucle para este ejemplo
}
// Función para enviar datos a través del pin TX TTL
void enviarDatosTTL(String data) {
for (int i = 0; i < data.length(); i++) {
char c = data.charAt(i);
// Convierte el carácter a su valor ASCII y envíalo
enviarCaracterTTL(c);
delay(10); // Ajusta según sea necesario
}
}
// Función para enviar un carácter a través del pin TX TTL
void enviarCaracterTTL(char c) {
for (int i = 0; i < 8; i++) {
digitalWrite(txPin, (c & (1 << i)) ? HIGH : LOW);
delay(10); // Ajusta según sea necesario
}
// Envía un carácter de nueva línea al final de cada carácter
digitalWrite(txPin, LOW);
delay(10); // Ajusta según sea necesario
}
La verdad es que la documentación del S15 no ayuda demasiado...
Si habilitas el puerto serial
Serial.begin(9600);
ya no puedes manejar el pin Tx (pin 1) por tu cuenta.
De todos modos, si haces que cada bit dure 10 mseg, la velocidad de transferencia es de 100 bps y la documentación dice que la velocidad de los puertos de S15 es de 1200 a 115200 bps, por lo tanto nunca se van a comunicar.
Usa la librería SoftwareSerial para disponer de un segundo puerto serie para comunicar con el S15.
Ojo con los niveles de tensión. La Nodemcu trabaja con lógica de 3.3V, verifica cuál es el nivel TTL que envía es S15, tal vez necesites algun adaptador de nivel.
En realidad no sabría decirte porque no conozco los niveles de señal del S15, además ese módulo necesita las referencias de 3.3V de la Nodemcu y de 5V del S15 (suponiendo que trabaja a 5V) y hay que ver si están disponibles.
Fuera de eso trabajan bien.
En este caso me inclinaría por el SN74LVC125A que solo necesita los 3.3V
Si, lamentablemente no te dan bola, mañana voy a tratar con otros arduinos distintos, como el mega. El nodemcu tiene sus limitaciones con respecto a librerías
Ojo con los que trabajan a 5V como la Mega, poné al menos un divisor de tensión con resistencias en el Tx, no sea que el nivel "TTL" del S15 sea de 3V3 y freís su pin Rx.
Bueno, lo logre!!!!! Con este código pude enviarlo:
#include <SoftwareSerial.h>
// Define los pines RX y TX para el nuevo puerto serie
SoftwareSerial miSerial(10, 11); // RX, TX
// Define una lista predefinida de códigos RFID
const char* listaRFID[] = {"3365421234", "33654212356", "3365421233", "3365421231"};
void setup() {
// Inicia la comunicación serial para el monitor serial
Serial.begin(9600);
Serial.println("Emulando lecturas RFID...");
// Inicia la comunicación serial para el nuevo puerto serie
miSerial.begin(9600);
}
void loop() {
// Emula la lectura RFID seleccionando un código aleatorio de la lista
int indiceRFID = random(0, sizeof(listaRFID) / sizeof(listaRFID[0]));
const char* codigoRFID = listaRFID[indiceRFID];
// Imprime el código RFID en el monitor serial
Serial.print("Lectura RFID: ");
Serial.println(codigoRFID);
// Envía el código RFID al nuevo puerto serie
miSerial.print("RFID: ");
miSerial.println(codigoRFID);
// Espera 2 segundos entre lecturas
delay(2000);
}
Hola proftecnico, al final desde el hardware y componentes eléctricos que tuviste que hacer? Tengo un laser chino de 10W que permite entrada TTL con dos pines. Supongo que uno es RX y el otro TX pero no se distinguir cual es cual ni las potencias con que se maneja. Por lo que vi, tengo que tener cuidado para no quemarlo. Vos, electricamente que hiciste?
Desde ya, muchas gracias
Hola, vas a necesitar un tester (voltímetro) para identificar el TX y el RX además de saber con que voltaje opera (3 o 5 V), pones el tester en corriente continua (20 v) pones el terminal rojo en uno de las salidas y el otro terminal negro a tierra, el que te da mas voltaje (3 o 5 V) es el TX que esta enviando datos (con esto ya identificaste cual y el voltaje de operación) y el de menor voltaje es el RX (cuando esta en espera no tira casi nada de voltaje).
Ahora según el voltaje podes usar un Arduino del tipo Mega 2560 para los 5 V u otro que acepte 3V, si voy ya tenes uno que acepta 3 V y el laser tira 5 V vas a necesitar una placa "Módulo Conversor Bidireccional Lógico 3.3v A 5v Ttl" Esta placa va a permitir la comunicación entre ambos sin quemar nada.
La verdad, me confunde. Si le doy corriente y lo pongo en analogico no pasa nada. Si lo pongo en TTL queda encendido. Supuestamente la salida del TTL es el cable rojo y negro, y la entrada del TTL debería ser el zócalo azul. Probare los pines del zocalo azul. El negro debería ser el ground
Al final medi la diferencia de voltaje entre los pines del zocalo y me dio una diferencia de 1,67 V. Con lo cual el pin con mayor voltaje debería ser el TX. Estoy en lo cierto? El valor nominal del voltaje de cada pin no se como medirlo porque no se donde esta el Ground
Como tengo una diferencia de 1,67 voltios entre los pines del Zocalo del laser, supongo uno estara a 5 volts y el otro s 3.3v.
La pregunta 1) es cual es el TX0 del Laser? Supongo el pin 5v o el 3v3?
Pregunta 2. El RX del Arduino puede recibir 5v?
Pregunta 3 el TX del Arduino envia hasta 5v?
El de mayor voltaje debería ser el TX, igual si lo conectas al revés no pasa nada siempre y cuando se respeten los voltajes, lo que va a pasar es que no recibís nada hasta que lo volves a invertir
Deberías ver el data sheet del fabricante para saber cual es la salida de comunicación, tiene pinta que es la que quedo libre, después el cable con vaina debe ser la entrada de tensión y el otro rojo y negro debe ser para el ventilador, el verde y negro deben ser para la alimentación de laser.
Gracias Proftecnico, lo conecte directamente a los pines TX y RX del Arduino Mega 2560 y funciona perfectamente.
De paso cuento: que he usado el CNC para imprimir con chocolate, pero el tema es que cada chocolate tiene un punto de fusión distinto, por eso hay que calibrar cada uno antes con un potenciómetro para que no te salga muy líquido o muy pastoso.