ไลบรารี Arduino เพื่อตรวจสอบวันที่และอุณหภูมิของ DS3231 ในตัวผ่าน I2C

ไลบรารี Arduino เพื่อตรวจสอบวันที่และอุณหภูมิของ DS3231 ในตัวผ่าน I2C

ไลบรารี Arduino เพื่อตรวจสอบวันที่และอุณหภูมิของ DS3231 ในตัวผ่าน I2C

อัปเดต: เยี่ยมชมใหม่ด้วย ไลบรารี่เพื่อจัดการวันที่และเวลาด้วยโมดูล DS3231 RTC และ Arduino ด้วยการปรับปรุงเช่นเวลาตามฤดูกาล

การทำงานของ IC de นาฬิกาเรียลไทม์ (RTC) ยอดนิยมที่ถูกควบคุมโดยใช้ รถบัสฉัน2C มักจะคล้ายกันมาก นอกจากนี้ ห้องสมุดลวด de แพลตฟอร์มฮาร์ดแวร์ ช่วยลดความยุ่งยากในการสื่อสารกับอุปกรณ์อย่างมาก อินเทอร์เฟซแบบอนุกรมสองสาย (TWI), I2C, เฉพาะเจาะจง.

สารบัญ

    กล่าวโดยกว้างๆ กระบวนการประกอบด้วย

    1. เริ่มต้นการสื่อสารแบบสลาฟหรือมาสเตอร์ (ตั้งค่าตามค่าเริ่มต้น) ด้วยฟังก์ชัน Wire.begin(ที่อยู่). หากละเว้น "ที่อยู่" การสื่อสารจะเริ่มต้นด้วย ไมโครซี ครูของ รถบัสฉัน2C.

    2. เปิดใช้งานการสื่อสาร I2C กับอุปกรณ์ผ่านที่อยู่หน่วยความจำที่อุปกรณ์นั้นตั้งอยู่โดยใช้คำสั่ง Wire.beginTransmission (ที่อยู่).

    3. เขียนคำสั่งใน รถบัสฉัน2C เพื่อบอกอุปกรณ์ถึงการทำงานที่คุณต้องการให้ดำเนินการโดยใช้ Wire.write (คำสั่ง)โดยที่ "order" คือรหัสการดำเนินการ

    4. ปิดการใช้งานการสื่อสารเพื่อเผยแพร่ รถบัสฉัน2C ด้วยฟังก์ชั่น Wire.endTransmission ().

    5. ขอให้อุปกรณ์ส่งข้อมูลจำนวนหนึ่งให้สอดคล้องกับการดำเนินการที่ได้รับการร้องขอ (ในกรณีนี้คือวันที่และเวลา) ด้วยฟังก์ชัน Wire.requestFrom(ที่อยู่,จำนวนเงิน).

    6. รอให้ข้อมูลที่ร้องขอด้วยฟังก์ชันพร้อมสำหรับการอ่าน Wire.available ()ซึ่งส่งคืนจำนวนข้อมูลที่ได้รับแล้วและสามารถอ่านได้

    7. อ่านข้อมูลที่ส่งมาจากอุปกรณ์ (ไฟล์ นาฬิกาเรียลไทม์ในกรณีนี้) โดยใช้ฟังก์ชัน Wire.read() หลายครั้งตามจำนวนไบต์ที่ระบุ Wire.available () ที่มีอยู่

    8. โดยปกติข้อมูลจะถูกส่งในรูปแบบที่กะทัดรัดมากดังนั้นจึงมีความเป็นไปได้มากที่จะต้องตีความข้อมูลที่ได้รับในลักษณะที่สอดคล้องกับการแสดงข้อมูลที่จัดทำในโปรแกรมที่ใช้อุปกรณ์

    เกี่ยวกับ DS3231 (และรุ่นที่รองรับในซีรีย์เดียวกัน เช่น DS3232) และการตีความข้อมูลตามข้อกำหนดของการบูรณาการ เช่น ค่าของตัวเลขต่าง ๆ ที่แสดงถึงเวลาจะแสดงเป็น ทศนิยมรหัสไบนารี (BCD) ซึ่งจะสะดวกกว่าในการแสดงเป็นค่าทศนิยม (ก ไบต์) เพื่อใช้ใน แพลตฟอร์มฮาร์ดแวร์

    ในบรรทัดเดียวกัน อุณหภูมิจะแสดงเป็นไบต์ในหน่วย ส่วนเสริมของสอง สำหรับส่วนจำนวนเต็มและสองบิตสำหรับขั้นตอนที่มีความละเอียดหนึ่งในสี่ของดีกรีของส่วนทศนิยม ลักษณะเหล่านี้และลักษณะอื่น ๆ ของการแสดงข้อมูลบนนาฬิกามีการพูดคุยอย่างละเอียดถี่ถ้วนในรหัสห้องสมุดด้านล่าง DS3231

    หากต้องการตรวจสอบอุณหภูมิด้วยไลบรารีนี้ เพียงใช้วิธีการ อ่าน_อุณหภูมิ() วัตถุ DS3231 เกิดขึ้นตั้งแต่ต้น หากต้องการอ่านวันที่และเวลา ขั้นแรกให้โหลดแล้วร้องขอในรูปแบบใดรูปแบบหนึ่ง (กะทัดรัด มนุษย์...) ที่พร้อมใช้งานสำหรับการใช้งานที่แตกต่างกัน โดยบันทึกไว้ในเอกสารส่วนหัวของไลบรารีโค้ดด้านล่าง

    ต่อไปนี้เป็นโค้ดตัวอย่างเพื่อแสดงวิธีการใช้ไลบรารี ตามที่กล่าวไว้ข้างต้น อุณหภูมิจะอ่านได้ง่ายๆ ด้วยฟังก์ชัน อ่าน_อุณหภูมิ() ของวัตถุคลาส DS3231 แต่เพื่อละเว้นข้อผิดพลาดในการอ่าน จะใช้ค่าคงที่สองตัวเพื่อจัดเก็บอุณหภูมิสูงสุดและต่ำสุดของอุปกรณ์ตามลำดับตามแผ่นข้อมูล และค่าที่อ่านด้วยฟังก์ชันที่เกี่ยวข้องกัน

    การอ่านอุณหภูมิดำเนินการในสองขั้นตอน: ขั้นแรกโหลดค่า เพื่อให้การใช้วันที่หรือเวลาที่แตกต่างกันมีความสอดคล้องกัน (จะไม่แสดงค่าที่สูงกว่าในกรณีที่ไม่เอื้ออำนวย) และประการที่สองจะใช้ตามรูปแบบที่ มันจำเป็น. โปรแกรมตัวอย่าง (ซึ่งไม่ค่อยมีประโยชน์นัก แม้ว่าจะอธิบายความเป็นไปได้ทั้งหมดก็ตาม) จะแสดงรูปแบบที่มีอยู่ทั้งหมด

    • ฟังก์ชั่น date_time_value() ซึ่งส่งกลับตัวชี้ไปยังอาร์เรย์ ถัง (ไบต์) ที่มีค่าตัวเลขเจ็ดค่าที่แสดงวันที่และเวลาบนนาฬิกา DS3231 แปลงเป็นทศนิยม (อยู่ใน BCD บนอุปกรณ์)

    • การใช้ฟังก์ชั่น วันธรรมดา_หมายเลข() ได้รับค่าที่สอดคล้องกับจำนวนวันในสัปดาห์ที่เริ่มต้นในวันอาทิตย์ หากต้องการแสดงเป็นข้อความ จะใช้อาร์เรย์และลบออกหนึ่งรายการเพื่อเริ่มต้นที่ดัชนีศูนย์ในวันอาทิตย์

    • หากต้องการดูวันที่ในรูปแบบ "ท้องถิ่น" (สเปน) ให้ใช้ฟังก์ชัน human_date()ซึ่งส่งคืนตัวชี้ไปยังสตริงที่แสดงวันที่ในรูปแบบ DD/MM/YYYY โดยที่ DD คือวันที่แสดงด้วยตัวเลข 2 หลัก MM คือเดือนที่มี 2 หลัก และ YYYY คือปีที่มี 4 หลัก

    • ฟังก์ชั่น มนุษย์_ชั่วโมง() ส่งคืนเวลาในรูปแบบ hh:mm:ss โดย hh เป็นชั่วโมง (ในรูปแบบ 24) แทนด้วยตัวเลข 2 หลัก mm เป็นนาทีที่มี 2 หลัก และ ss เป็นวินาทีที่มี 2 หลัก

    • เพื่อให้ง่ายต่อการใช้งานวันที่และเวลา ไฟล์บันทึก ฟังก์ชั่นได้รับการตั้งโปรแกรมไว้แล้ว กระชับ_date_time()โดยส่งค่าวันที่และเวลาในรูปแบบ YYMMDDhhmmss โดย AA คือปีแสดงด้วยตัวเลข 2 หลักสุดท้าย MM เดือนมี 2 หลัก DD วันมี 2 หลัก hh ชั่วโมง (ในรูปแบบ 24) ด้วย 2 หลัก มิลลิเมตร นาทีที่มี 2 หลัก และ ss วินาทีที่มี 2 หลัก รูปแบบนี้แม้จะเป็นข้อความ แต่ก็ใช้พื้นที่น้อยและทำให้สามารถเรียงลำดับตัวอักษรได้ง่ายมาก

    • ฟังก์ชั่น date_time_MySQL() ทำหน้าที่นำเสนอวันที่และเวลาในรูปแบบที่ผู้จัดการฐานข้อมูลใช้ MySQL (หรือใหม่และอิสระกว่า MariaDB) YYYY-MM-DD hh:mm:ss โดยที่ YYYY คือปีที่แสดงด้วยตัวเลข 4 หลัก, MM คือเดือนที่มีตัวเลข 2 หลัก, DD คือวันที่มีตัวเลข 2 หลัก, hh คือชั่วโมง (ในรูปแบบ 24 หลัก) มี 2 หลัก , mm คือนาทีที่มี 2 หลัก และวินาทีที่มี 2 หลัก

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

    ผลลัพธ์ของโปรแกรมตัวอย่างข้างต้นอาจเป็นสิ่งที่แสดงในรูปต่อไปนี้ รายการค่า 7 ค่า (วินาที นาที ชั่วโมง วันในสัปดาห์ วันของเดือน เดือน และปี) วันที่ และ เวลาที่แสดงในลักษณะ "มนุษย์" (ตามสไตล์สเปน) เวลาเป็นตัวเลขทั้งหมดในรูปแบบนาฬิกาสี่หลัก วันที่และเวลาในรูปแบบฐานข้อมูล MySQL, วันที่และเวลาในรูปแบบกะทัดรัด (สำหรับ บันทึก) และอุณหภูมิภายในของ DS3231.

    นาฬิกาเรียลไทม์ (RTC) ของคอนโซลเอาต์พุตคอนโซล Arduino และอุณหภูมิ DS3231 ผ่านบัส I2C

    แสดงความคิดเห็น

    คุณอาจจะพลาด