I received and tested the Rev 2 PCB design. The very minor revision was an attempt to improve Wifi performance and make it easier to mount the LED. As shown below Wifi performance is about the same.
I tested Wifi performance with three setups. One with the tCam-Mini acting as an Access Point and my laptop connected to it in the same room. A second with tCam-Mini configured as a client connected to a OpenWrt router in the same room and a third with the camera configured as a client connected to a Netgear router in a different room. I streamed data for three minutes to compute an average fps and I ran each test twice. The average values are shown below, including a board with an external antenna. There is some variability, even with three minute runs, due to Lepton FFCs that occurred while measuring.
|Setup||Rev 1 - internal antenna||Rev 2 - internal antenna||Rev 1 - external antenna|
|Access Point||4.36 fps||4.48 fps||5.94 fps|
|Client - OpenWrt router||4.68 fps||4.19 fps||6.34 fps|
|Client - Netgear router||4.86 fps||4.89 fps||6.05 fps|
Clearly an external antenna improves performance. Interestingly the Netgear router in another room performed better than the Openwrt (fairly old mips-based chipset) in the same room.
Rev 1.2 firmware fixes two issues that have come up during testing and board bring-up. The first was a bug where the board would not connect to an AP if its first attempt failed (it would reconnect later with no problems). The second was a hardware issue where I found the Lepton was not being left in a good condition if its external crystal oscillator took too long to startup. I found this testing alternate crystals since currently the crystal I specified is unobtanium.
I have an idea about how to improve the camera's performance in firmware. Right now a single task handles converting the Lepton data into a json string with Base64 packed data and pushing into the ESP32's network stack for transmission. If pushing the data causes the task to block then I may be able to increase performance by splitting the process into two tasks so the next frame can be converted to a json string while the previous frame is loaded for transmission.