สารบัญ:

I2C Relay กับ Arduino IDE: 5 ขั้นตอน
I2C Relay กับ Arduino IDE: 5 ขั้นตอน

วีดีโอ: I2C Relay กับ Arduino IDE: 5 ขั้นตอน

วีดีโอ: I2C Relay กับ Arduino IDE: 5 ขั้นตอน
วีดีโอ: ตอนที่ 5 การใช้งาน OLED(i2c) และ DHT sensor และเริ่ม multi-tasking 2024, พฤศจิกายน
Anonim
รีเลย์ I2C กับ Arduino IDE
รีเลย์ I2C กับ Arduino IDE

ฉันสั่งรีเลย์บอร์ดที่ดี แต่ไม่มีคำสั่ง ArduinoIDE แค่ Raspberry Pi e.o ฉันพบวิธีใช้งานกับ Arduino และต้องการแชร์เพื่อให้คุณประหยัดเวลาได้

ตัวอย่าง RaspberryPi ดั้งเดิม:

wiki.52pi.com/index.php/DockerPi_4_Channel_Relay_SKU:_EP-0099

สิ่งที่ดีคือคุณสามารถวางซ้อนกันได้ถึง 4 บอร์ด คุณจึงสามารถใช้ 4 x 4 = 16 รีเลย์บนบัส I2C หนึ่งบัส

นอกจากนี้ยังมีข้อเสียบางประการ:

  • ขั้วเล็กไม่พอดีกับลวดขนาด 1 mm2
  • คุณไม่สามารถเปลี่ยนสายไฟของขั้วต่อด้านล่างเมื่อวางซ้อนกันได้

แต่ยังคงมีประโยชน์ของกระดาน

ขั้นตอนที่ 1: การเดินสาย

การเดินสายไฟ
การเดินสายไฟ
การเดินสายไฟ
การเดินสายไฟ
การเดินสายไฟ
การเดินสายไฟ

ในภาพคุณสามารถเห็นการเดินสายไฟ

52Pi ต้องการทั้ง 5V (สำหรับรีเลย์) en 3.3V (ชิป I2C)

ต้องใช้สายไฟ 5 เส้น:

  • GND เป็น GND
  • 5 V ถึง 5 V
  • 3.3 V ถึง 3.3 V
  • SLA เป็น SLA
  • SCL เป็น SCL

หากคุณใช้ Arduino UNO หรือ 5 V อื่น ๆ ให้ระวังสูงสุด 3, 6 V จากคอนโทรลเลอร์ I2C! ใช้ตัวต้านทานหรืออย่างอื่นเพื่อลด 5 V จาก PIN ของ Arduino!

ขั้นตอนที่ 2: ตัวอย่างโค้ดอย่างง่าย:

/* ตัวอย่าง Arduino IDE (ESP) สำหรับรีเลส์บอร์ด I2C

* โดย Laurens Korste www.boktorrobotica.nl * ใช้งานได้ฟรี */ #include // สำหรับการตั้งค่าโมฆะการสื่อสาร I2C () { // กฎนี้ไม่ใช่สำหรับ UNO หรือบอร์ดที่มีหมุด I2C เฉพาะ Wire.begin (D1, D2); // เข้าร่วมบัส i2c ด้วย SDA=D1 และ SCL=D2 สำหรับ NodeMCU } void loop() { Wire.beginTransmission(0x10);/* เริ่มส่งไปยังที่อยู่ I2C 10 (เพื่อเปลี่ยนเป็น 11, 12 หรือ 13 ด้วย) */ Wire.write(0x01); /* ตัวเลือก 1 (จาก 4) บนบอร์ด 10 (เช่น 0x02, 0x03, 0x04) */ Wire.write(0xFF); /* ตั้งค่ารีเล 1 บนบอร์ด 10 เป็นเปิด ตัวเลขทั้งหมด > 0 จะทำเช่นนั้น */ Wire.endTransmission(); /* หยุดส่งสัญญาณ */ ล่าช้า (3000); Wire.beginการส่ง(0x10); /* */ Wire.write(0x01); Wire.write(0x00); /* ตั้งค่ารีเล 1 บนบอร์ด 10 เป็น OFF */ Wire.endTransmission(); /* หยุดส่งสัญญาณ */ ล่าช้า (3000); }

ขั้นตอนที่ 3: รหัสทดสอบสี่รีเลย์

/* ร่างโดย Laurens Korste สำหรับ Arduino (ESP / NodeMCU)

* แต่บอร์ดอื่นๆ ก็ทำเช่นกัน * www.boktorrobotica.nl * ใน skeych นี้ al รีเลย์ 4 ตัวจะถูกเปิดใช้งานเมื่อปิดใช้งาน */ #include // สำหรับการตั้งค่าการสื่อสารเป็นโมฆะ I2C () { Serial.begin (115200); // เริ่มซีเรียลสำหรับการดีบัก (9600 สำหรับ UNO) Wire.begin(D1, D2); // เข้าร่วมบัส i2c ด้วย SDA=D1 และ SCL=D2 ของ NodeMCU ไม่จำเป็นต้องมี UNO } void loop() { สำหรับ (int i=1; i<=4; i++){ Wire.beginTransmission(0x10); // เริ่มต้นด้วยที่อยู่อุปกรณ์ Wire.write(i); // เลือกรีเลส์ Wire.write(0xFF); // ส่งรหัส "เปิด" FF (ทุก ๆ การนับตั้งแต่ 01 ถึง FF จะทำ) Wire.endTransmission(); // หยุดส่ง Serial.write(i); Serial.println(" aan "); ล่าช้า (1000); Wire.beginการส่ง(0x10); // เริ่มต้นด้วยที่อยู่อุปกรณ์ Wire.write(i); Wire.write(0x00); // ส่งรหัส "ปิด" Wire.endTransmission(); // หยุดส่ง Serial.write(i); Serial.println(" uit "); ล่าช้า (1000); } }

ขั้นตอนที่ 4: โครงการของฉัน

โครงการของฉัน
โครงการของฉัน
โครงการของฉัน
โครงการของฉัน

ฉันได้เขียนโค้ดเพื่อใช้งานบานประตูหน้าต่างทั้ง 3 บานของฉัน ซึ่งสามารถทำได้ด้วยสวิตช์ แต่ด้วยแอป BLYNK ดูภาพ

  • การกดสั้นๆ หนึ่งครั้งจะเริ่มขยับชัตเตอร์หนึ่งบาน (หรือหยุดเมื่อเคลื่อนที่)
  • กดค้างหนึ่งครั้งและบานประตูหน้าต่างทั้งสามบานจะเปิดขึ้น (หรือปิดหรือหยุด)
  • แรงดันสองเท่า: บานประตูหน้าต่างไปที่ตำแหน่ง "รู"

ดังที่เห็นในภาพ ฉันยังรวมเซ็นเซอร์อุณหภูมิและแสงไว้ด้วย

ตอนนี้ทุกอย่างบน PCB ฐานที่ดีและเรียบร้อยในกล่อง

ขั้นตอนที่ 5: เรียกรีเลย์ด้วยคำสั่งเดียว

มีประโยชน์หากคุณต้องการเพียงคำสั่งเดียวเพื่อเปิดใช้งานหรือปิดใช้งานรีเลย์ ด้านล่างนี้เป็นฟังก์ชันที่สามารถทำได้ (ด้วย lowbyte และ highbyte)

/* ร่างโดย Laurens Korste สำหรับ Arduino (ESP / NodeMCU) พร้อมรีเลย์บอร์ด I2C * แต่บอร์ดอื่นๆ ก็ทำได้เช่นกัน * href= https://www.boktorrobotica.nl; www.boktorrobotica.nl * https://wiki.52pi.com/index.php/DockerPi_4_Channel_Relay_SKU:_EP-0099; www.boktorrobotica.nl * ในโครงร่างนี้ รีเลย์จะถูกเปิดใช้งานโดยการโทรหนึ่งครั้ง *// #include // สำหรับการสื่อสาร I2C // ประกาศรีเลย์ 4 PCB's Per PCB เป็นไปได้ 4 รีเลย์ ในภาพร่างนี้มีเพียงสอง PCB // PCB และรีเลย์ถูกรวมเข้าด้วยกันเพื่อให้สามารถเรียกได้ด้วยคำสั่งเดียว const byte PutOn=0xFF; // คำสั่งให้เปิด const byte PutOff=0x00; //comand เพื่อปิด const word Relay1bord1=0x1001; //คุณสามารถสุ่มชื่อโดยตัวอย่าง Relay1 const word Relay2bord1=0x1002; //คุณสามารถสุ่มชื่อโดยตัวอย่าง Relay2 คำ const Relay3bord1=0x1003; // คุณสามารถสุ่มชื่อโดยตัวอย่าง Relay3 คำ const Relay4bord1=0x1004; //คุณสามารถเดาชื่อได้จากตัวอย่าง Relay4 const word Relay1bord2=0x1101; //คุณสามารถสุ่มชื่อได้ด้วยตัวอย่าง Relay5 const w หรือรีเลย์2bord2=0x1102; //คุณสามารถเดาชื่อได้จากตัวอย่าง Relay6 const word Relay3bord2=0x1103; //คุณสามารถเดาชื่อได้จากตัวอย่าง Relay7 const word Relay4bord2=0x1104; // คุณสามารถมีโอกาสได้ชื่อตามตัวอย่าง Relay8 const word Relay1bord3=0x1201; // คุณสามารถมีโอกาสได้ชื่อตามตัวอย่าง Relay9 const word Relay2bord4=0x1302; // คุณสามารถเสี่ยงชื่อโดยตัวอย่าง Relay14 ตั้งค่าเป็นโมฆะ () { Serial.begin (115200); // เริ่มซีเรียลสำหรับการดีบัก (9600 สำหรับ UNO) Wire.begin(D1, D2); // เข้าร่วมบัส i2c กับ SDA=D1 และ SCL=D2 ของ NodeMCU ไม่จำเป็นต้องมี UNO } void loop () { // เพื่อสลับรีเลย์ 4 บน PCB 2 บน RelayActie (Relay4bord2, PutOn); ล่าช้า (1000); // เพื่อสลับรีเลย์ 4 บน PCB 2 ปิด RelayActie(Relay4bord2, PutOff); ล่าช้า (1000); } โมฆะ RelayActie (รีเลย์คำ ไบต์ OnOrOff) { Wire.beginTransmission (highByte (รีเลย์)); Wire.write (lowByte (รีเลย์)); Wire.write (OnOrOff); Wire.endTransmission(); }

แนะนำ: