Computer >> คอมพิวเตอร์ >  >> ระบบ >> MAC

วิธีใช้ Node, Raspberry Pi และหน้าจอ LCD เพื่อตรวจสอบสภาพอากาศ

ในช่วงไม่กี่ปีที่ผ่านมา อุปกรณ์สมาร์ทโฮมได้เพิ่มจากน้อยกว่า 300,000 เครื่องในปี 2015 เป็นเกือบ 1.2 พันล้านเครื่องในปี 2020 และคาดว่าจะเพิ่มขึ้นเป็น 1.5 พันล้านเครื่องภายในปี 2021

ดังนั้นจึงเป็นไปได้ว่าบ้านของคุณน่าจะมีอุปกรณ์อัจฉริยะอยู่บ้าง โดยโดยเฉลี่ยจะสูงถึง 8.7 อุปกรณ์ต่อบ้านภายในปี 2564

ในฐานะนักพัฒนา เรามีข้อได้เปรียบบางประการในโดเมนนี้ เนื่องจากเราสามารถสร้างอุปกรณ์สมาร์ทโฮมของเราเองได้

ไม่ใช่แค่อุปกรณ์ที่มีการพัฒนาอย่างรวดเร็วเท่านั้น บอร์ดพัฒนาที่ใช้สำหรับพวกเขาได้เริ่มมีมากขึ้นในเชิงพาณิชย์และเข้าถึงได้

ในบทความนี้ เราจะมาดูกันว่าเราจะใช้ Raspberry Pi, หน้าจอ LCD และโค้ดสองสามบรรทัดเพื่อตรวจสอบสภาพอากาศภายนอกหรือสถานที่เฉพาะได้อย่างไร

วิธีใช้ Node, Raspberry Pi และหน้าจอ LCD เพื่อตรวจสอบสภาพอากาศ

เนื่องจากเป็นโครงการ Do It Yourself (DIY) เราจึงมีข้อกำหนดเบื้องต้นบางประการสำหรับอุปกรณ์นี้

ข้อกำหนดเบื้องต้น

  • Raspberry Pi 3 (หรือสูงกว่า)
  • จอ LCD
  • สายเชื่อมต่อ
  • โพเทนชิออมิเตอร์ (อุปกรณ์เสริม)
  • เขียงหั่นขนม (ไม่จำเป็น)

วิธีการสร้าง

ทันทีที่เรามีทุกสิ่งที่เราต้องการ เราก็สามารถเริ่มต้นได้ ค่อยเป็นค่อยไป

ขั้นตอนที่ 1 - การกำหนดค่าพื้นฐาน

ขั้นตอนแรกประกอบด้วยการตั้งค่าพื้นฐานและการตรวจสอบส่วนประกอบทั้งหมด

สำหรับการสาธิตนี้ เราจะใช้ ClimaCell Weather API เป็นผู้ให้บริการข้อมูลสภาพอากาศ เนื่องจากมีตัวบ่งชี้จำนวนมาก รวมถึงตัวบ่งชี้คุณภาพอากาศให้เราใช้

ในการใช้ API เราต้องเปิดบัญชีบนแพลตฟอร์มและรับคีย์ API ซึ่งเราจะใช้ลงนามในคำขอของเรา

วิธีใช้ Node, Raspberry Pi และหน้าจอ LCD เพื่อตรวจสอบสภาพอากาศ
ขีดจำกัด ClimaCell API

บัญชีนี้เปิดได้ฟรีและจำกัดการเรียก API ไว้ที่ 100 ชั่วโมง ซึ่งเพียงพอสำหรับโครงการของเรา

ทันทีที่เรามีคีย์ API นี้ เราสามารถย้ายไปยังการกำหนดค่าฮาร์ดแวร์และเชื่อมต่อหน้าจอ LCD กับ Raspberry Pi ของเรา คุณควรปิด Raspberry Pi ในขณะที่คุณทำการต่อสาย

เลย์เอาต์พินสำหรับ Raspberry Pi 3 สามารถเห็นได้ในภาพถัดไป

วิธีใช้ Node, Raspberry Pi และหน้าจอ LCD เพื่อตรวจสอบสภาพอากาศ
Raspberry Pi 3 พิน

การเชื่อมต่อสายไฟระหว่าง LCD และบอร์ดพัฒนามีดังต่อไปนี้:

วิธีใช้ Node, Raspberry Pi และหน้าจอ LCD เพื่อตรวจสอบสภาพอากาศ
การเชื่อมต่อระหว่าง Raspberry PI และ LCD

การเชื่อมต่อฮาร์ดแวร์นี้จะทำให้หน้าจอ LCD มีความสว่างเต็มที่และความคมชัดเต็มที่ ระดับความสว่างไม่ใช่ปัญหา แต่คอนทราสต์เป็นเพราะเราจะไม่สามารถเห็นตัวอักษรบนหน้าจอได้

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

วิธีใช้ Node, Raspberry Pi และหน้าจอ LCD เพื่อตรวจสอบสภาพอากาศ
แผนผัง

ณ จุดนี้ เราสามารถเปิด Raspberry Pi ของเรา และเราควรจะเห็นหน้าจอ LCD ที่ยังมีชีวิตอยู่ ด้วยความช่วยเหลือของความต้านทานตัวแปร เราควรจะสามารถควบคุมความคมชัดได้

ขั้นตอนที่ II - การกำหนดค่าโครงการ

ในภาษาการเขียนโปรแกรม เราจะใช้ NodeJS เพื่อเขียนโค้ด หากคุณยังไม่ได้ติดตั้ง NodeJS บน Raspberry ของคุณ คุณสามารถทำตามคำแนะนำง่ายๆ เหล่านี้ได้

ในโฟลเดอร์ใหม่ ให้รันคำสั่ง npm init -y เพื่อตั้งค่าแพ็คเกจ npm ใหม่ ตามด้วยคำสั่ง npm install lcd node-fetch เพื่อติดตั้งการพึ่งพาที่จำเป็น 2 นี้

  • lcd จะใช้ในการสื่อสารกับหน้าจอ LCD
  • node-fetch จะใช้เพื่อส่งคำขอ HTTP ไปยัง ClimaCell API

เราบอกว่าเราต้องการคีย์ API เพื่อสื่อสารกับผู้ให้บริการข้อมูลสภาพอากาศ คุณวางคีย์ API ลับของคุณโดยตรงในรหัสหลัก หรือคุณสามารถสร้าง config.json ไฟล์ที่คุณสามารถวางคีย์นี้และการกำหนดค่าอื่น ๆ ที่เกี่ยวข้องกับรหัสที่คุณอาจมี

config.json

{  "cc_key": "<your_ClimaCell_API_key>"}

สุดท้ายนี้ มาสร้างไฟล์หลักของโปรเจ็กต์ของเราและรวมทุกสิ่งที่เราพูดถึง

// * Dependencies
const Lcd = require("lcd");
const fs = require("fs");
const fetch = require("node-fetch");

// * Globals
const { cc_key } = JSON.parse(fs.readFileSync("./config.json"));

ขั้นตอนที่ III - จอ LCD

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

รหัสทั้งหมดสำหรับหน้าจอ LCD ของเรามีดังต่อไปนี้:

วิธีใช้ Node, Raspberry Pi และหน้าจอ LCD เพื่อตรวจสอบสภาพอากาศ
RAW

ขั้นตอนแรกคือการสร้าง lcd . ใหม่ วัตถุและเพื่อส่งผ่านเป็นอาร์กิวเมนต์พินที่เราใช้

กุญแจ cols และ rows แสดงถึงจำนวนคอลัมน์และแถวของจอ LCD ของเรา 16x2 คืออันที่ฉันใช้ในตัวอย่างนี้ หาก LCD ของคุณมีเพียง 8 คอลัมน์และ 1 แถว ให้แทนที่ 16 และ 2 ด้วยค่าของคุณ

ในการเขียนบางอย่างบนจอแสดงผล เราจำเป็นต้องใช้สองวิธีนี้ตามลำดับ:

  • lcd.setCursor() - เลือกตำแหน่งที่จะเริ่มเขียน
  • lcd.print()

ในเวลาเดียวกัน เราได้รวมฟังก์ชันทั้งสองนี้ไว้ในสัญญาว่าจะใช้ async/away คีย์เวิร์ด

ณ จุดนี้ คุณสามารถใช้ฟังก์ชันนี้และพิมพ์บางอย่างบนจอแสดงผลของคุณได้ writeToLcd(0,0,'Hello World') ควรพิมพ์ข้อความ Hello World ในแถวแรกโดยเริ่มจากคอลัมน์แรก

ขั้นตอนที่ IV - ข้อมูลสภาพอากาศ

ขั้นตอนต่อไปคือการรับข้อมูลสภาพอากาศและพิมพ์บนจอแสดงผล

ClimaCell ให้ข้อมูลสภาพอากาศจำนวนมาก แต่ยังรวมถึงคุณภาพอากาศและละอองเกสร ไฟ และข้อมูลอื่นๆ ข้อมูลมีมากมาย แต่โปรดทราบว่าหน้าจอ LCD ของคุณมีเพียง 16 คอลัมน์และ 2 แถว นั่นคืออักขระเพียง 32 ตัว

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

วิธีใช้ Node, Raspberry Pi และหน้าจอ LCD เพื่อตรวจสอบสภาพอากาศ

สำหรับการสาธิตนี้ เราจะทำให้มันเรียบง่าย และเราจะพิมพ์ข้อมูลต่อไปนี้บนหน้าจอ LCD:

  • วันที่ปัจจุบัน (ชั่วโมง นาที วินาที)
  • อุณหภูมิ
  • ความเข้มของฝน
วิธีใช้ Node, Raspberry Pi และหน้าจอ LCD เพื่อตรวจสอบสภาพอากาศ
RAW

ในการรับข้อมูลจาก ClimaCell สำหรับตำแหน่งเฉพาะ คุณจะต้องส่งพิกัดทางภูมิศาสตร์ ละติจูด และลองจิจูดของสถานที่นั้น

หากต้องการค้นหาพิกัดของเมือง คุณสามารถใช้เครื่องมือฟรี เช่น latlong.net แล้วบันทึกไว้ใน config.json ไฟล์พร้อมกับคีย์ API ของคุณ หรือคุณสามารถเขียนโดยตรงในโค้ด

ณ จุดนี้ รูปแบบข้อมูลที่ส่งคืนจากการเรียก API มีดังต่อไปนี้:

{
  lat: 45.658,
  lon: 25.6012,
  temp: { value: 17.56, units: 'C' },
  precipitation: { value: 0.3478, units: 'mm/hr' },
  observation_time: { value: '2020-06-22T16:30:22.941Z' }
}

เราสามารถแยกโครงสร้างวัตถุนี้และรับค่าอุณหภูมิและปริมาณน้ำฝนแล้วพิมพ์ในแถวที่หนึ่งและสอง

ขั้นตอนที่ V - สรุป

สิ่งที่เราต้องทำตอนนี้คือเขียนตรรกะสำหรับสคริปต์ของเรา และอัปเดตหน้าจอ LCD เมื่อมีข้อมูลใหม่เข้ามา

วิธีใช้ Node, Raspberry Pi และหน้าจอ LCD เพื่อตรวจสอบสภาพอากาศ
RAW

ข้อมูลสภาพอากาศจะอัปเดตทุก ๆ 5 นาที แต่เนื่องจากเรามีการจำกัดการโทร API 100 ครั้ง/ชั่วโมงที่กำหนดโดย ClimaCell เราจึงสามารถดำเนินการเพิ่มเติมและอัปเดตข้อมูลสภาพอากาศในแต่ละนาทีได้

สำหรับวันที่ปัจจุบัน เรามีสองตัวเลือก:

  • สามารถใช้คุณสมบัติ observation_time และแสดงวันที่ที่ได้รับข้อมูล หรือ
  • เราสามารถสร้างนาฬิกาจริงและแสดงเวลาปัจจุบันได้

ฉันเลือกตัวเลือกที่ 2 แล้วแต่คุณเลือกได้ตามใจชอบ

ในการพิมพ์เวลาที่มุมขวาบน ก่อนอื่นเราต้องคำนวณคอลัมน์เริ่มต้นเพื่อให้ข้อความพอดี สำหรับสิ่งนี้ เราสามารถใช้สูตรต่อไป total columns number ลบ text to display length

วันที่มี 8 ตัวอักษร และเนื่องจากเขามี 16 คอลัมน์ เราจึงต้องเริ่มจากคอลัมน์ที่ 8

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

แนวทางปฏิบัติที่ดีที่สุดอีกประการหนึ่งในระบบฝังตัวคือการปิดและทำให้ทรัพยากรที่คุณใช้ว่าง นั่นเป็นเหตุผลที่เราใช้ SIGNINT เหตุการณ์ที่จะปิดหน้าจอ LCD เมื่อโปรแกรมหยุดทำงาน เหตุการณ์อื่นเช่นนี้ ได้แก่ :

  • SIGUSR1 และ SIGUSR2 - เพื่อจับ "kill pid" เช่น nodemon restart
  • uncaughtException - เพื่อจับข้อยกเว้นที่ตรวจไม่พบ

ขั้นตอนที่ VI - เรียกใช้ตลอดไป

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

ณ จุดนี้คุณอาจเชื่อมต่อกับ Raspberry Pi โดยใช้ SSH หรือโดยตรงด้วยสาย HDMI และจอภาพ ไม่ว่าอะไรจะเกิดขึ้น เมื่อคุณปิดเทอร์มินัล โปรแกรมจะหยุดทำงาน

ในเวลาเดียวกัน หากคุณปิดอุปกรณ์และหลังจากผ่านไประยะหนึ่งหรือเปิดเครื่องอีกครั้งทันที สคริปต์จะไม่เริ่มทำงานและคุณจะต้องดำเนินการด้วยตนเอง

เพื่อแก้ปัญหานี้ เราสามารถใช้ตัวจัดการกระบวนการ เช่น pm2

นี่คือขั้นตอน:

  1. sudo npm install pm2 -g - ติดตั้ง pm2
  2. sudo pm2 startup - สร้างสคริปต์เริ่มต้นสำหรับผู้จัดการ pm2
  3. pm2 start index.js - เริ่มแอปพลิเคชัน
  4. pm2 save - บันทึกรายการกระบวนการของคุณในการรีสตาร์ทเซิร์ฟเวอร์

ตอนนี้คุณสามารถรีบูตบอร์ดและสคริปต์จะเริ่มทำงานโดยอัตโนมัติเมื่ออุปกรณ์พร้อม

บทสรุป

จากจุดนี้ คุณสามารถปรับแต่งอุปกรณ์ใหม่ได้ตามต้องการ หากคุณพบว่าข้อมูลสภาพอากาศนี้สำคัญสำหรับคุณ (หรือข้อมูลอื่นๆ จาก ClimaCell เช่น มลพิษทางอากาศ ละอองเกสร ดัชนีอัคคีภัย หรือความเสี่ยงบนท้องถนน) คุณสามารถสร้างเคสแบบกำหนดเองเพื่อใส่ Raspberry Pi และจอ LCD ลงไปได้ หลังจากที่คุณเพิ่มแบตเตอรี่แล้ว คุณสามารถวางอุปกรณ์ไว้ในบ้านได้

Raspberry Pi เป็นเหมือนคอมพิวเตอร์ส่วนบุคคล คุณจึงทำอะไรกับมันได้มากกว่าที่คุณทำบนไมโครคอนโทรลเลอร์ทั่วไป เช่น Arduino ด้วยเหตุนี้ คุณจึงใช้ร่วมกับอุปกรณ์อื่นๆ ในบ้านได้ง่าย