Today, while searching for hardware, I learned about various ESP boards available, their advantages and disadvantages. I learned that the modules which come with a PCB antenna and an IPEX connector contain a zero-ohm resistor which is soldered to the PCB antenna by default. To make use of the IPEX connector, the resistor must first be undersold from the PCB antenna and re-soldered onto the IPEX connector line. I also learned just how much can go wrong when buying an antenna to make use of the IPEX connector. These properties include the resonant frequency, the its bandwidth and the gain on different sides of the antenna. There's a lot of time that can be sunk into optimizing just the antenna part.
Fig. 25 - The ESP32-S version of the board comes with an optional IPEX connector, while keeping the FCC certification.
Then I learned about the ESP32-PICO-D4, which is an ESP32 module tucked into a small QFN package. I found an article suggesting that it is a great alternative for wearable tech, but not so great when it comes down to heat dissipation. The package contains the 240MHz crystal inside which is debated as a bad move. If I were to use this chip for intense WiFi transmisisons, then the frequency may fluctuate as far as 1kHz due to quick rise and fall in temperatures of the WiFi chip. This in turn may affect precise code execution and decrease chip's lifespan.
Fig. 26 - The inside of the ESP32-PICO-D4. The crystal is included in the package right next to the CPU which can reach temperatures as high as 70°C. Crystals are not something you would want to heat up.
Then I learned about the techniques used in WiFi transmission itself. For example, during the hop between the first and second node, I could start negotiating a connection with the node which I am approaching before I loose connection with my current node. This way I could ensure a stable switch from node to node.
Another technique I discovered is channel hopping. The WiFi protocol comes with 14 channels which is useful to avoid cross-talk. I could just negotiate between each node of my mesh which channel each node will use but if I am using my mesh around other WiFi traffic, some specific nodes using the same channels will be less responsive than other nodes in the mesh. While I could make the nodes check for channel congestion and switch to a channel which is not in use, it will take precious processing time to check each channel like that. Instead, I could make the nodes in the mesh hop between a set of channels in a known sequence to spread out the interference. So if one of the channels is heavily congested, it won't make a drastic impact on any of the nodes in the mesh in particular.