Suponiendo que pueda sostener la tasa de datos máxima para el nRF24L01 ( 2 megabits por segundo ), eso significa que puedes mover -en un mundo perfecto- 200 kilobytes por segundo (asumiendo que no hay sobrecarga).
Así que, teniendo en cuenta esto y el mínimo deseado de 24 fps, puedes calcular cuántos bytes necesita cada imagen: 200K / 24 = 8.53K
por cuadro
Ahora no has dicho qué resolución quieres, pero la resolución máxima del ov7670 es de 640x480, y utiliza 16bits por pixel (es un poco más complicado que eso, invito a los curiosos a leer el Hoja de datos ).
Como saben nuestras calculadoras 640 * 480 * 2 = 614,400
Bytes - 72 veces ese 8,53K por cuadro. De hecho, tardaría unos 3 segundos por fotograma (6 segundos si se ejecuta a 1mbps).
Así que para responder a sus dos primeras preguntas: El nRF24L01 no está a la altura de la transmisión de vídeo en directo de 640x480.
Esto nos deja con la tercera pregunta: ¿Cómo reducir el tamaño de los datos de las cámaras?
Hay ( no mutuamente excluyentes) tres formas de hacerlo:
- Comprimir las imágenes
- Comprimir los datos
- Enviar imágenes más pequeñas
Desglosemos cada uno de ellos:
Comprimir las imágenes
Podría, por ejemplo, enviar las imágenes como un flujo M-JPEG. Esto facilitaría mucho la decodificación de las imágenes en el teléfono y reduciría bastante el tamaño de las imágenes enviadas.
Pero hay un problema: necesitas poder mantener toda la imagen en la memoria para poder hacer la compresión JPEG (y por tanto M-JPEG). Tu ST32F103RET6 tiene 64K de RAM (IIRC), así que no hay manera de que quepa. Y no estoy seguro de que haya un esquema de compresión con pérdidas que puedas utilizar y que no necesite toda la imagen a la vez.
Comprimir los datos
Ahora hay una serie de opciones que podrías hacer aquí: Huffman, Run Length Encoding, LWZ, etc. Desgraciadamente, ninguna de ellas va a producir una cantidad predecible de compresión. Va a depender de las imágenes que envíes.
Pero creo que es seguro decir que no vas a conseguir los 8,53K que necesitarías para 24fps.
Enviar imágenes más pequeñas
El OV7670 es bastante flexible en cuanto a resoluciones. Así que echemos un vistazo a otras resoluciones que podrías utilizar:
- QVGA (320x240):
320 * 240 * 2 = 150K
por cuadro. A esta velocidad se podría enviar algo más de 1fps
- QQVGA (160x120):
160 * 120 * 2 = 37K
por cuadro. Este es el primer tamaño de imagen que se puede almacenar completamente en la RAM
- QQQVGA (80x60):
80 * 60 * 2 = 9.38K
por cuadro. Con la compresión debería ser capaz de hacer vídeo a 24fps
- QQQQVGA (40x30): `40 * 30 * 2 = 2,35K por cuadro. Con este tamaño (de sello de correos), ¡podrías emitir a 30fps 1mbps! Creo que esta es la resolución más baja soportada por la cámara.
QQVGA puede ser posible si se realiza una compresión JPEG con mucha pérdida, y luego se realiza también alguna compresión en el flujo de datos. Tendrás que experimentar para estar seguro.
Una posdata
Va a ser difícil encontrar una tecnología inalámbrica más rápida que el nRF24L01 (y sus similares), sin ir a wifi (por ejemplo el Módulo Adafruit CC3000 ). Con eso, un microcontrolador con MUCHA RAM, y compresión, deberías ser capaz de transmitir 24-30fps.
Alternativamente, hay chips de controladores de cámara que hacen la compresión JPEG para usted - el vc0706, por ejemplo. Con eso conectado a una cámara, y usando el enlace SPI del vc0706 deberías ser capaz de usar incluso un microcontrolador trivial para transmitir los datos.
Todavía no he encontrado un módulo de cámara con vc0706 que exponga los pines SPI, todos son serie. Puede que exista uno, pero aún no lo he encontrado. Así que si vas por este camino, puede que tengas que hacerlo tú mismo...