The idea is to experiment a bit more with ESP now, in particular in combination with audio transfer.
Stuff to learn:
- ESP now broadcast mode: does it really work? YES, it does work, there's no ACK (so it's even a bit faster).
- ESP now throughput: https://hackaday.io/project/166868-my-attempt-at-an-esp-now-mesh/log/166398-072419-maximum-transmission-throughput-of-esp-now
- ESP now packet loss when used continuously
- Audio over IP protocols, e.g. VBAN
- Possibility to transfer even ultrasonic audio?
Possible end result: A kind of zero-standby power intercom. When you press the button, an ESP8266 is powered up. It immediately starts transmitting audio from a digital I2S microphone over ESP now. The receiving end will probably be an ESP32, that receives the ESP now audio and converts into a standardized audio-over-ip protocol, e.g. VBAN.
- build an Arduino playground project so I can access the API from the command line and play with it
- start with an ESP32 + INMP441
- build a framework to stream the data and determine stream rate:
- queue is filled with random data
- queue is emptied by an espnow send process running in the main loop()
- espnow completion callback notifies when next packet can be sent
- investigate I2S communication from a microphone on an ESP8266
- convert espnow data to UDP/VBAN on the receiving end
- convert UDP/VBAN to audio on laptop
Related interesting stuff:
- ESP audio playback https://github.com/earlephilhower/ESP8266Audio
- VBAN specification https://www.vb-audio.com/Voicemeeter/VBANProtocol_Specifications.pdf
ESP NOW broadcast just seems to work fine (not sure what prevented me from making it work earlier). I've fixed the WiFi channel to 1.
On the receiving side, I use an ESP32. On the sending side, I use an ESP8266:
- init the esp now library
- add the broadcast address as a peer
- send a message
- that's it!
Transmission appears to be very fast, taking less than a millisecond for 10 messages in a row. However, with broadcast, the sending side does not receive (or wait for) any acknowledgements, the tx callback just reports the broadcast address, the rx callback reports nothing.