วิธีการต่ออุปกรณ์ สอนใช้งาน NodeMCU ESP8266 เชื่อมต่อ ส่งข้อมูลกับ Arduino แบบ I2C
NodeMCU ESP8266 -> Arduino UNO R3
GND -> GND
Vcc -> 5V
ขาD2 -> ขาA4
ขาD1 -> ขาA5
เราจะกำหนดให้ NodeMCU ESP8266 ตัวที่ 1 เป็นตัวส่งข้อมูล
เขียนโค้ดต่อไปนี้ และอัพโหลดโค้ดลง NodeMCU ESP8266 ตัวที่ 1
เราจะกำหนดให้ Arduino ตัวที่ 2 เป็นตัวรับข้อมูล
เขียน และอัพโหลดโค้ดด้านล่างลง Arduino ตัวที่ 2 กำหนดให้ Address คือ 9
// NodeMCU ตัวที่ 1 ใช้ส่งข้อมูลหา Arduino ตัวที่ 2
#include <Wire.h>
int Ledoff = 0;
int Ledon = 1;
int slaveAddress2 = 9;
int slaveAddress3 = 10;
void setup()
{
Wire.begin(); // join i2c bus (address optional for master)
Serial.begin( 9600 ); // start serial for output
}
void loop()
{
Serial.println("ส่งค่าให้ Arduino ตัวที่ 2");
Wire.beginTransmission( slaveAddress2 ); //กดหนด Address เตรียมส่งข้อมูลให้ Arduino ตัวที่ 2
Wire.write(Ledon); // ส่งค่าในตัวแปล Ledon ให้ Arduino ตัวที่ 2 ไฟ LED ดับ
delay(1000);
Wire.endTransmission(); // ปิดการส่งข้อมูลให้ Arduino ตัวที่ 2
Wire.beginTransmission( slaveAddress2 ); //กำหนด Address เตรียมส่งข้อมูลให้ Arduino ตัวที่ 2
Wire.write(Ledoff); // ส่งค่าในตัวแปล Ledoff ให้ Arduino ตัวที่ 2 ไฟ LED ดับ
delay(1000);
Wire.endTransmission(); // ปิดการส่งข้อมูลให้ Arduino ตัวที่ 2
}
// Arduino ตัวที่ 2 ใช้รับข้อมูล ที่ Arduino ตัวที่ 1 ส่งมา
#include <Wire.h>
int LED2 =13;
int x = 0;
void setup() {
Wire.begin(9); // ตั้งค่าให้ Arduino ตัวมี่ 2 มี Address เป็น 9
Wire.onReceive(receiveEvent); // register event
Serial.begin(9600); // start serial for output
pinMode(LED2, OUTPUT);
digitalWrite(LED2, LOW);
}
void loop() {
delay(100);
}
void receiveEvent( int bytes )
{
x = Wire.read(); // นำค่าที่ NodeMCU ESP8266 ตัวที่ 1 ส่งมาเก็บในตัวแปร x
Serial.println(x);
if(x ==0){
digitalWrite(LED2, LOW);
}
if(x ==1){
digitalWrite(LED2, HIGH);
}
}
NodeMCU ESP8266 ตัวที่ 1 ส่งค่า 1 ให้ Arduino ตัวที่ 2 หลอดไฟ LED ติดสว่าง
NodeMCU ESP8266 ตัวที่ 1 ส่งค่า 0 ให้ Arduino ตัวที่ 2 หลอดไฟ LED ดับ