I2C связь между Arduino Uno и Nodemcu32-s (ESP32)
Я хочу отправить данные между ESP-32 (NODEMCU-32S) и Arduino Uno, но я не нашел никакого источника о том, как это сделать, поэтому я попробовал этот код:
Код ESP-32:
#include <Wire.h>
void setup() {
Serial.begin(9600);
Wire.begin(21, 22); /* join i2c bus with SDA=D1 and SCL=D2 of NodeMCU */
}
void loop() {
Wire.beginTransmission(8);
Wire.write(3); /* sends hello string */
Wire.endTransmission(); /* stop transmitting */
Wire.requestFrom(8, 18); /* request & read data of size 13 from slave */
while (Wire.available()) {
char c = Wire.read();
Serial.print(c);
}
}
И код Arduino:
#include <Wire.h>
void setup() {
Wire.begin(8); /* join i2c bus with address 8 */
Wire.onReceive(receiveEvent); /* register receive event */
Wire.onRequest(requestEvent); /* register request event */
Serial.begin(9600); /* start serial for debug */
}
void loop() {
delay(100);
}
// function that executes whenever data is received from master
void receiveEvent(int howMany) {
while (0 < Wire.available()) {
int c = Wire.read(); /* receive byte as a character */
Serial.print(c); /* print the character */
}
}
// function that executes whenever data is requested from master
void requestEvent() {
Wire.write("hello esp");
}
Но я обнаружил, что никаких данных отправлено не было.
Я подключил вывод 21 непосредственно к A4 и 22 - к A5.
Я не могу найти, в чем проблема. Кроме того, я не знаю, правильный ли адрес устройства или нет, так как, когда я попробовал сканер I2C, он не обнаружил никакого устройства.
Кроме того, я надеюсь, что существует аналогичный метод двусторонней связи UART между Arduino и ESP, поскольку я не нашел ни одного, так как мне нужны оба чипа для передачи данных друг другу.
@Ahmed Moustafa, 👍3
Обсуждение1 ответ
В данный момент я работаю над чем-то подобным. Не полный ответ на некоторые мысли:
Задумывались ли вы о том, что Uno - это плата 5 В, а ESP32 - 3,3 В? Возможно, вам понадобится сдвиг уровня сигнала (их много на выбор), что-то вроде Pololu-2595, который подходит для макетной платы.
В случайных уроках ботаников есть хорошее объяснение ESP32 I2C.
- Отправка и получение различных типов данных через I2C в Arduino
- Как выбрать альтернативные контакты I2C на ESP32?
- Последовательная связь между несколькими устройствами (или ардуино)
- PN532 не обнаруживает RFID-карту при подключении к ESP32 в режиме I2C, но отлично работает с Arduino Uno
- Соединение i2c для MCP4725 (Dac) с Esp8266 wemos d1 mini
- Протокол I2C не работает должным образом
- Альтернатива LCD-дисплеям UART/I2C?
- Плата управления реле I2C от двух Arduino Uno
До тех пор, пока сканирование ESP не найдет Arduino, нет смысла идти вперед. Сократите оба фрагмента кода до минимума (только I2C и любой серийный номер, который вам нужен для отладки). Убедитесь, что вы не поменяли местами провода. Добавьте подтягивания (4.7k или 10k) к обеим линиям I2C., @Mat
Я позаботился обо всем этом, @Ahmed Moustafa
кроме того, может быть полезен пример кода, который печатает hello на обеих карточках, @Ahmed Moustafa
@Mat Я отредактировал код, чтобы теперь было легче, @Ahmed Moustafa
"Я надеюсь, что если есть подобный метод, чтобы иметь двустороннюю связь UART между arduino и esp" - Если вы хотите использовать UART, почему бы не использовать UART? Он проще в использовании, чем I2C., @chrisl