สารบัญ:
- ขั้นตอนที่ 1: I2c ทำงานอย่างไร
- ขั้นตอนที่ 2: ห้องสมุด
- ขั้นตอนที่ 3: พฤติกรรม
- ขั้นตอนที่ 4: การใช้งาน I2c
- ขั้นตอนที่ 5: การใช้สายเดียว
- ขั้นตอนที่ 6: การอ่านโดยปริยาย
- ขั้นตอนที่ 7: อ่านง่าย
- ขั้นตอนที่ 8: อ่านแบบเต็ม
- ขั้นตอนที่ 9: แผนภาพการเชื่อมต่อ
- ขั้นตอนที่ 10: Arduino: OneWire
- ขั้นตอนที่ 11: Arduino: I2c
- ขั้นตอนที่ 12: Esp8266 (D1Mini) OneWire
- ขั้นตอนที่ 13: Esp8266 (D1Mini) I2c
- ขั้นตอนที่ 14: ขอบคุณ
วีดีโอ: DHT12 (i2c เซ็นเซอร์ความชื้นและอุณหภูมิราคาถูก) ใช้งานง่ายรวดเร็ว: 14 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:04
คุณสามารถค้นหาการอัปเดตและอื่น ๆ บนเว็บไซต์ของฉัน
ฉันชอบเซ็นเซอร์ที่สามารถใช้กับ 2 สาย (โปรโตคอล i2c) แต่ฉันชอบเซ็นเซอร์ราคาไม่แพง
นี่คือไลบรารี Arduino และ esp8266 สำหรับเซ็นเซอร์อุณหภูมิ/ความชื้นในซีรีส์ DHT12 ที่มีต้นทุนต่ำมาก (น้อยกว่า 1$) ที่ทำงานร่วมกับ i2c หรือการเชื่อมต่อแบบสายเดียว
มีประโยชน์มากหากคุณต้องการใช้ esp01 (หากคุณใช้ซีเรียล คุณมีเพียง 2 พิน) เพื่ออ่านความชื้นและอุณหภูมิ และแสดงบน i2c LCD
AI อ่านว่าบางครั้งดูเหมือนว่าต้องมีการสอบเทียบ แต่ฉันมีต้นไม้นี้และได้รับค่าที่คล้ายกับ DHT22 มาก หากคุณมีการปรับเทียบปัญหานี้ เปิดปัญหาบน github และฉันเพิ่มการนำไปใช้
ขั้นตอนที่ 1: I2c ทำงานอย่างไร
I2C ใช้งานได้กับสองสายคือ SDA (สายข้อมูล) และ SCL (สายนาฬิกา)
ทั้งสองเส้นนี้เป็นท่อระบายน้ำแบบเปิด แต่ถูกดึงขึ้นด้วยตัวต้านทาน
โดยปกติจะมีเจ้านายหนึ่งคนและทาสหนึ่งคนหรือหลายคนในบรรทัด แม้ว่าจะมีเจ้านายหลายคน แต่เราจะพูดถึงเรื่องนี้ในภายหลัง
ทั้งมาสเตอร์และสเลฟสามารถส่งหรือรับข้อมูลได้ ดังนั้นอุปกรณ์สามารถอยู่ในสถานะใดสถานะหนึ่งจากสี่สถานะเหล่านี้: การส่งสัญญาณหลัก, การรับมาสเตอร์, การส่งสัญญาณสเลฟ, การรับสเลฟ
ขั้นตอนที่ 2: ห้องสมุด
คุณสามารถหาห้องสมุดของฉันได้ที่นี่
ดาวน์โหลด
คลิกปุ่มดาวน์โหลดที่มุมบนขวา เปลี่ยนชื่อโฟลเดอร์ที่ไม่บีบอัด DHT12
ตรวจสอบว่าโฟลเดอร์ DHT มี DHT12.cpp และ DHT12.h
วางโฟลเดอร์ไลบรารี DHT ของคุณ /libraries/ โฟลเดอร์
คุณอาจต้องสร้างโฟลเดอร์ย่อยของไลบรารีหากเป็นไลบรารีแรกของคุณ
รีสตาร์ท IDE
ขั้นตอนที่ 3: พฤติกรรม
libray นี้พยายามเลียนแบบพฤติกรรมของเซ็นเซอร์ไลบรารี DHT มาตรฐาน (และคัดลอกโค้ดจำนวนมาก) และฉันเพิ่มโค้ดเพื่อจัดการ i2c olso ในลักษณะเดียวกัน
วิธีการนี้เหมือนกันกับเซ็นเซอร์ไลบรารี DHT โดยมีการเพิ่มฟังก์ชันจุดน้ำค้าง
ขั้นตอนที่ 4: การใช้งาน I2c
หากต้องการใช้กับ i2c (ที่อยู่เริ่มต้นและพิน SDA SCL เริ่มต้น) ตัวสร้างคือ:
DHT12 dht12;
และใช้ค่าเริ่มต้นสำหรับพิน SDA SCL
(สามารถกำหนดใหม่ด้วยตัวสร้างที่ระบุสำหรับ esp8266 ซึ่งจำเป็นสำหรับ ESP-01) หรือ
DHT12 dht12 (ที่อยู่ uint8_t OrPin)
addressOrPin -> ที่อยู่
เพื่อเปลี่ยนที่อยู่
ขั้นตอนที่ 5: การใช้สายเดียว
ในการใช้สายเดียว:
DHT12 dht12 (ที่อยู่ uint8_t OrPin จริง)
ที่อยู่OrPin -> pin
ค่าบูลีนคือการเลือกโหมด oneWire หรือ i2c
ขั้นตอนที่ 6: การอ่านโดยปริยาย
คุณสามารถใช้กับ "implicit", "simple read" หรือ "fullread": Implicit เฉพาะการอ่านครั้งแรกที่อ่านเซ็นเซอร์อย่างแท้จริง ส่วนการอ่านอื่น ๆ จะใช้เวลา 2 วินาที ช่วงเวลาคือค่าที่เก็บไว้ของการอ่านครั้งแรก
// การอ่านของเซ็นเซอร์มีเวลา 2 วินาที เว้นแต่คุณจะผ่านพารามิเตอร์แรง
// อ่านอุณหภูมิเป็นเซลเซียส (ค่าเริ่มต้น) float t12 = dht12.readTemperature(); // อ่านอุณหภูมิเป็นฟาเรนไฮต์ (isFahrenheit = true) float f12 = dht12.readTemperature(true); // ค่าที่อ่านได้จากเซนเซอร์อาจถึง 2 วินาที 'เก่า' (ซึ่งเป็นเซ็นเซอร์ที่ช้ามาก) float h12 = dht12.readHumidity(); // คำนวณดัชนีความร้อนในฟาเรนไฮต์ (ค่าเริ่มต้น) float hif12 = dht12.computeHeatIndex(f12, h12); // คำนวณดัชนีความร้อนในเซลเซียส (isFahreheit = false) float hic12 = dht12.computeHeatIndex(t12, h12, false); // คำนวณจุดน้ำค้างในฟาเรนไฮต์ (ค่าเริ่มต้น) float dpf12 = dht12.dewPoint(f12, h12); // คำนวณจุดน้ำค้างในเซลเซียส (isFahreheit = false) float dpc12 = dht12.dewPoint(t12, h12, false);
ขั้นตอนที่ 7: อ่านง่าย
อ่านง่ายเพื่อรับสถานะการอ่าน
// การอ่านของเซ็นเซอร์มีเวลา 2 วินาที เว้นแต่คุณจะผ่านพารามิเตอร์แรง
บูล chk = dht12.read(); // อ่านจริงก็โอเค ปัญหาอ่านผิด
// อ่านอุณหภูมิเป็นเซลเซียส (ค่าเริ่มต้น)
ลอย t12 = dht12.readTemperature(); // อ่านอุณหภูมิเป็นฟาเรนไฮต์ (isFahrenheit = true) float f12 = dht12.readTemperature(true); // ค่าที่อ่านได้จากเซนเซอร์อาจถึง 2 วินาที 'เก่า' (ซึ่งเป็นเซ็นเซอร์ที่ช้ามาก) float h12 = dht12.readHumidity(); // คำนวณดัชนีความร้อนในฟาเรนไฮต์ (ค่าเริ่มต้น) float hif12 = dht12.computeHeatIndex(f12, h12); // คำนวณดัชนีความร้อนในเซลเซียส (isFahreheit = false) float hic12 = dht12.computeHeatIndex(t12, h12, false); // คำนวณจุดน้ำค้างในฟาเรนไฮต์ (ค่าเริ่มต้น) float dpf12 = dht12.dewPoint(f12, h12); // คำนวณจุดน้ำค้างในเซลเซียส (isFahreheit = false) float dpc12 = dht12.dewPoint(t12, h12, false);
ขั้นตอนที่ 8: อ่านแบบเต็ม
อ่านแบบเต็มเพื่อรับสถานะที่ระบุ
// การอ่านของเซ็นเซอร์มีเวลา 2 วินาที เว้นแต่คุณจะผ่านพารามิเตอร์แรง
DHT12::ReadStatus chk = dht12.readStatus(); Serial.print(F("\nเซ็นเซอร์อ่าน: ")); สวิตช์ (chk) { กรณี DHT12::OK: Serial.println (F ("OK")); หยุดพัก; กรณี DHT12::ERROR_CHECKSUM: Serial.println(F("Checksum error")); หยุดพัก; กรณี DHT12::ERROR_TIMEOUT: Serial.println(F("Timeout error")); หยุดพัก; กรณี DHT12::ERROR_TIMEOUT_LOW: Serial.println(F("ข้อผิดพลาดการหมดเวลาของสัญญาณต่ำ ลองใส่ความต้านทาน pullup สูง")); หยุดพัก; กรณี DHT12::ERROR_TIMEOUT_HIGH: Serial.println(F("ข้อผิดพลาดการหมดเวลาของสัญญาณต่ำ ลองใส่ความต้านทาน pullup ต่ำ")); หยุดพัก; กรณี DHT12::ERROR_CONNECT: Serial.println(F("Connect error")); หยุดพัก; กรณี DHT12::ERROR_ACK_L: Serial.println(F("AckL error")); หยุดพัก; กรณี DHT12::ERROR_ACK_H: Serial.println(F("AckH error")); หยุดพัก; กรณี DHT12::ERROR_UNKNOWN: Serial.println(F("ตรวจพบข้อผิดพลาดที่ไม่รู้จัก")); หยุดพัก; กรณี DHT12::NONE: Serial.println(F("No result")); หยุดพัก; ค่าเริ่มต้น: Serial.println(F("Unknown error")); หยุดพัก; }
// อ่านอุณหภูมิเป็นเซลเซียส (ค่าเริ่มต้น)
ลอย t12 = dht12.readTemperature(); // อ่านอุณหภูมิเป็นฟาเรนไฮต์ (isFahrenheit = true) float f12 = dht12.readTemperature(true); // ค่าที่อ่านได้จากเซนเซอร์อาจถึง 2 วินาที 'เก่า' (ซึ่งเป็นเซ็นเซอร์ที่ช้ามาก) float h12 = dht12.readHumidity(); // คำนวณดัชนีความร้อนในฟาเรนไฮต์ (ค่าเริ่มต้น) float hif12 = dht12.computeHeatIndex(f12, h12); // คำนวณดัชนีความร้อนในเซลเซียส (isFahreheit = false) float hic12 = dht12.computeHeatIndex(t12, h12, false); // คำนวณจุดน้ำค้างในฟาเรนไฮต์ (ค่าเริ่มต้น) float dpf12 = dht12.dewPoint(f12, h12); // คำนวณจุดน้ำค้างในเซลเซียส (isFahreheit = false) float dpc12 = dht12.dewPoint(t12, h12, false);
ขั้นตอนที่ 9: แผนภาพการเชื่อมต่อ
จากตัวอย่าง มีแผนภาพการเชื่อมต่อ สิ่งสำคัญคือต้องใช้ตัวต้านทานแบบดึงขึ้นที่ถูกต้อง
ขอบคุณ Bobadas, dplasa และ adafruit ที่แบ่งปันรหัสใน github (ที่ฉันใช้รหัสและแนวคิดบางอย่าง)
ขั้นตอนที่ 10: Arduino: OneWire
ขั้นตอนที่ 11: Arduino: I2c
ขั้นตอนที่ 12: Esp8266 (D1Mini) OneWire
ขั้นตอนที่ 13: Esp8266 (D1Mini) I2c
ขั้นตอนที่ 14: ขอบคุณ
สนามเด็กเล่น Arduino (https://playground.arduino.cc/Main/DHT12SensorLibrary)
ชุดโครงการ i2c (คอลเลกชัน):
- เซ็นเซอร์ความชื้นอุณหภูมิ
- เครื่องขยายสัญญาณอนาล็อก
- เครื่องขยายสัญญาณดิจิตอล
- จอ LCD
แนะนำ:
วิธีใช้เซ็นเซอร์ความชื้นและอุณหภูมิ DHT12 I2C กับ Arduino: 7 ขั้นตอน
วิธีใช้เซ็นเซอร์ความชื้นและอุณหภูมิ DHT12 I2C กับ Arduino: ในบทช่วยสอนนี้ เราจะเรียนรู้วิธีใช้เซ็นเซอร์ความชื้นและอุณหภูมิ DHT12 I2C กับ Arduino และแสดงค่าบนจอแสดงผล OLED ดูวิดีโอ
จอ LCD I2C / IIC - ใช้ SPI LCD กับจอแสดงผล LCD I2C โดยใช้โมดูล SPI เป็น IIC กับ Arduino: 5 ขั้นตอน
จอ LCD I2C / IIC | ใช้ SPI LCD กับจอแสดงผล LCD I2C โดยใช้โมดูล SPI เป็น IIC กับ Arduino: สวัสดีทุกคน เนื่องจาก SPI LCD 1602 ปกติมีสายเชื่อมต่อมากเกินไป ดังนั้นจึงยากมากที่จะเชื่อมต่อกับ Arduino แต่มีโมดูลเดียวในตลาดที่สามารถทำได้ แปลงจอแสดงผล SPI เป็นจอแสดงผล IIC ดังนั้นคุณต้องเชื่อมต่อเพียง 4 สายเท่านั้น
จอ LCD I2C / IIC - แปลง SPI LCD เป็นจอแสดงผล LCD I2C: 5 ขั้นตอน
จอ LCD I2C / IIC | แปลง SPI LCD เป็น I2C LCD Display: การใช้จอแสดงผล spi lcd จำเป็นต้องมีการเชื่อมต่อมากเกินไป ซึ่งทำได้ยากมาก ดังนั้นฉันจึงพบโมดูลที่สามารถแปลง i2c lcd เป็น spi lcd ได้ ดังนั้นมาเริ่มกันเลย
PCF8591 (i2c Analog I/O Expander) ใช้งานง่ายรวดเร็ว: 9 ขั้นตอน
PCF8591 (i2c Analog I/O Expander) ใช้งานง่ายรวดเร็ว: ไลบรารี่เพื่อใช้ i2c pcf8591 IC กับ arduino และ esp8266 IC นี้สามารถควบคุม (จนถึง 4) อินพุตแบบอะนาล็อกและ/หรือเอาต์พุตแบบอะนาล็อก 1 รายการ เช่น วัดแรงดัน อ่านค่าเทอร์มิสเตอร์หรือหรี่ไฟ LED สามารถอ่านค่าแอนะล็อกและเขียนค่าแอนะล็อกด้วยสายไฟเพียง 2 เส้นเท่านั้น (สมบูรณ์แบบ
ตัวอักษร LCD I2c Adapter (ตัวอย่างการเชื่อมต่อ I2c): 12 ขั้นตอน (พร้อมรูปภาพ)
อะแดปเตอร์ LCD I2c ของตัวละคร (ตัวอย่างการเชื่อมต่อ I2c): ฉันกำลังสร้างสคีมาการเชื่อมต่อสำหรับอะแดปเตอร์แสดงอักขระ i2c ตรวจสอบการอัปเดตในไซต์ของฉัน ตอนนี้ฉันเพิ่ม olso สคีมาการเชื่อมต่อสายไฟเพื่อใช้ไลบรารีดั้งเดิมไม่ใช่ส้อมของฉัน ไลบรารี LiquidCrystal Arduino สำหรับจอ LCD แบบตัวอักษร โปรเจ็กต์แบบแยก