He estado aprendiendo sobre los diferentes protocolos de comunicación utilizados entre Arduino y otros componentes/sensores, a saber, SPI, UART e I2C. Quiero agregar Wi-Fi a mi proyecto Arduino UNO usando ESP8266 (por ahora, y tal vez luego actualice a un ESP32 ya que es más poderoso).
Pero me pregunto por qué en todos los esquemas que he visto en mi investigación en línea, Arduino siempre está conectado al módulo ESP8266 a través de UART. ¿Por qué no usar SPI o I2C? ¿Por qué UART (aparentemente) se considera superior para la comunicación ESP con Arduino sobre los otros dos protocolos de comunicación?
Gracias de antemano por la ayuda.
UART ofrece comunicación bidireccional con solo 2 cables.
I2C es una comunicación unidireccional para 2 hilos. Se puede hacer de dos maneras implementando un mecanismo de notificación personalizado en el que el esclavo envía una señal cada vez que tiene datos para enviar mediante una conexión GPIO. Esto requiere otro pin y, por lo tanto, 3 cables para la comunicación bidireccional en comparación con los dos en UART. Otra alternativa es el sondeo, como se indica en los comentarios a continuación. Personalmente, prefiero el flujo impulsado por interrupciones sobre el sondeo. Sin embargo, si está de acuerdo con el sondeo, 2 cables pueden hacer el trabajo.
SPI requiere un mínimo de 4 cables. (Tal vez 3 cables en caso de un solo esclavo como comentó Elliot)
Dada la cantidad limitada de pines disponibles en los módulos esp, supongo que la comunidad podría haber elegido usar UART como mecanismo principal de transferencia de datos. Además, UART es más simple de implementar que otras contrapartes. (Esta línea podría estar basada en una opinión, así que discúlpeme si tiende a estar en desacuerdo)
Es posible usar módulos esp como una MCU independiente para proyectos generales. Puede usar expansores de puertos en caso de que se necesiten más GPIO. Usé una arquitectura similar en uno de mis proyectos. Usé esp-arduino para desarrollar el firmware dentro del propio IDE de arduino.
Eugenio Sh.
Ejecución en seco
Eugenio Sh.
DKNguyen
Desconocido123
ESP8266 can never be a compliant I2C slave; there is no hardware support, and a bit-by-bit software solution isn't going to be fast enough for the standard I2C speed of 100kHz because 1) the interrupt won't arrive fast thought and 2) the GPIO bus clock is slower than 100kHz. That's why this solution can handle 14kHz max, which is useless since most other devices run at 100kHz. Try ESP32, it has I2C hardware.