Perder datos confidenciales al intentar enviarlos a través de GSM

1

Estoy trabajando en un sistema que recopila datos de un conjunto de sensores ultrasónicos. Esos sensores funcionan a una frecuencia de 40 Hz y cada uno de los datos que envían son valiosos para mí. Necesito enviar esos datos a un agente mqtt usando el protocolo mqtt. Utilizo la conexión TCP / UDP de SIM900 para enviar datos. Hay dos escenarios para hacer que mi sistema funcione:

1- Envío los datos tan pronto como los leo desde los sensores. Significa que debo conectarme a un servidor, enviar datos y desconectarlos en menos de 1/40 segundos. No lo sé, pero usando comandos AT con SIM900; Me parece bastante imposible.

2- Recojo los datos por un tiempo, (digamos por un minuto) y luego los envío al servidor de forma masiva. Pero surge otro problema: me enfrento a la pérdida de datos confidenciales que recojo del sensor mientras hago una conexión TCP / UDP.

Mi hardware consta de SIM900, un arduino y un grupo de sensores ultrasónicos que funcionan a 40Hz (HR-SC04)

¿Hay una manera de guardar cada bit de datos que leo de los sensores y enviarlos al servidor Mqtt, sin pérdidas?

    
pregunta Ekrem Doğan

1 respuesta

3

Probablemente hay una forma de hacerlo usando "multitarea cooperativa" - un bucle principal que llama a las funciones de no bloqueo (posiblemente utilizando máquinas de estado). Blink Without Delay muestra los primeros pasos en esta dirección.

Por desgracia, se ha escrito mucho código con funciones de bloqueo, así que en lugar de reescribir ese código para que no sea de bloqueo, a menudo la gente:

  • haga las cosas más sensibles al tiempo en una rutina de interrupción (la "tarea de primer plano").
  • manejar las cosas menos sensibles al tiempo en el bucle principal () (la "tarea de fondo").

A menudo, el código tiene 2 búferes separados, de modo que puede hacer doble búfer : El proceso de escritura llena lentamente un búfer. Cuando está lleno, el proceso del lector procesa los datos en ese búfer; mientras tanto, el proceso de escritura llena lentamente el búfer otro . Es de esperar que el proceso del lector se realice con ese búfer mucho antes de que el otro búfer esté completamente lleno, aunque esperamos que el escritor escriba algo en ese otro búfer antes de que se complete el proceso del lector. En su caso, mientras realiza la conexión TCP y envía los datos en un búfer, el procesador puede ser interrumpido ocasionalmente para permitir que la rutina de interrupción agregue otro elemento de datos al otro búfer.

    
respondido por el davidcary

Lea otras preguntas en las etiquetas