Actually its pretty possible
(Can let back and forth communication)
code for nodemcu:
#include <Wire.h>
void setup() {
Serial.begin(9600); /* begin serial for debug /
Wire.begin(D1, D2); / join i2c bus with SDA=D1 and SCL=D2 of NodeMCU */
}
void loop() {
Wire.beginTransmission(8); /* begin with device address 8 /
Wire.write("Hello Arduino"); / sends hello string /
Wire.endTransmission(); / stop transmitting */
Wire.requestFrom(8, 13); /* request & read data of size 13 from slave */
while(Wire.available()){
char c = Wire.read();
Serial.print(c);
}
Serial.println();
delay(1000);
}
Arduino Uno:
#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()) {
char c = Wire.read(); /* receive byte as a character /
Serial.print(c); / print the character /
}
Serial.println(); / to newline */
}
// function that executes whenever data is requested from master
void requestEvent() {
Wire.write("Hello NodeMCU"); /*send string on request */
}
arduino pin A4 to NodeMCU D1
arduino pin A5 to NodeMCU D2
ground of arduino to NodeMCU ground