สารบัญ:

อ่านมิเตอร์ไฟฟ้าและก๊าซ (เบลเยียม/ดัตช์) และอัปโหลดไปยัง Thingspeak: 5 ขั้นตอน
อ่านมิเตอร์ไฟฟ้าและก๊าซ (เบลเยียม/ดัตช์) และอัปโหลดไปยัง Thingspeak: 5 ขั้นตอน

วีดีโอ: อ่านมิเตอร์ไฟฟ้าและก๊าซ (เบลเยียม/ดัตช์) และอัปโหลดไปยัง Thingspeak: 5 ขั้นตอน

วีดีโอ: อ่านมิเตอร์ไฟฟ้าและก๊าซ (เบลเยียม/ดัตช์) และอัปโหลดไปยัง Thingspeak: 5 ขั้นตอน
วีดีโอ: Read data from the a digital meter through the P1 port using Linux 2024, กรกฎาคม
Anonim
อ่านมิเตอร์ไฟฟ้าและก๊าซ (เบลเยียม/ดัตช์) และอัปโหลดไปที่ Thingspeak
อ่านมิเตอร์ไฟฟ้าและก๊าซ (เบลเยียม/ดัตช์) และอัปโหลดไปที่ Thingspeak
อ่านมิเตอร์ไฟฟ้าและก๊าซ (เบลเยียม/ดัตช์) และอัปโหลดไปที่ Thingspeak
อ่านมิเตอร์ไฟฟ้าและก๊าซ (เบลเยียม/ดัตช์) และอัปโหลดไปที่ Thingspeak

หากคุณกังวลเกี่ยวกับการใช้พลังงานหรือแค่เรื่องเล็กน้อย คุณอาจต้องการดูข้อมูลจากมิเตอร์ดิจิตอลตัวใหม่บนสมาร์ทโฟนของคุณ

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

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

เราจะใช้พอร์ต P1 ของมิเตอร์ ซึ่งรับสาย RJ11/RJ12 หรือที่เรียกขานกันว่าสายโทรศัพท์ ตรวจสอบให้แน่ใจว่าผู้ติดตั้งมิเตอร์เปิดใช้งานพอร์ต P1 ตัวอย่างเช่น สำหรับ Fluvius ในเบลเยียม ให้ทำตามคำแนะนำเหล่านี้

ในการประมวลผลข้อมูลและอัปโหลดไปยังอินเทอร์เน็ต เราใช้ ESP8266 ซึ่งเป็นไมโครชิปราคาถูกที่มี wifi ในตัว มีค่าใช้จ่ายเพียงบางอย่างเช่น 2 ดอลลาร์ นอกจากนี้ยังสามารถตั้งโปรแกรมโดยใช้ Arduino IDE เราจัดเก็บข้อมูลในระบบคลาวด์บน Thingspeak ซึ่งให้บริการฟรีสูงสุดสี่ช่อง สำหรับโครงการนี้เราใช้ช่องทางเดียวเท่านั้น ข้อมูลสามารถแสดงบนสมาร์ทโฟนของคุณโดยใช้แอพเช่น IoT ThingSpeak

อะไหล่:

  • หนึ่ง ESP8266 เช่น nodemcu v2 โปรดทราบว่า nodemcu v3 กว้างเกินไปสำหรับเขียงหั่นขนมมาตรฐาน ดังนั้นฉันจึงชอบ v2
  • สายไมโคร USB เป็น USB
  • ที่ชาร์จ USB
  • ทรานซิสเตอร์ BC547b NPN หนึ่งตัว
  • ตัวต้านทาน 10k สองตัวและตัวต้านทาน 1k หนึ่งตัว
  • ขั้วต่อสกรู RJ12 หนึ่งตัว
  • เขียงหั่นขนม
  • สายจัมเปอร์.
  • ทางเลือก: ตัวเก็บประจุ 1nF หนึ่งตัว

โดยรวมแล้วมีค่าใช้จ่ายประมาณ 15 ยูโรสำหรับ AliExpress หรือใกล้เคียง การประมาณการคำนึงถึงส่วนประกอบบางอย่าง เช่น ตัวต้านทาน ทรานซิสเตอร์ และสายไฟ ในปริมาณที่มากกว่าที่คุณต้องการสำหรับโครงการนี้ ดังนั้นถ้าคุณมีชุดส่วนประกอบอยู่แล้ว จะถูกกว่า

ขั้นตอนที่ 1: ทำความรู้จักกับ ESP8266

ฉันเลือก NodeMCU v2 เนื่องจากไม่จำเป็นต้องบัดกรี และมีการเชื่อมต่อ micro USB ที่ช่วยให้เขียนโปรแกรมได้ง่าย ข้อได้เปรียบของ NodeMCU v2 เหนือ NodeMCU v3 คือมีขนาดเล็กพอที่จะวางบนเขียงหั่นขนมและปล่อยให้รูด้านข้างว่างเพื่อทำการเชื่อมต่อ ดังนั้นจึงเป็นการดีกว่าที่จะหลีกเลี่ยง NodeMCU v3 อย่างไรก็ตาม หากคุณต้องการบอร์ด ESP8266 ตัวอื่นก็ไม่เป็นไร

สามารถตั้งโปรแกรม ESP8266 ได้อย่างง่ายดายโดยใช้ Arduino IDE มีคำแนะนำอื่น ๆ ที่อธิบายรายละเอียดนี้ดังนั้นฉันจะสั้นมากที่นี่

  • ดาวน์โหลด Arduino IDE ก่อน
  • การสนับสนุนการติดตั้งครั้งที่สองสำหรับบอร์ด ESP8266 ในเมนู File - Preferences - Settings ให้เพิ่ม URL https://arduino.esp8266.com/stable/package_esp8266com_index.json ไปยัง Additional Board Manager URLs ถัดไปในเมนู เครื่องมือ - บอร์ด - ตัวจัดการบอร์ด ติดตั้ง esp8266 โดยชุมชน esp8266
  • ที่สาม เลือกบอร์ดที่ใกล้กับ ESP8266 ของคุณมากที่สุด ในกรณีของฉัน ฉันเลือก NodeMCU v1.0 (โมดูล ESP 12-E)
  • สุดท้าย เลือกภายใต้ Tools - Flash Size ซึ่งเป็นขนาดที่มี SPIFFS เช่น 4M (1M SPIFFS) ในโครงการนี้ เราใช้ SPIFFS (SPI Flash File System) เพื่อจัดเก็บค่าพลังงานรายวัน เพื่อไม่ให้สูญเสียพลังงานหาก ESP8266 สูญเสียพลังงานและแม้ว่าจะตั้งโปรแกรมใหม่ก็ตาม

ตอนนี้เรามีทุกอย่างพร้อมสำหรับตั้งโปรแกรม ESP8266 แล้ว! เราจะพูดถึงรหัสจริงในขั้นตอนต่อไป ขั้นแรกเราจะสร้างบัญชี Thingspeak

ขั้นตอนที่ 2: สร้างบัญชีและช่อง Thingspeak

ไปที่ https://thingspeak.com/ และสร้างบัญชี เมื่อคุณเข้าสู่ระบบแล้ว ให้คลิกปุ่ม New Channel เพื่อสร้างช่อง ในการตั้งค่าช่อง กรอกชื่อและคำอธิบายตามที่คุณต้องการ ต่อไปเราจะตั้งชื่อช่องช่องและเปิดใช้งานโดยคลิกที่ช่องทำเครื่องหมายทางด้านขวา หากคุณใช้รหัสของฉันไม่เปลี่ยนแปลง ฟิลด์จะเป็นดังนี้:

  • ฟิลด์ที่ 1: การบริโภคสูงสุดในวันนี้ (kWh)
  • ฟิลด์ 2: การบริโภคนอกจุดสูงสุดในวันนี้ (kWh)
  • สนามที่ 3: การฉีดพีควันนี้ (kWh)
  • สนามที่ 4: การฉีดนอกจุดพีควันนี้ (kWh)
  • ฟิลด์ 5: ปริมาณการใช้ปัจจุบัน (W)
  • สนาม 6: กระแสฉีด (W)
  • ฟิลด์ 7: ปริมาณการใช้ก๊าซวันนี้ (m3)

ในที่นี้ peak และ off-peak หมายถึงอัตราค่าไฟฟ้า ในด้าน 1 และ 2 การบริโภคหมายถึงปริมาณการใช้ไฟฟ้าสุทธิวันนี้: ปริมาณการใช้ไฟฟ้าวันนี้ในช่วงอัตราภาษีตั้งแต่เที่ยงคืนลบการฉีดไฟฟ้า (ผลิตโดยแผงโซลาร์เซลล์) วันนี้ในช่วงอัตราภาษีตั้งแต่เที่ยงคืนที่มีขั้นต่ำเป็นศูนย์ อย่างหลังหมายความว่าหากมีการฉีดมากกว่าการบริโภคในปัจจุบัน ค่าจะเป็นศูนย์ ในทำนองเดียวกัน การฉีดในสนาม 3 และ 4 หมายถึงการฉีดสุทธิของกระแสไฟฟ้า ฟิลด์ 5 และ 6 ระบุปริมาณการใช้สุทธิและการฉีด ณ เวลาปัจจุบัน สุดท้ายช่อง 7 คือ ปริมาณการใช้ก๊าซตั้งแต่เที่ยงคืน

สำหรับการอ้างอิงในอนาคต ให้เขียน Channel ID, คีย์ Read API และ Write API Key ซึ่งสามารถพบได้ในคีย์ API ของเมนู

ขั้นตอนที่ 3: สร้างวงจรอิเล็กทรอนิกส์

การสร้างวงจรไฟฟ้า
การสร้างวงจรไฟฟ้า
การสร้างวงจรไฟฟ้า
การสร้างวงจรไฟฟ้า

เราอ่านมิเตอร์ไฟฟ้าโดยใช้พอร์ต P1 ซึ่งใช้สายเคเบิล RJ11 หรือ RJ12 ความแตกต่างคือสายเคเบิล RJ12 มี 6 สายในขณะที่ RJ11 มีเพียง 4 สายในโปรเจ็กต์นี้ เราไม่ได้จ่ายไฟให้กับ ESP8266 จากพอร์ต P1 ดังนั้นเราจึงต้องการเพียง 4 สายเท่านั้น ดังนั้น RJ11 จึงทำได้

ฉันใช้การฝ่าวงล้อม RJ12 ที่แสดงในภาพ มันค่อนข้างกว้างและไม่มีที่ว่างรอบพอร์ต P1 ในมิเตอร์ของฉัน มันพอดี แต่มันแน่น หรือคุณสามารถใช้สายเคเบิล RJ11 หรือ RJ12 และถอดส่วนหัวที่ปลายด้านหนึ่งออก

หากคุณถือเส้นแบ่งตามภาพ หมุดจะมีหมายเลขจากขวาไปซ้ายและมีความหมายดังต่อไปนี้:

  • ขา 1: แหล่งจ่ายไฟ 5V
  • พิน 2: คำขอข้อมูล
  • พิน 3: กราวด์ข้อมูล
  • พิน 4: ไม่ได้เชื่อมต่อ
  • พิน 5: สายดาต้า
  • พิน 6: กราวด์ไฟฟ้า

สามารถใช้พิน 1 และพิน 6 เพื่อจ่ายไฟให้กับ ESP8266 ได้ แต่ฉันยังไม่ได้ทดสอบสิ่งนี้ คุณจะต้องเชื่อมต่อ Pin 1 กับ Vin ของ ESP8266 ดังนั้นตัวควบคุมแรงดันไฟฟ้าภายในของบอร์ดจึงถูกใช้เพื่อลดแรงดันไฟฟ้าจาก 5V เป็น 3.3V ที่ ESP8266 ยอมรับ อย่าเชื่อมต่อกับพิน 3.3V เพราะอาจทำให้ ESP8266 เสียหายได้ การเปิดเครื่องจากพอร์ต P1 จะทำให้แบตเตอรีของมิเตอร์ดิจิตอลหมดลงเมื่อเวลาผ่านไป

การตั้งค่าพิน 2 สูงส่งสัญญาณให้มิเตอร์ส่งข้อมูลเทเลแกรมทุกวินาที ข้อมูลจริงจะถูกส่งผ่านพิน 5 ด้วยอัตราบอด 115200 สำหรับมิเตอร์ดิจิตอลที่ทันสมัย (DSMR 4 และ 5) สัญญาณกลับด้าน (ต่ำคือ 1 และสูงเป็น 0) สำหรับรุ่นเก่า (DSMR 3 และต่ำกว่า) อัตราคือ 9600 บอด สำหรับมิเตอร์ดังกล่าว คุณต้องเปลี่ยนอัตราบอดในรหัสเฟิร์มแวร์ของขั้นตอนต่อไป: เปลี่ยนบรรทัด Serial.begin(115200); ในการตั้งค่า ()

บทบาทของทรานซิสเตอร์ NPN เป็นสองเท่า:

  • เพื่อย้อนกลับสัญญาณเพื่อให้ ESP8266 สามารถเข้าใจได้
  • หากต้องการเปลี่ยนระดับลอจิกจาก 5V ของพอร์ต P1 เป็น 3.3V ที่พอร์ต RX ของ ESP8266 คาดไว้

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

หยุดการเชื่อมต่อพิน RX จนกว่าคุณจะตั้งโปรแกรม ESP8266 ในขั้นตอนถัดไป อันที่จริง จำเป็นต้องใช้พิน RX เพื่อสื่อสารผ่าน USB ระหว่าง ESP8266 กับคอมพิวเตอร์ของคุณ

ขั้นตอนที่ 4: อัปโหลดรหัส

ฉันทำให้โค้ดนี้พร้อมใช้งานบน GitHub แล้ว มันเป็นเพียงไฟล์เดียว: P1-Meter-Reader.ino เพียงดาวน์โหลดและเปิดใน Arduino IDE หรือคุณสามารถเลือก ไฟล์ - ใหม่ และเพียงแค่คัดลอก/วางโค้ด

มีข้อมูลบางอย่างที่คุณต้องกรอกในตอนต้นของไฟล์: ชื่อและรหัสผ่านของ WLAN ที่จะใช้ และ Channel ID และคีย์ API เขียนของ ThingSpeak Channel

รหัสทำสิ่งต่อไปนี้:

  • อ่านโทรเลขข้อมูลจากมิเตอร์ทุก ๆ UPDATE_INTERVAL (เป็นมิลลิวินาที) ค่าเริ่มต้นคือทุกๆ 10 วินาที โดยปกติจะมีโทรเลขข้อมูลจากมิเตอร์ทุก ๆ วินาที แต่การตั้งค่าความถี่ให้สูงจะทำให้ ESP8266 ทำงานหนักเกินไป ดังนั้นจึงไม่สามารถเรียกใช้เว็บเซิร์ฟเวอร์ได้อีกต่อไป
  • อัปโหลดข้อมูลไฟฟ้าไปยังช่อง Thingspeak ทุก SEND_INTERVAL (เป็นมิลลิวินาที) ค่าเริ่มต้นคือทุกนาที ในการตัดสินใจเกี่ยวกับความถี่นี้ ให้คำนึงว่าการส่งข้อมูลจะใช้เวลาพอสมควร (โดยทั่วไปจะใช้เวลาไม่กี่วินาที) และมีการจำกัดความถี่ในการอัปเดตบน Thingspeak สำหรับบัญชีฟรี มีข้อความประมาณ 8200 ข้อความต่อวัน ดังนั้นความถี่สูงสุดจะอยู่ที่ประมาณ 10 วินาทีทุกๆ 10 วินาที หากคุณไม่ได้ใช้ Thingspeak เพื่ออย่างอื่น
  • อัปโหลดข้อมูลก๊าซเมื่อมีการเปลี่ยนแปลง โดยปกติ มิเตอร์จะอัปเดตข้อมูลการใช้ก๊าซทุกๆ 4 นาทีหรือประมาณนั้นเท่านั้น
  • มิเตอร์จะติดตามการบริโภครวมและค่าการฉีดตั้งแต่เริ่มต้น ดังนั้นเพื่อให้ได้ปริมาณการใช้และการฉีดในแต่ละวัน รหัสจะบันทึกมูลค่ารวมตอนเที่ยงคืนของทุกวัน จากนั้นค่าเหล่านี้จะถูกลบออกจากมูลค่ารวมปัจจุบัน ค่าในเวลาเที่ยงคืนจะถูกเก็บไว้ใน SPIFFS (SPI Flash File System) ซึ่งจะคงอยู่หาก ESP8266 สูญเสียพลังงานหรือแม้กระทั่งเมื่อมีการตั้งโปรแกรมใหม่
  • ESP8266 ใช้งานเว็บเซิร์ฟเวอร์ขนาดเล็ก หากคุณเปิดที่อยู่ IP ในเบราว์เซอร์ คุณจะเห็นภาพรวมของค่าไฟฟ้าและก๊าซทั้งหมดในปัจจุบัน ข้อมูลเหล่านี้มาจากโทรเลขล่าสุดและรวมข้อมูลที่ไม่ได้อัปโหลดไปยัง Thingspeak เช่น แรงดันไฟและกระแสต่อเฟส การตั้งค่าเริ่มต้นคือที่อยู่ IP ถูกกำหนดโดยเราเตอร์ของคุณแบบไดนามิก แต่จะสะดวกกว่าถ้าใช้ที่อยู่ IP แบบคงที่ซึ่งเหมือนกันเสมอ ในกรณีนี้ คุณต้องกรอก staticIP, gateway, dns และ subnet ในโค้ด และ uncomment บรรทัด WiFi.config(staticIP, dns, gateway, subnet); ในฟังก์ชัน connectWifi()

หลังจากที่คุณทำการเปลี่ยนแปลงเหล่านี้ คุณก็พร้อมที่จะอัปโหลดเฟิร์มแวร์ไปยัง ESP8266 เชื่อมต่อ ESP8266 ผ่านสาย USB เข้ากับคอมพิวเตอร์ของคุณ แล้วกดไอคอนที่มีลูกศรใน Arduino IDE หากคุณไม่สามารถเชื่อมต่อกับ ESP8266 ได้ ให้ลองเปลี่ยนพอร์ต COM ใต้เมนู Tools - Port หากยังไม่ทำงาน เป็นไปได้ว่าคุณต้องติดตั้งไดรเวอร์สำหรับพอร์ต USB COM เสมือนด้วยตนเอง

ขั้นตอนที่ 5: การทดสอบ

หลังจากอัปโหลดเฟิร์มแวร์ ให้ถอดปลั๊ก USB และเชื่อมต่อสาย RX ของ ESP8266 โปรดจำไว้ว่า เราต้องการช่อง RX ของ ESP8266 เพื่ออัปโหลดเฟิร์มแวร์ ดังนั้นเราจึงไม่ได้เชื่อมต่อมาก่อน ตอนนี้เสียบปลั๊ก RJ12 ในมิเตอร์ดิจิตอลแล้วเชื่อมต่อ ESP8266 กับคอมพิวเตอร์ของคุณอีกครั้ง

ใน Arduino IDE ให้เปิด Serial Monitor ผ่านเมนู Tools และตรวจสอบให้แน่ใจว่าได้ตั้งค่าเป็น 115200 baud หากคุณต้องเปลี่ยนอัตราบอด บางทีคุณอาจต้องปิดและเปิด Serial Monitor ใหม่อีกครั้งก่อนที่จะทำงาน

ตอนนี้คุณควรเห็นผลลัพธ์ของรหัสใน Serial Monitor คุณควรตรวจสอบว่ามีข้อความแสดงข้อผิดพลาดหรือไม่ นอกจากนี้ คุณควรจะสามารถเห็นโทรเลขได้ สำหรับฉันพวกเขามีลักษณะเช่นนี้:

/FLU5\xxxxxxxxx_x

0-0:96.1.4(50213) 0-0:96.1.1(3153414733313030313434363235) // Serial number meter hexadecimal 0-0:1.0.0(200831181442S) // Timestamp S: daylight saving (summer), W: no เวลาออมแสง (ฤดูหนาว) 1-0:1.8.1(000016.308*kWh) // ปริมาณการใช้สุทธิสูงสุดทั้งหมด 1-0:1.8.2 (000029.666*kWh) // ปริมาณการใช้สุทธิสูงสุดที่ต่ำกว่า 1-0:2.8.1 (000138.634*kWh) // Total peak net injection 1-0:2.8.2(000042.415*kWh) // Total off-peak net injection 0-0:96.14.0(0001) // Tariff 1: peak, 2: off-peak 1-0:1.7.0(00.000*kW) // ปริมาณการใช้ไฟฟ้า 1-0:2.7.0(00.553*kW) // กระแสฉีด 1-0:32.7.0(235.8*V) // เฟส 1 แรงดันไฟ 1-0:52.7.0(237.0*V) // เฟส 2 แรงดัน 1-0:72.7.0(237.8*V) // เฟส 3 แรงดัน 1-0:31.7.0(001*A) // เฟส 1 กระแส 1-0:51.7.0(000*A) // เฟส 2 กระแส 1-0:71.7.0(004*A) // เฟส 3 กระแส 0-0:96.3.10(1) 0-0:17.0.0(999.9*kW) // กำลังสูงสุด 1-0:31.4.0(999*A) // กระแสสูงสุด 0-0:96.13.0() // ข้อความ 0-1:24.1.0(003) // อุปกรณ์อื่นๆ บน M-bus 0-1:96.1.1(37464C4F32313230313037393338) // หมายเลขซีเรียล gas mete เลขฐานสิบหก r 0-1:24.4.0(1) 0-1:24.2.3(200831181002S)(00005.615*m3) // การประทับเวลาของแก๊สการบริโภคทั้งหมด !E461 // การตรวจสอบ CRC16

หากมีบางอย่างผิดปกติ คุณสามารถตรวจสอบได้ว่าคุณมีแท็กเดียวกันหรือไม่ และคุณอาจต้องเปลี่ยนโค้ดที่แยกวิเคราะห์โทรเลขในฟังก์ชัน readTelegram

หากทุกอย่างใช้งานได้ คุณสามารถจ่ายไฟให้กับ esp8266 จากที่ชาร์จ USB ได้แล้ว

ติดตั้งแอป IoT ThingSpeak Monitor บนสมาร์ทโฟนของคุณ กรอก Channel ID และอ่านคีย์ API และทำเสร็จแล้ว!

แนะนำ: