แนะนำเรื่องการใช้ I2C สำหรับ Arduino, ESP32 และ Micro Python
ความสัมพันธ์ :
I2C เป็นโปรโตคอลการสื่อสารที่ถูกออกแบบมาเพื่อใช้ในการเชื่อมต่ออุปกรณ์อิเล็กทรอนิกส์ในระบบแบบแปลงข้อมูลแบบมาสเตอร์-สแลฟ (Master-Slave) ซึ่งหมายความว่ามีอุปกรณ์หลัก (Master) และอุปกรณ์ย่อย (Slave) ที่เชื่อมต่อกันผ่านสาย SDA และ SCL.
- Master (ผู้ควบคุมหลัก): อุปกรณ์หลักใช้ในการส่งคำสั่งและข้อมูลไปยังอุปกรณ์ย่อย (Slave) โดยอาศัย I2C address ของแต่ละอุปกรณ์. Master กำหนดความเร็วในการสื่อสาร (บางครั้งเรียกว่า Baud rate) และควบคุมการสื่อสารโดยรวมในเครือข่าย I2C.
- Slave (ผู้ควบคุมย่อย): อุปกรณ์ย่อยรอรับคำสั่งและข้อมูลจาก Master โดยอ้างอิงถึง I2C address ของตัวเอง. Slave จะตอบสนองกับคำสั่งของ Master และส่งข้อมูลกลับหา Master ตามที่ได้รับคำสั่ง.
ความจำเป็น :
การใช้งาน I2C มีความจำเป็นในหลายสถานการณ์ เช่น:
- การสื่อสารกับอุปกรณ์นิ่ง (Peripherals): I2C มักถูกใช้ในการสื่อสารกับอุปกรณ์เซ็นเซอร์และโมดูลต่าง ๆ ที่อยู่ในระบบภายนอก เช่น อุปกรณ์เก็บข้อมูลแบบ EEPROM, อุปกรณ์เรนเดอร์แสดงผล OLED, หรือเซ็นเซอร์อุณหภูมิ.
- การเชื่อมต่อหลายอุปกรณ์: I2C ช่วยให้คุณสามารถเชื่อมต่อหลายอุปกรณ์ไปยังไมโครคอนโทรลเลอร์เดียว โดยใช้แค่สองสายเท่านั้น นี่เป็นประโยชน์ในโปรเจกต์ที่มีหลายอุปกรณ์ที่ต้องการการสื่อสาร.
- ประหยัดพื้นที่: I2C เป็นโปรโตคอลที่ใช้เส้นสายน้อยกว่า การสื่อสารแบบอื่น ๆ เช่น SPI (Serial Peripheral Interface) หรือ UART (Universal Asynchronous Receiver-Transmitter) ซึ่งทำให้เหมาะสำหรับโปรเจกต์ที่มีพื้นที่จำกัด.
- ความสะดวกและเร็ว: I2C มีความสะดวกในการใช้งานและมีความเร็วในการสื่อสารที่เพียงพอสำหรับส่วนใหญ่ของโปรเจกต์.
- การติดตั้งและการใช้งาน: มีไลบรารีที่มีอยู่สำหรับ I2C บนหลายไมโครคอนโทรลเลอร์ที่ทำให้ง่ายต่อการติดตั้งและการใช้งาน.
ดังนั้น I2C เป็นโปรโตคอลที่มีประโยชน์มากในการเชื่อมต่อและควบคุมอุปกรณ์อิเล็กทรอนิกส์ในโปรเจกต์ที่ต้องการการสื่อสารระหว่างไมโครคอนโทรลเลอร์และอุปกรณ์อื่น ๆ ในระบบของคุณโดยมีความสะดวกและประหยัดพื้นที่อีกด้วย.
การใช้งาน I2C (Inter-Integrated Circuit) เป็นหนึ่งในวิธีที่ดีในการเชื่อมต่ออุปกรณ์อิเล็กทรอนิกส์ต่าง ๆ กับไมโครคอนโทรลเลอร์เช่น Arduino, ESP32 และไมโครไพทอล เนื้อหาในบทความนี้จะช่วยคุณเริ่มต้นในการใช้งาน I2C เบื้องต้นสำหรับเครื่องมือเหล่านี้
1. I2C เบื้องต้น
I2C เป็นมาตรฐานสื่อสารที่ออกแบบมาเพื่อใช้ในการเชื่อมต่ออุปกรณ์อิเล็กทรอนิกส์ในระบบแบบแปลงข้อมูลแบบมาสเตอร์-สแลฟ. มันใช้สายสองเส้นสำหรับการสื่อสาร - SDA (Serial Data Line) และ SCL (Serial Clock Line). นี่คือขั้นตอนพื้นฐานในการใช้งาน I2C:
- ให้ตรวจสอบความถูกต้องของการต่อสาย SDA และ SCL ระหว่างอุปกรณ์ที่คุณต้องการเชื่อมต่อและไมโครคอนโทรลเลอร์ของคุณ (Arduino, ESP32, หรือไมโครไพทอล).
- ต้องมีข้อมูลที่แน่นอนเกี่ยวกับที่อยู่ I2C ของอุปกรณ์ (หรือที่เรียกว่า I2C address) ซึ่งต้องระบุในโค้ดของคุณ.
- คุณต้องเขียนโค้ดในไมโครคอนโทรลเลอร์เพื่อส่งข้อมูลไปยังอุปกรณ์ I2C หรือรับข้อมูลจากอุปกรณ์ I2C โดยใช้ไลบรารีหรือไลบรารีที่มีอยู่สำหรับแต่ละไมโครคอนโทรลเลอร์.
2. การใช้ I2C บน Arduino
การต่อสาย
- ใน Arduino, สาย SDA และ SCL ประกอบด้วยขา A4 และ A5 ตามลำดับ.
การเขียนโค้ด
- คุณสามารถใช้ Wire Library ใน Arduino ในการเขียนโค้ดสำหรับ I2C.
#include <Wire.h>
void setup() {
Wire.begin(); // เริ่มต้นการใช้งาน I2C
// สามารถเพิ่มการตั้งค่าอื่น ๆ ตามต้องการ
}
void loop() {
// โค้ดเชื่อมต่อกับอุปกรณ์ I2C และสื่อสารข้อมูลได้ที่นี่
}
3. การใช้ I2C บน ESP32
อ้างอิง : https://espressif-docs.readthedocs-hosted.com/projects/arduino-esp32/en/latest/api/i2c.html
การต่อสาย
- ใน ESP32, สาย SDA และ SCL ประกอบด้วยขา GPIO 21 และ GPIO 22 ตามลำดับ.
การเขียนโค้ด
- คุณสามารถใช้ไลบรารี Wire.h ใน ESP32 เช่นเดียวกับ Arduino.
#include <Wire.h>
void setup() {
Wire.begin(); // เริ่มต้นการใช้งาน I2C
// สามารถเพิ่มการตั้งค่าอื่น ๆ ตามต้องการ
}
void loop() {
// โค้ดเชื่อมต่อกับอุปกรณ์ I2C และสื่อสารข้อมูลได้ที่นี่
}
4. การใช้ I2C บน Micro Python
การต่อสาย
- การต่อสาย I2C บนไมโครไพทอลจะขึ้นอยู่กับบอร์ดคอนโทรลเลอร์ที่คุณใช้. คุณต้องทำการต่อสาย SDA และ SCL ไปยังขาที่เหมาะสมของบอร์ด.
การเขียนโค้ด
- คุณต้องใช้ไลบรารี I2C ที่เหมาะสำหรับไมโครไพทอล ที่อาจต่างกันไปตามบอร์ดและไมโครคอนโทรลเลอร์ที่คุณใช้.
นี่คือการเริ่มต้นเบื้องต้นในการใช้งาน I2C สำหรับ Arduino, ESP32, และไมโครไพทอล โปรดทราบว่าการใช้งาน I2C อาจต้องปรับแต่งตามอุปกรณ์และโครงการของคุณ. ตรวจสอบเอกสารและคู่มือที่เกี่ยวข้องของผู้ผลิตไมโครคอนโทรลเลอร์และอุปกรณ์ I2C เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับการใช้งาน I2C ในบทบาทที่คุณต้องการใช้งาน.
Code :
#include <Arduino.h>
#include <Wire.h>
// กำหนดที่อยู่ I2C สำหรับอุปกรณ์สามตัว
#define SLAVE_ADDRESS_1 8
#define SLAVE_ADDRESS_2 9
#define SLAVE_ADDRESS_3 10
void setup() {
Wire.begin(); // กำหนดค่าเริ่มต้นให้การสื่อสารผ่าน I2C
Serial.begin(9600); // กำหนดค่าเริ่มต้นให้การสื่อสารผ่านช่องทางอีกช่องหนึ่งสำหรับการดีบัค
}
void loop() {
// จัดการการสื่อสารกับแต่ละอุปกรณ์แยกกัน
handleDevice1(SLAVE_ADDRESS_1);
handleDevice2(SLAVE_ADDRESS_2);
handleDevice3(SLAVE_ADDRESS_3);
// โค้ดเพิ่มเติมสำหรับงานที่ซ้ำกัน
}
void handleDevice1(int address) {
// สื่อสารกับอุปกรณ์ 1 (ที่อยู่อาณาเขต: SLAVE_ADDRESS_1)
Wire.beginTransmission(address); // เริ่มการสื่อสารกับอุปกรณ์
// ส่งคำสั่งหรือข้อมูลที่เฉพาะกับอุปกรณ์ 1
Wire.write("คำสั่งสำหรับอุปกรณ์ 1");
Wire.endTransmission(); // สิ้นสุดการสื่อสาร
}
void handleDevice2(int address) {
// สื่อสารกับอุปกรณ์ 2 (ที่อยู่อาณาเขต: SLAVE_ADDRESS_2)
Wire.beginTransmission(address); // เริ่มการสื่อสารกับอุปกรณ์
// ส่งคำสั่งหรือข้อมูลที่เฉพาะกับอุปกรณ์ 2
Wire.write("คำสั่งสำหรับอุปกรณ์ 2");
Wire.endTransmission(); // สิ้นสุดการสื่อสาร
}
void handleDevice3(int address) {
// สื่อสารกับอุปกรณ์ 3 (ที่อยู่อาณาเขต: SLAVE_ADDRESS_3)
Wire.beginTransmission(address); // เริ่มการสื่อสารกับอุปกรณ์
// ส่งคำสั่งหรือข้อมูลที่เฉพาะกับอุปกรณ์ 3
Wire.write("คำสั่งสำหรับอุปกรณ์ 3");
Wire.endTransmission(); // สิ้นสุดการสื่อสาร
}