Я изучал различные протоколы связи, используемые между Arduino и другими компонентами/датчиками, а именно SPI, UART и I2C. Я хочу добавить Wi-Fi в свой проект Arduino UNO с использованием ESP8266 (на данный момент и, возможно, позже перейти на ESP32, так как он более мощный).
Но мне интересно, почему на всех схемах, которые я видел в своих онлайн-исследованиях, Arduino всегда подключается к модулю ESP8266 через UART? Почему бы не использовать SPI или I2C? Почему UART (очевидно) считается лучшим для связи ESP с Arduino по сравнению с двумя другими протоколами связи?
Заранее спасибо за помощь.
UART предлагает двустороннюю связь всего с двумя проводами.
I2C — это односторонняя связь по 2 проводам. Это можно сделать двумя способами, внедрив собственный механизм уведомления, в котором ведомое устройство отправляет сигнал всякий раз, когда у него есть данные для отправки с использованием соединения GPIO. Для этого требуется еще один контакт и, следовательно, 3 провода для двусторонней связи по сравнению с двумя в UART. Другой альтернативой является опрос, как указано в комментариях ниже. Лично я предпочитаю поток, управляемый прерыванием, а не опрос. Однако, если у вас все в порядке с опросом, 2 провода действительно могут справиться с этой задачей.
SPI требует как минимум 4 провода. (Может быть, 3 провода в случае одного ведомого, как прокомментировал Эллиот)
Учитывая ограниченное количество контактов, доступных на модулях esp, я думаю, сообщество могло бы выбрать использование UART в качестве основного механизма передачи данных. Плюс UART проще в реализации, чем другие аналоги. (Эта строка может быть основана на мнении, поэтому, пожалуйста, извините меня, если вы склонны не соглашаться)
Модули esp можно использовать как самостоятельные микроконтроллеры для общих проектов. Вы можете использовать расширители портов, если требуется больше GPIO. Я использовал подобную архитектуру в одном из своих проектов. Я использовал esp-arduino для разработки прошивки внутри самой IDE arduino.
Евгений Ш.
Пробный прогон
Евгений Ш.
ДКНгуйен
Неизвестно123
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.