Enviar datos via TTL a un GPS

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
}

Agradezco toda la ayuda que me puedan brindar.

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.

Saludos

Voy a probar y aviso, muchas gracias por las recomendaciones.

Probé compartiendo los negativos con una resistencia y no tuve suerte, me recomiendas comprar la placa I2c Iic Conversor Niveles 5v - 3v Md0212?

:question:

Los negativos se conectan directamente.

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

Voy a probar, realmente llegan caracteres raros, ya probé con diferentes velocidades, lo que envío no llega nada. :person_facepalming:

¿Verificaste los datos de configuración del puerto serie del S15?
Tal vez no sea 8N1.

¿No intentaste comunicarte con el soporte técnico de GTE?

Por otro lado, como el equipo tiene una salida de 3.3V (máx. 300mA) es muy probable que los niveles lógicos sean también de 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);
}

Arduino Mega 2560

Mil gracias por el apoyo!!!

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?

Estoy en lo cierto ?
Muchas gracias

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

         -------------->TX-------------------->RX

LASER Arduino
-------------->RX-------------------->TX

Depende del modelo de arduino que uses, hay con 3 V o con 5V (MEGA 2560 y el uno usan 5V) Los mini o nodemcu usan 3 V

Para sacarte la duda, usas un tester en el arduino y medis la salida TX y RX con el negativo del tester a tierra del arduino.

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. :eye:

Muchas gracias :+1: