สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
ห้องสมุดเพื่อใช้ i2c pcf8591 IC กับ Arduino และ esp8266
IC นี้สามารถควบคุม (จนถึง 4) อินพุตแบบอะนาล็อกและ/หรือเอาต์พุตแบบอะนาล็อก 1 รายการ เช่น วัดแรงดันไฟ อ่านค่าเทอร์มิสเตอร์หรือหรี่ไฟ LED
สามารถอ่านค่าแอนะล็อกและเขียนค่าแอนะล็อกได้เพียง 2 สาย (เหมาะสำหรับ ESP-01)
ฉันพยายามทำให้การใช้ IC นี้ง่ายขึ้นด้วยชุดการทำงานที่น้อยที่สุด
คุณสามารถค้นหาเวอร์ชันที่อัปเดตบนเว็บไซต์ของฉัน
ขั้นตอนที่ 1: I2c ทำงานอย่างไร
I2C ใช้งานได้กับสองสายคือ SDA (สายข้อมูล) และ SCL (สายนาฬิกา)
ทั้งสองเส้นนี้เป็นท่อระบายน้ำแบบเปิด แต่ถูกดึงขึ้นด้วยตัวต้านทาน
โดยปกติจะมีเจ้านายหนึ่งคนและทาสหนึ่งคนหรือหลายคนในบรรทัด แม้ว่าจะมีเจ้านายหลายคน แต่เราจะพูดถึงเรื่องนี้ในภายหลัง
ทั้งมาสเตอร์และสเลฟสามารถส่งหรือรับข้อมูลได้ ดังนั้นอุปกรณ์สามารถอยู่ในสถานะใดสถานะหนึ่งจากสี่สถานะเหล่านี้: การส่งสัญญาณหลัก, การรับมาสเตอร์, การส่งสัญญาณสเลฟ, การรับสเลฟ
ขั้นตอนที่ 2:
คุณสามารถหาห้องสมุดของฉันได้ที่นี่
ดาวน์โหลด.
คลิกปุ่มดาวน์โหลดที่มุมบนขวา เปลี่ยนชื่อโฟลเดอร์ PCF8591 ที่ไม่บีบอัด
ตรวจสอบว่าโฟลเดอร์ PCF8591 มี PCF8591.cpp และ PCF8591.h
วางโฟลเดอร์ไลบรารี PCF8591 /libraries/ โฟลเดอร์ของคุณ
คุณอาจต้องสร้างโฟลเดอร์ย่อยของไลบรารีหากเป็นไลบรารีแรกของคุณ
รีสตาร์ท IDE
ขั้นตอนที่ 3: การใช้งาน
ตัวสร้าง: คุณต้องผ่านที่อยู่ของ i2c (เพื่อตรวจสอบที่อยู่ให้ใช้คู่มือนี้ I2cScanner)
PCF8591 (ที่อยู่ uint8_t);
สำหรับ esp8266 หากคุณต้องการระบุพิน SDA e SCL ให้ใช้สิ่งนี้:
PCF8591 (ที่อยู่ uint8_t, uint8_t sda, uint8_t scl);
ขั้นตอนที่ 4: อ่านค่า
IC ดังที่คุณเห็นในภาพมีอินพุตแบบอะนาล็อก 4 รายการและเอาต์พุตแบบอะนาล็อก 1 รายการ
ดังนั้นหากต้องการอ่านอินพุตแบบอะนาล็อกทั้งหมดในทราสมิชชันเดียว คุณสามารถทำได้ (ค่าตั้งแต่ 0 ถึง 255):
PCF8591::AnalogInput ai = pcf8591.analogReadAll();
Serial.print(ai.ain0); Serial.print(" - "); Serial.print (ai.ain1); Serial.print(" - "); Serial.print (ai.ain2); Serial.print(" - "); Serial.println (ai.ain3);
หากคุณต้องการอ่านอินพุตหรือช่องสัญญาณอนาล็อกเดียว:
int ana = pcf8591.analogRead(AIN0); // อ่านอนาล็อก 0
ขั้นตอนที่ 5: อ่าน Vale จาก Channel
IC นี้มีการอ่านหลายประเภท และคุณสามารถใช้อินพุตแบบอะนาล็อกหรือช่องสัญญาณแอนะล็อกได้ (เมื่อคุณใช้อินพุตอนาล็อกแบบอ่านอย่างเดียวและช่องสัญญาณอยู่ในรูปภาพ)
ตัวอย่างเช่นหากต้องการอ่านค่าของช่อง 0 ในสองอินพุตที่แตกต่างกันคุณต้องทำ:
int ana = pcf8591.analogRead(CHANNEL0, TWO_DIFFERENTIAL_INPUT); // อ่านอนาล็อก 0
ขั้นตอนที่ 6: เขียนค่า
หากคุณต้องการเขียนค่าแอนะล็อก คุณต้องทำ (ค่าตั้งแต่ 0 ถึง 255):
pcf8591.analogWrite(128);
ขั้นตอนที่ 7: คุณสมบัติเพิ่มเติม
คุณสมบัติเพิ่มเติมคือการอ่านแรงดันเขียน: สำหรับการคำนวณแรงดันไฟ คุณต้องผ่านพารามิเตอร์บางตัว:
- microcontrollerReferenceVoltage: รับแรงดันไฟฟ้าจากแรงดันไฟฟ้าไมโครคอนโทรลเลอร์ (เฉพาะ AVR ไม่มี esp8266 สำหรับ esp 3.3v คงที่)
- referenceVoltage: ถ้า microcontrollerReferenceVoltage false รับค่านี้ คำสั่งคือ:
โมฆะ voltageWrite (ค่าโฟลต, bool microcontrollerReferenceVoltage = true, float referenceVoltage = 5.0);
float voltageRead (uint8_t analogPin, bool microcontrollerReferenceVoltage = true, float referenceVoltage = 5.0);
ตัวอย่างคือ:
pcf8591.voltageWrite(2.7); // เอาต์พุต 2.7Volts
ล่าช้า (3000);
float ana0V = pcf8591.voltageRead (AIN0); // อ่านแรงดันจากแอนะล็อก 0
Serial.println (ana0V);
ขั้นตอนที่ 8: ตัวอย่างไดอะแกรมการเชื่อมต่อ
ขั้นตอนที่ 9: ขอบคุณ
ชุดโครงการ i2c (คอลเลกชัน):
- เซ็นเซอร์ความชื้นอุณหภูมิ
- เครื่องขยายสัญญาณอนาล็อก
- เครื่องขยายสัญญาณดิจิตอล
- จอ LCD