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 todos los datos que envían son valiosos para mí. Necesito enviar esos datos a un corredor mqtt usando el protocolo mqtt. Uso 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 de los sensores. Significa que debo conectarme a un servidor, enviar datos y desconectarlo en menos de 1/40 segundos. No sé, pero usando comandos AT con SIM900; me parece bastante imposible.
2- Recojo los datos por un tiempo (digamos por un minuto) y luego envío los datos al servidor de forma masiva. Pero surge otro problema: me enfrento a la pérdida de datos confidenciales que recopilo del sensor mientras realizo una conexión TCP/UDP.
Mi hardware consta de SIM900, un arduino y un montón de sensores ultrasónicos que funcionan a 40 Hz (HR-SC04)
¿Hay alguna manera de guardar cada bit de datos que leo de los sensores y enviarlos al servidor Mqtt, sin pérdidas?
Probablemente haya una manera de hacer esto usando "multitarea cooperativa", un bucle principal que llama a funciones sin bloqueo (posiblemente usando 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, por lo que, en lugar de volver a escribir ese código para que no bloquee, a menudo las personas:
A menudo, el código tiene 2 búferes separados, por lo que puede hacer doble búfer : el proceso de escritura llena lentamente un búfer. Cuando está lleno, el proceso de lectura procesa los datos en ese búfer; mientras tanto, el proceso de escritura llena lentamente el otro búfer. Con suerte, el proceso de lectura se realizará 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 finalice el proceso de lectura. En su caso, mientras realiza la conexión TCP y envía los datos en un búfer, el procesador puede interrumpirse ocasionalmente para permitir que la rutina de interrupción agregue otro elemento de datos al otro búfer.
marcador de posición
Wouter van Ooijen
Ekrem Dogan
crosley
NK2020
Ekrem Dogan