NodeMCU ESP8266 สัปดาห์ที่ 7

 

NodeMCU ESP8266 เชื่อมต่อ ส่งข้อมูลกับ Arduino แบบ I2C หลายตัว


NodeMCU ESP8266 ส่งข้อมูลหา Arduino แบบ I2c โดยใช้สายส่งข้อมูล 2 เส้น การส่งข้อมูลแบบ I2c เป็นการส่งข้อมูลแบบขนาน อุปกรณ์หลายๆตัวจะต่อขนานกัน จะอ้างอิง address ตำแหน่งของอุปกรณ์ก่อนส่งข้อมูล ในบทความนี้ จะสั่งงานให้ NodeMCU ESP8266 ตัวที่1 ส่งค่าสั่งงานไปให้ Arduino ตัวที่ 2 เปิดปิดไฟ LED 
และ ส่งค่าสั่งงานไปให้ NodeMCU ESP8266 ตัวที่ 3 เปิดปิดไฟ LED 
Arduino UNO R3 ขา I2c จะอยู่ที่ A4 A5  
NodeMCU ESP8266 
ขา I2c จะอยู่ที่ D1=SCL , D2=SDA

โค๊ด1 กำหนดให้ NodeMCU ESP8266 ตัวที่ 1 เป็นตัวส่งข้อมูล
อัพโหลดโค้ดด้านล่างลง NodeMCU ESP8266 ตัวที่ 1
// NodeMCU ตัวที่ 1 ใช้ส่งข้อมูลหา Arduino ตัวที่ 2 และ Arduino ตัวที่
#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
Serial.println("ส่งค่าให้ Arduino ตัวที่ 3");
Wire.beginTransmission( slaveAddress3 ); //กดหนด Address เตรียมส่งข้อมูลให้ Arduino ตัวที่ 3
Wire.write(Ledon); // ส่งค่าในตัวแปล Ledon ให้ Arduino ตัวที่ 3 ไฟ LED ติด
delay(1000);
Wire.endTransmission(); // ปิดการส่งข้อมูลให้ Arduino ตัวที่ 3
Wire.beginTransmission( slaveAddress3 ); //กดหนด Address เตรียมส่งข้อมูลให้ Arduino ตัวที่ 3
Wire.write(Ledoff); // ส่งค่าในตัวแปล Ledoff ให้ Arduino ตัวที่ 3 ไฟ LED ดับ
delay(1000);
Wire.endTransmission(); // ปิดการส่งข้อมูลให้ Arduino ตัวที่ 3
delay(1000);
}

โค๊ดที่2 กำหนดให้ Arduino ตัวที่ 2 เป็นตัวรับข้อมูล
อัพโหลดโค้ดด้านล่างลง Arduino ตัวที่ 2 กำหนดให้ Address คือ 9
// Arduino ตัวที่ 2 ใช้รับข้อมูล ที่ NodeMCU ตัวที่ 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);
}
}

โค๊ด3 กำหนดให้ Arduino UNO R3 ตัวที่ 3 เป็นตัวรับข้อมูล
อัพโหลดโค้ดด้านล่างลง Arduino UNO R3 ตัวที่ 3 กำหนดให้ Address คือ 10
// Arduino ตัวที่ 3 ใช้รับข้อมูล ที่ NodeMCU ตัวที่ 1 ส่งมา
#include <Wire.h>
int LED2 =13;
int x = 0;
void setup() {
Wire.begin(10); // ตั้งค่าให้ Arduino ตัวมี่ 3 มี Address เป็น 10
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);
}
}

ลิ้งhttps://www.myarduino.net/article/174/%E0%B8%AA%E0%B8%AD%E0%B8%99%E0%B9%83%E0%B8%8A%E0%B9%89%E0%B8%87%E0%B8%B2%E0%B8%99-nodemcu-esp8266-%E0%B9%80%E0%B8%8A%E0%B8%B7%E0%B9%88%E0%B8%AD%E0%B8%A1%E0%B8%95%E0%B9%88%E0%B8%AD-%E0%B8%AA%E0%B9%88%E0%B8%87%E0%B8%82%E0%B9%89%E0%B8%AD%E0%B8%A1%E0%B8%B9%E0%B8%A5%E0%B8%81%E0%B8%B1%E0%B8%9A-arduino-%E0%B9%81%E0%B8%9A%E0%B8%9A-i2c-%E0%B8%AB%E0%B8%A5%E0%B8%B2%E0%B8%A2%E0%B8%95%E0%B8%B1%E0%B8%A7

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

หน้าที่ของesp8266