Migrating from SiLabs/BlueGiga BGAPI - Questions on AT firmware
Posted: Wed Oct 20, 2021 3:06 am
tl;dr: Is there a binary equivalent of the AT command set? By which I mean one that doesn't use plain ASCII text but rather a consistent binary format?
I've been using the SiLabs WGM110 for years. It was derived from the BlueGiga WF121 and uses the same binary BGAPI interface. I'd looked at the ESP8266 when I was choosing a WiFi module, but at the time it just didn't seem mature enough.
Now, the WGM110 is getting toward its end of life, the chip shortage has made it completely unavailable, and SiLabs is going in a different direction for their new modules. I'm looking at moving to the ESP32.
From what I've read of the ESP32 AT command set, it looks like they have some broadly similar capabilities. The big difference is that BGAPI uses a very simple binary packet format for all of its commands, events, and responses. It's not terribly well documented, but at least it's consistent. I've written a driver / abstraction layer for my host MCU that gets very good throughput and low latency out of the UART link, and provides something like the Berkeley Sockets API for the application.
I think I can make things work with the AT command set, but it looks like it's going to mean extra complexity and probably a significant performance hit for the driver to have to parse variable-length text fields.
Has anyone come up with a binary serial command format for the ESP32 that would provide the same capabilities but in a more concise and uniform way? If not, can anyone familiar with the internals of ESP-AT comment on how difficult that might be to do? I'm just starting to dig into the code and haven't figured out how it's all structured yet.
Also, can anyone comment on the real-world performance of ESP-AT running multiple TCP/UDP connections? My application usually has several sockets open at a time. Usually raw bandwidth isn't a major concern but it needs to handle concurrency well.
Apologies if this stuff is covered somewhere. I think it's great that the hobbyist community has embraced the ESP32 so thoroughly but at the same time it makes the signal-to-noise ratio in Google searches pretty bad sometimes.
Thanks!
I've been using the SiLabs WGM110 for years. It was derived from the BlueGiga WF121 and uses the same binary BGAPI interface. I'd looked at the ESP8266 when I was choosing a WiFi module, but at the time it just didn't seem mature enough.
Now, the WGM110 is getting toward its end of life, the chip shortage has made it completely unavailable, and SiLabs is going in a different direction for their new modules. I'm looking at moving to the ESP32.
From what I've read of the ESP32 AT command set, it looks like they have some broadly similar capabilities. The big difference is that BGAPI uses a very simple binary packet format for all of its commands, events, and responses. It's not terribly well documented, but at least it's consistent. I've written a driver / abstraction layer for my host MCU that gets very good throughput and low latency out of the UART link, and provides something like the Berkeley Sockets API for the application.
I think I can make things work with the AT command set, but it looks like it's going to mean extra complexity and probably a significant performance hit for the driver to have to parse variable-length text fields.
Has anyone come up with a binary serial command format for the ESP32 that would provide the same capabilities but in a more concise and uniform way? If not, can anyone familiar with the internals of ESP-AT comment on how difficult that might be to do? I'm just starting to dig into the code and haven't figured out how it's all structured yet.
Also, can anyone comment on the real-world performance of ESP-AT running multiple TCP/UDP connections? My application usually has several sockets open at a time. Usually raw bandwidth isn't a major concern but it needs to handle concurrency well.
Apologies if this stuff is covered somewhere. I think it's great that the hobbyist community has embraced the ESP32 so thoroughly but at the same time it makes the signal-to-noise ratio in Google searches pretty bad sometimes.
Thanks!