esp8266-01 и Arduino UNO обмен данными через i2c
Я не могу обмениваться данными через i2c с моим esp-01 в качестве ведущего устройства и UNO в качестве ведомого устройства. я получаю специальные символы, отправляемые обратно в esp, но мой esp отправляет правильно... выход на моем esp-01 вывод на моем UNO
Подключения: esp-01 gpio-0 к uno A4 и gpio-2 к uno A5. это потому, что я не использую переключатель уровня или какая-то ошибка в моем коде?
вот мой мастер-код esp
#include <Wire.h>
#define I2CAddressESPWifi 6
int x=32;
void setup()
{
Serial.begin(115200);
Wire.begin(0,2);//Измените на Wire.begin() для не ESP.
}
void loop()
{
Wire.beginTransmission(I2CAddressESPWifi);
Wire.write(x);
Wire.endTransmission();
x++;
delay(1);//Обязательно. Не знаю почему!
Wire.requestFrom(I2CAddressESPWifi,10);
Serial.print("Request Return:[");
while (Wire.available())
{
delay(100);
char c = Wire.read();
Serial.print(c);
}
Serial.println("]");
delay(500);
}
а вот мой подчиненный код Uno
#include <Wire.h>
#define I2CAddressESPWifi 6
void setup()
{
Serial.begin(115200);
Wire.begin(I2CAddressESPWifi);
Wire.onReceive(espWifiReceiveEvent);
Wire.onRequest(espWifiRequestEvent);
}
void loop()
{
delay(1);
}
void espWifiReceiveEvent(int count)
{
Serial.print("Received[");
while (Wire.available())
{
char c = Wire.read();
Serial.print(c);
}
Serial.println("]");
}
void espWifiRequestEvent()
{
String ts = getTime();
Serial.print("Sending:[");
Serial.print(ts.c_str());
Serial.println("]");
Wire.write(ts.c_str());
}
String getTime(){
int sec = millis() / 1000;
int min = sec / 60;
int hr = min / 60;
String ts = "U:";
if (hr<10) ts+="0";
ts += hr;
ts +=":";
if ((min%60)<10) ts+="0";
ts += min % 60;
ts +=":";
if ((sec%60)<10) ts+="0";
ts += sec % 60;
return(ts);
}
@Vallabh Rao, 👍0
Обсуждение1 ответ
Лучший ответ:
Возможно, Serial.print()
в функции события запроса подчиненного устройства вызывают слишком большую задержку (растяжение часов?). Вам следует сделать Wire.write()
вторым оператором в этой функции сразу после вызова getTime
. Или вы можете использовать Wire.write("Hello")
как единственный оператор в функции, чтобы сузить круг проблем.
- Проблемы с подключением I2C на ESP8266 — 12F, какие контакты использовать?
- ADS1115: измерение напряжения 5 В и питание от 3,3 В
- Варианты протокола для обмена данными между Arduino и ESP8266
- Отправка значений из arduino uno в wemos d1 r1
- Соединение i2c для MCP4725 (Dac) с Esp8266 wemos d1 mini
- HD44780 отображает неправильно черный на синем вместо белого на синем
- ESP8266 не работает с MPU 6050 по проводной библиотеке и I2C
- Делитесь контактами I2C с другими устройствами при отсутствии GPIO
Подтягивающие резисторы?, @Mikael Patel
нет... зачем мне это? и между чем?, @Vallabh Rao
Попробуйте выбрать адрес, который не зарезервирован для специальных целей. Тот, который находится между 8 и 119 включительно., @Majenko
Я попробовал 15, это не имело никакого значения... :(, @Vallabh Rao
Подтягивающие резисторы на шине I2C (SDA, SCK) необходимы, если они не предусмотрены на плате. Проверьте спецификацию I2C., @Mikael Patel