สารบัญ:
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-23 15:12
การรับเวลาที่ถูกต้องเป็นสิ่งสำคัญหากคุณต้องการเก็บบันทึกข้อมูล มีหลายวิธีในการหาเวลาจากแหล่งข้อมูลบนอินเทอร์เน็ต
คุณอาจถามว่าทำไมไม่ใช้ ESP8266 เพื่อให้เวลากับคุณ? คุณสามารถทำได้ มันมี RTC ภายใน (นาฬิกาตามเวลาจริง) ของตัวเอง แต่ ESP8266 มีความถี่สัญญาณนาฬิกาการทำงานที่แตกต่างกัน 3 แบบ - 52MHz เมื่อบู๊ต, 80MHz ระหว่างการทำงานปกติ และ 160MHz หากได้รับการบูสต์ หากคุณต้องการการรักษาเวลาที่แม่นยำยิ่งขึ้น โดยเฉพาะอย่างยิ่งในช่วงเวลาที่นานขึ้น RTC ภายนอกอาจช่วยแก้ปัญหาได้ โมดูลเหล่านี้ยังมีแบตเตอรี่สำรองในกรณีที่ไฟฟ้าดับ RTC นั้นไม่แม่นยำอย่างยิ่งเนื่องจากจะนับเวลาที่ผ่านไปตั้งแต่มีการตั้งค่าไว้ และถึงแม้ว่ามันอาจจะทำสำหรับแอปพลิเคชันส่วนใหญ่ แต่ก็อาจไม่ดีพอสำหรับการรักษาเวลาที่สำคัญ เป็นไปได้ที่จะได้รับเวลาที่แม่นยำจากเซิร์ฟเวอร์เวลา SNTP ซึ่ง RTC สามารถอัปเดตได้ตามช่วงเวลาปกติ หากจำเป็น
โมดูล DS1307 Tiny RTC I2C (ด้านบน) เป็นตัวอย่างของรายการเหล่านี้ และสามารถซื้อได้บน Ebay และซัพพลายเออร์อื่นๆ ในราคาไม่ถึง 2 ปอนด์ นอกจากนี้ยังมีรุ่นอื่นๆ เช่น DS1302 และ DS3231 ซึ่งทำงานในลักษณะเดียวกันและมีราคาตั้งแต่ 99p ขึ้นไป
โมดูล DS1307 ใช้อินเทอร์เฟซ I2C และสำหรับ ESP-01 ควรเชื่อมต่อดังนี้:
Vcc - 3.3v, Gnd - Gnd, SDA - D3, SCL - D4
SDA และ SCL สามารถเชื่อมต่อกับพิน I/O ใดก็ได้บน ESP8266 ที่ใหญ่กว่า (แก้ไขโค้ดตามลำดับ) โมดูลนี้ต้องเชื่อมต่อหมุดด้านซ้ายมือเท่านั้น
ขั้นตอนที่ 1: Google Time
มีตัวอย่างมากมายในการหาเวลาจาก Google และมีลักษณะเช่นนี้ เมื่อคุณเรียกใช้โปรแกรม GoogleTime.lua คุณจะได้ผลลัพธ์ดังนี้:
dofile("GoogleTime.lua")> เวลา: ศ. 15 ธ.ค. 2017 11:19:45 GMT
ปัญหาของวิธีนี้คือ คุณได้รับเวลาในรูปแบบสตริง และคุณต้องแยกสตริงออกเป็นแต่ละบิตเป็นชั่วโมง นาที วินาที เป็นต้น RTC ยอมรับเวลาในรูปแบบพิเศษ เช่น การประทับเวลาของ UNIX ในแง่ฆราวาส นี่คือจำนวนวินาทีที่ผ่านไปตั้งแต่วันพฤหัสบดีที่ 1 มกราคม พ.ศ. 2513 ถึงวันและเวลาปัจจุบัน UNIX Epoch (1970/01/01 00:00:00) ถูกใช้โดยระบบปฏิบัติการคอมพิวเตอร์ส่วนใหญ่ และเวลาที่ใช้ไปจะถูกเก็บไว้เป็นตัวเลข 32 บิตที่มีลายเซ็น ซึ่งหมายความว่าระบบนี้จะใช้งานได้ถึงวันที่ 19 มกราคม 2581 เมื่อตัวเลขจะมากเกินกว่าจะจัดเก็บด้วยวิธีนี้ ทางออกหนึ่งคือเก็บตัวเลขเป็น 64 บิต แต่ตอนนี้วิธี 32 บิตก็เพียงพอแล้ว
ในการตั้งเวลาเป็น 2015 9 กรกฎาคม 18:29:49 บน RTC ภายใน คุณจะต้องใช้รหัสบรรทัดนี้:
rtctime.set(1436430589, 0)
พารามิเตอร์ 2 ตัวคือวินาทีและไมโครวินาที
คุณสามารถค้นหาข้อมูลเพิ่มเติมได้โดยอ่านเอกสารประกอบของ NodeMCU
ขั้นตอนที่ 2: เซิร์ฟเวอร์เวลา SNTP
Simple Network Time Protocol (SNTP) ให้บริการจากแหล่งต่างๆ บนอินเทอร์เน็ต และหลายประเทศทั่วโลกมีบริการนี้
โปรแกรม SNTPTime2.lua ตั้งเวลาบน RTC ภายใน คุณต้องมีโมดูล rtctime & sntp ในบิลด์ของคุณเมื่อคุณแฟลช ESP8266 โปรแกรมได้รับเวลาจากเซิร์ฟเวอร์เป็นวินาทีและไมโครวินาที และตั้งค่า RTC ภายในด้วย rtctime.set(sec, usec)
โปรแกรมจะแสดงวันที่และเวลาในรูปแบบต่างๆ
มีเซิร์ฟเวอร์ SNTP มากมายทั่วโลกและบางส่วนมีดังนี้:
- sntp.sync({"216.239.35.0"},
- sntp.sync({"0.uk.pool.ntp.org", "0.uk.pool.ntp.org"},
- sntp.sync({"3.uk.pool.ntp.org", "143.210.16.201"},
- sntp.sync({"0.uk.pool.ntp.org", "1.uk.pool.ntp.org", "3.uk.pool.ntp.org"},
โค้ดข้างต้นทั้งหมดสามารถแทนที่ลงในโปรแกรม SNTPTime2.lua
มีเซิร์ฟเวอร์ SNTP เพิ่มเติมตามที่อยู่ด้านล่างซึ่งสามารถนำมาใช้ในโปรแกรมได้อีกครั้ง
93.170.62.252, 130.88.202.49, 79.135.97.79, ntp.exnet.com
Google ยังให้บริการเซิร์ฟเวอร์เวลาตามที่อยู่เหล่านี้:
216.239.35.0, 216.239.35.4, 216.239.35.8, 216.239.35.12
คุณต้องจำไว้ว่าให้หาเวลาจากประเทศที่คุณอยู่หรือคุณอาจต้องแก้ไขสำหรับเขตเวลาต่างๆ ของโลก นอกจากนี้ บางประเทศยังมีเวลาออมแสง ดังนั้นคุณอาจต้องจัดการกับเรื่องนี้เช่นกัน
ขั้นตอนที่ 3: รับเวลาจากโมดูล RTC
โปรแกรม GetRTCTime.lua อ่านเวลาจาก RTC ภายใน
ส่วนแรกอ่านเวลาและแสดงเป็นวินาทีและไมโครวินาที
ส่วนที่สองแปลงเป็นรูปแบบที่มนุษย์อ่านง่ายขึ้น
เมื่อเรียก tm = rtctime.epoch2cal(rtctime.get()) มันจะส่งคืน:
- ปี - 1970 ~ 2038
- จันทร์ - เดือน 1 ~ 12 ในปีปัจจุบัน
- วัน - วันที่ 1 ~ 31 ในเดือนปัจจุบัน
- ชั่วโมง
- นาที
- วินาที
- วัน - วันที่ 1 ~ 366 ในปีปัจจุบัน
- wday - วันที่ 1 ~ 7 ในสัปดาห์ปัจจุบัน (วันอาทิตย์คือ 1)
แต่ละรายการสามารถเข้าถึงได้เป็น tm["day"], tm["year"]…
คุณสามารถค้นหาข้อมูลเพิ่มเติมได้โดยอ่านเอกสารประกอบ NodeMCU
DisplaySNTPtime.lua เป็นวิธีการแสดงวันที่และเวลาบนจอแสดงผล OLED แบบ LCD 128 x 64 ที่ซับซ้อนยิ่งขึ้น เนื่องจากเชื่อมต่อได้ง่ายและสามารถใช้กับโปรแกรมเหล่านี้ได้
ขั้นตอนที่ 4: หน่วยความจำผู้ใช้ RTC
การเบี่ยงเบนเล็กน้อยจากการรักษาเวลาคือ RTC ภายในของ ESP8266 มีที่อยู่หน่วยความจำ 128 x 32 บิตที่โปรแกรมเมอร์สามารถเข้าถึงได้ มีประโยชน์อย่างยิ่งเนื่องจากสามารถอยู่รอดได้ในวงจรการนอนหลับลึกของ ESP8266 โปรแกรมเมอร์จะควบคุมการใช้งานและดูแลไม่ให้ถูกเขียนทับโดยไม่ได้ตั้งใจขึ้นอยู่กับโปรแกรมเมอร์
ฉันได้รวม RTCmem.lua ซึ่งเป็นโปรแกรมง่าย ๆ ที่สาธิตการใช้งาน คุณต้องมีโมดูล rtcmem ในบิลด์ของคุณ
ขั้นตอนที่ 5: โมดูล RTC ภายนอก
โมดูล RTC ภายนอกเชื่อมต่อกับ ESP8266 ผ่านอินเทอร์เฟซ I2C ซึ่งใช้เพียงพิน I/O สองตัวเท่านั้น จึงทำงานร่วมกับ ESP-01 และอุปกรณ์ ESP8266 อื่นๆ ส่วนใหญ่ได้
ที่อยู่โมดูล RTC คือ 0x68 และเข้าถึงได้โดยใช้คำสั่ง I2C ปกติ อย่างไรก็ตาม มีบางสิ่งที่ต้องคำนึงถึงคือ ข้อมูลในการลงทะเบียน RTC ถูกจัดเก็บในรูปแบบ BCD (ฐาน 16) ดังนั้นโปรแกรมของคุณจึงต้องจัดการกับสิ่งนี้ เวลาและวันที่จะถูกเก็บไว้ใน 7 การลงทะเบียนภายใน RTC ใน RTC ภายใน การแปลง BCD จะได้รับการดูแลโดยโมดูล rtctime
SetExtRTC.lua แปลงข้อมูลเป็น BCD และตั้งเวลา
ReadExtRTC.lua อ่านข้อมูลเวลาและพิมพ์ออกมา หมายเหตุ: ข้อมูลถูกพิมพ์ออกมาเป็นเลขฐานสิบหก
ฉันไม่ได้ใช้เวลามากในการจัดรูปแบบการแสดงผล เนื่องจากคุณอาจมีความคิดของคุณเองเกี่ยวกับสิ่งที่คุณต้องการทำกับวันที่และเวลา นี่คือเอ็นจิ้นพื้นฐานในรูปแบบที่ง่ายที่สุด เพื่อให้คุณสามารถพัฒนาต่อไปได้หากต้องการ
ขั้นตอนที่ 6: การบันทึกข้อมูล
หากคุณดูโมดูล RTC อย่างใกล้ชิด คุณจะสังเกตเห็นว่าพวกเขามี AT24C32 EEPROM IC หรือคล้ายกันในตัว หรือคุณสามารถใช้บอร์ด 24C256 ได้ดังที่กล่าวไว้ข้างต้น ไอซี EEPROM เหล่านี้ส่วนใหญ่มีพินลึกหนาบางคล้ายด้านบน มาพร้อมกับพื้นที่เก็บข้อมูลจำนวนมาก แต่เข้าถึงได้ด้วยวิธีเดียวกัน เนื่องจาก AT24C32 บัดกรีบนบอร์ดแล้ว จึงสามารถใช้งานได้โดยตรงจาก I2C ของ RTC ภายนอก
หากคุณมีเพียง 24C256 IC หรือใกล้เคียง คุณสามารถตั้งค่าในบอร์ดขนมปัง เชื่อมต่อ A1, A2 และ A3 กับ Gnd, Vcc ถึง 3.3V และ SDA และ SCL กับ I2C ได้ WP สามารถปล่อยให้ลอยได้ ไอซี EEPROM บางตัวทำงานที่ 5V เท่านั้น ดังนั้นให้ตรวจสอบเอกสารข้อมูลที่เกี่ยวข้องก่อน
ByteWR.lua เขียนข้อมูล 1 ไบต์ไปยังตำแหน่งหน่วยความจำ 0x00 ของ EEPROM และอ่านกลับ
Desiderata.lua เขียนสองสามบรรทัดจากข้อความที่มีชื่อเสียงไปยัง EEPROM
eeRead.lua อ่านข้อมูลจาก EEPROM และพิมพ์ออกมา
หมายเหตุ: โปรแกรมเหล่านี้ควรทำงานร่วมกับบอร์ด EEPROM อื่นๆ ได้เช่นกัน
ขั้นตอนที่ 7: บทสรุป
ฉันได้พยายามแสดงให้เห็นว่า RTC และ EEPROM ทำงานอย่างไรสำหรับการบันทึกข้อมูล นี่เป็นเพียงจุดเริ่มต้นสำหรับคุณในการพัฒนาต่อไป คุณสามารถเชื่อมต่ออุปกรณ์ต่างๆ กับบัส I2C เช่น เซ็นเซอร์วัดแสง เซ็นเซอร์ความดันบรรยากาศ เซ็นเซอร์อุณหภูมิและความชื้น และบันทึกข้อมูลบน EEPROM
แนะนำ:
ESP8266 นาฬิกาเครือข่ายที่ไม่มี RTC - Nodemcu NTP นาฬิกาไม่มี RTC - โครงการนาฬิกาอินเทอร์เน็ต: 4 ขั้นตอน
ESP8266 นาฬิกาเครือข่ายที่ไม่มี RTC | Nodemcu NTP นาฬิกาไม่มี RTC | โครงการนาฬิกาอินเทอร์เน็ต: ในโครงการจะทำโครงการนาฬิกาโดยไม่มี RTC จะใช้เวลาจากอินเทอร์เน็ตโดยใช้ wifi และจะแสดงบนจอแสดงผล st7735
NODEMCU LUA ESP8266 เชื่อมต่อกับฐานข้อมูล MySQL: 6 ขั้นตอน
NODEMCU LUA ESP8266 เชื่อมต่อกับฐานข้อมูล MySQL: คำแนะนำนี้ไม่เหมาะสำหรับคนใจเสาะเพราะใช้ XAMPP (Apache, MySQL & PHP), HTML และแน่นอน LUA หากคุณมั่นใจว่าจะแก้ปัญหาเหล่านี้ได้ อ่านต่อไป! ฉันใช้ XAMPP เนื่องจากสามารถตั้งค่าบนไดรฟ์ปากกาหรือฮาร์ดไดรฟ์ของคุณ และกำหนดค่า
ไฟ LED กะพริบโดยใช้ ESP8266 NodeMCU Lua WiFi บทช่วยสอน: 6 ขั้นตอน
ไฟ LED กะพริบโดยใช้ ESP8266 NodeMCU Lua WiFi บทช่วยสอน: DESCRIPTIONNodeMCU เป็นแพลตฟอร์มโอเพ่นซอร์ส IoT ประกอบด้วยเฟิร์มแวร์ที่ทำงานบน ESP8266 WiFi SoC จาก Espressif และฮาร์ดแวร์ที่ใช้โมดูล ESP-12 คำว่า "NodeMcu" โดยค่าเริ่มต้นหมายถึงฟิล์มแวร์มากกว่าเ
วิธีควบคุม LED โดยใช้ ESP8266 NodemCU Lua WiFi จากเว็บไซต์: 7 ขั้นตอน
วิธีควบคุม LED โดยใช้ ESP8266 NodemCU Lua WiFi จากเว็บไซต์: บทช่วยสอนนี้จะสอนพื้นฐานบางประการเกี่ยวกับการใช้ ESP8266 NodemCU Lua WiFi เพื่อควบคุม LED จากเว็บ ก่อนที่คุณจะเริ่มต้น ตรวจสอบให้แน่ใจว่าคุณมีวัสดุทั้งหมดที่จำเป็น: ESP8266 NodeMCU Lua WiFi LED Breadboard Jumper (ถ้าจำเป็น)
NODEMCU LUA ESP8266 ขับ IC ไดรเวอร์จอแสดงผล LED M5450B7: 5 ขั้นตอน (พร้อมรูปภาพ)
NODEMCU LUA ESP8266 ขับ IC ไดรเวอร์จอแสดงผล LED M5450B7: M5450B7 เป็น IC ไดรเวอร์จอแสดงผล LED DIP 40 พิน ดูเหมือนเป็นสัตว์เดรัจฉาน แต่ควบคุมและตั้งโปรแกรมได้ค่อนข้างง่าย มีพินเอาต์พุต 34 พินที่สามารถต่อไฟ LED ได้ ถึงแต่ละคน อุปกรณ์จะดูดกระแสไฟแทนที่จะจ่ายไฟเพื่อให้ค