Computer >> Máy Tính >  >> Hệ thống >> MAC

Cách sử dụng Node, Raspberry Pi và màn hình LCD để theo dõi thời tiết

Trong vài năm qua, các thiết bị gia đình thông minh đã tăng từ dưới 300.000 vào năm 2015 lên gần 1,2 tỷ vào năm 2020. Và chúng dự kiến ​​sẽ tăng lên 1,5 tỷ vào năm 2021.

Vì vậy, có khả năng bạn có ít nhất một số thiết bị thông minh trong nhà, với điều kiện trung bình sẽ đạt 8,7 thiết bị thông minh mỗi nhà vào năm 2021.

Với tư cách là nhà phát triển, chúng tôi có một số lợi thế trong lĩnh vực này, vì chúng tôi có thể xây dựng các thiết bị gia đình thông minh của riêng mình.

Đó không chỉ là những thiết bị đã có sự phát triển nhanh chóng. Các bảng phát triển được sử dụng cho chúng đã bắt đầu ngày càng trở nên thương mại và dễ tiếp cận hơn.

Trong bài viết này, chúng ta sẽ xem cách chúng ta có thể sử dụng Raspberry Pi, màn hình LCD và một vài dòng mã để theo dõi thời tiết bên ngoài hoặc cho một vị trí cụ thể.

Cách sử dụng Node, Raspberry Pi và màn hình LCD để theo dõi thời tiết

Vì đây là dự án Do It Yourself (Tự làm) nên chúng tôi cần có một số điều kiện tiên quyết cho thiết bị này.

Điều kiện tiên quyết

  • Raspberry Pi 3 (hoặc cao hơn)
  • Màn hình LCD
  • Dây kết nối
  • Chiết áp (Tùy chọn)
  • Breadboard (Tùy chọn)

Cách xây dựng nó

Ngay sau khi chúng tôi có mọi thứ chúng tôi cần, chúng tôi có thể bắt đầu. Hãy thực hiện từng bước một.

Bước I - Cấu hình cơ sở

Bước đầu tiên bao gồm thiết lập cơ bản và xác minh tất cả các thành phần.

Đối với bản demo này, chúng tôi sẽ sử dụng ClimaCell Weather API như một nhà cung cấp dữ liệu thời tiết, vì chúng có một số lượng lớn các chỉ số, bao gồm cả chỉ số chất lượng không khí, để chúng tôi sử dụng.

Để sử dụng API của họ, chúng tôi phải mở tài khoản trên nền tảng của họ và nhận khóa API, khóa này chúng tôi sẽ sử dụng để ký các yêu cầu của mình.

Cách sử dụng Node, Raspberry Pi và màn hình LCD để theo dõi thời tiết
Giới hạn API ClimaCell

Tài khoản được mở miễn phí và đi kèm với giới hạn 100 giờ gọi API, quá đủ cho dự án của chúng tôi.

Ngay sau khi chúng tôi có khóa API này, chúng tôi có thể di chuyển đến cấu hình phần cứng và kết nối màn hình LCD với Raspberry Pi của chúng tôi. Bạn nên tắt Raspberry Pi trong khi thực hiện kết nối dây.

Bố cục pin cho Raspberry Pi 3 có thể được nhìn thấy trong hình ảnh tiếp theo.

Cách sử dụng Node, Raspberry Pi và màn hình LCD để theo dõi thời tiết
Raspberry Pi 3 Pins

Kết nối dây giữa màn hình LCD và bảng phát triển như sau:

Cách sử dụng Node, Raspberry Pi và màn hình LCD để theo dõi thời tiết
Kết nối giữa Raspberry PI và LCD

Kết nối phần cứng này sẽ làm cho màn hình LCD ở độ sáng đầy đủ và độ tương phản đầy đủ. Mức độ sáng không phải là vấn đề, nhưng độ tương phản là do chúng tôi sẽ không thể nhìn thấy các ký tự trên màn hình.

Đó là lý do tại sao chúng tôi cần giới thiệu ít nhất một chiết áp để đặt mức tương phản.

Cách sử dụng Node, Raspberry Pi và màn hình LCD để theo dõi thời tiết
Giản đồ

Tại thời điểm này, chúng ta có thể bật Raspberry Pi của mình và chúng ta sẽ thấy màn hình LCD sống động. Với sự trợ giúp của điện trở thay đổi, chúng ta có thể kiểm soát độ tương phản.

Bước II - Cấu hình dự án

Là một ngôn ngữ lập trình, chúng tôi sẽ sử dụng NodeJS để viết mã. Nếu bạn chưa cài đặt NodeJS trên Raspberry của mình thì bạn có thể làm theo các hướng dẫn đơn giản sau.

Trong một thư mục mới, hãy chạy lệnh npm init -y để thiết lập một gói npm mới, theo sau là lệnh npm install lcd node-fetch để cài đặt 2 phụ thuộc cần thiết này.

  • lcd sẽ được sử dụng để giao tiếp với màn hình LCD
  • node-fetch sẽ được sử dụng để thực hiện các yêu cầu HTTP tới API ClimaCell.

Chúng tôi đã nói rằng chúng tôi cần một khóa API để giao tiếp với nhà cung cấp dữ liệu thời tiết. Bạn đặt khóa API bí mật của mình trực tiếp vào mã chính hoặc bạn có thể tạo config.json trong đó bạn có thể đặt khóa này và bất kỳ cấu hình liên quan đến mã nào khác mà bạn có thể có.

config.json

{  "cc_key": "<your_ClimaCell_API_key>"}

Cuối cùng, hãy tạo tệp chính của dự án của chúng ta và bao gồm tất cả những điều chúng ta đã nói về những điều này.

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

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

Bước III - Màn hình LCD

Viết trên màn hình là một miếng bánh bằng cách sử dụng mô-đun màn hình LCD. Thư viện này hoạt động như một lớp trừu tượng về cách chúng ta giao tiếp với thiết bị. Bằng cách này, chúng tôi không cần phải quản lý vi mô từng lệnh riêng lẻ.

Toàn bộ mã cho màn hình LCD của chúng tôi như sau:

Cách sử dụng Node, Raspberry Pi và màn hình LCD để theo dõi thời tiết
RAW

Bước đầu tiên là tạo một lcd mới và để chuyển làm đối số, các ghim mà chúng tôi đã sử dụng.

Các phím colsrows đại diện cho số cột và hàng trên màn hình LCD của chúng tôi. 16x2 là cái tôi đã sử dụng trong ví dụ này. Nếu màn hình LCD của bạn chỉ có 8 cột và 1 hàng, hãy thay thế 16 và 2 bằng các giá trị của bạn.

Để viết một cái gì đó trên màn hình, chúng ta cần sử dụng hai phương pháp này liên tiếp:

  • lcd.setCursor () - chọn vị trí để bắt đầu viết
  • lcd.print ()

Đồng thời, chúng tôi đưa hai hàm này vào một lời hứa sử dụng async/away từ khóa.

Tại thời điểm này, bạn có thể sử dụng chức năng này và in thứ gì đó trên màn hình của mình. writeToLcd(0,0,'Hello World') nên in tin nhắn Hello World trên hàng đầu tiên bắt đầu từ cột đầu tiên.

Bước IV - Dữ liệu thời tiết

Bước tiếp theo là lấy dữ liệu thời tiết và in nó trên màn hình.

ClimaCell cung cấp rất nhiều thông tin dữ liệu thời tiết, nhưng cũng có chất lượng không khí và phấn hoa, lửa và các thông tin khác. Dữ liệu rất lớn, nhưng hãy nhớ rằng màn hình LCD của bạn chỉ có 16 cột và 2 hàng - đó chỉ là 32 ký tự.

Nếu bạn muốn hiển thị nhiều loại dữ liệu hơn và giới hạn này quá nhỏ đối với bạn, thì bạn có thể sử dụng hiệu ứng cuộn.

Cách sử dụng Node, Raspberry Pi và màn hình LCD để theo dõi thời tiết

Đối với bản trình diễn này, chúng tôi sẽ giữ cho nó đơn giản và chúng tôi sẽ in trên màn hình LCD các dữ liệu sau:

  • ngày hiện tại (giờ, phút, giây)
  • nhiệt độ
  • cường độ mưa
Cách sử dụng Node, Raspberry Pi và màn hình LCD để theo dõi thời tiết
RAW

Để nhận dữ liệu từ ClimaCell cho một vị trí cụ thể, bạn cần gửi tọa độ địa lý, vĩ độ và kinh độ của nó.

Để tìm tọa độ thành phố của bạn, bạn có thể sử dụng một công cụ miễn phí như latlong.net và sau đó bạn có thể lưu chúng trong config.json tệp cùng với khóa API của bạn hoặc bạn có thể viết chúng trực tiếp trong mã.

Tại thời điểm này, định dạng dữ liệu được trả về bởi lệnh gọi API như sau:

{
  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' }
}

Chúng tôi có thể giải cấu trúc đối tượng này và lấy các giá trị nhiệt độ và lượng mưa và in chúng trên hàng đầu tiên và hàng thứ hai.

Bước V - Kết thúc

Tất cả những gì chúng ta cần làm bây giờ là viết logic cho tập lệnh của mình và cập nhật màn hình LCD khi có dữ liệu mới.

Cách sử dụng Node, Raspberry Pi và màn hình LCD để theo dõi thời tiết
RAW

Dữ liệu thời tiết được cập nhật 5 phút một lần. Nhưng vì chúng tôi có giới hạn 100 cuộc gọi API / giờ do ClimaCell áp đặt, chúng tôi có thể tiến xa hơn nữa và cập nhật dữ liệu thời tiết mỗi phút.

Đối với ngày hiện tại, chúng tôi có hai tùy chọn:

  • chúng ta có thể sử dụng thuộc tính observation_time và hiển thị ngày nhận dữ liệu hoặc
  • chúng tôi có thể tạo đồng hồ thực và hiển thị thời gian hiện tại.

Tôi đã chọn tùy chọn thứ hai, nhưng cứ thoải mái làm theo ý bạn.

Để in thời gian ở góc trên bên phải, đầu tiên chúng ta phải tính toán cột bắt đầu sao cho vừa khít với dòng chữ. Đối với điều này, chúng ta có thể sử dụng công thức tiếp theo total columns number trừ đi text to display length

Ngày có 8 ký tự và vì anh ta có 16 cột, chúng ta phải bắt đầu từ cột số 8.

Cài đặt LCD là không đồng bộ, vì vậy chúng tôi phải sử dụng phương pháp lcd.on() do thư viện liên quan cung cấp, vì vậy chúng tôi biết khi nào màn hình LCD đã được khởi tạo và sẵn sàng sử dụng.

Một phương pháp hay nhất khác trong các hệ thống nhúng là đóng và giải phóng các tài nguyên mà bạn sử dụng. Đó là lý do tại sao chúng tôi sử dụng SIGNINT sự kiện đóng màn hình LCD khi chương trình bị dừng. Các sự kiện khác như sự kiện này bao gồm:

  • SIGUSR1SIGUSR2 - để bắt "kill pid" như khởi động lại gật đầu
  • uncaughtException - để nắm bắt các trường hợp ngoại lệ không cần thiết

Bước VI - Chạy mãi mãi

Tập lệnh đã hoàn tất và tại thời điểm này chúng ta có thể chạy chương trình của mình. Chúng tôi chỉ còn một việc nữa phải làm trước khi có thể hoàn thành.

Tại thời điểm này, có thể bạn đã kết nối với Raspberry Pi của mình bằng SSH hoặc trực tiếp bằng cáp HDMI và màn hình. Không có vấn đề gì, khi bạn đóng thiết bị đầu cuối của mình, chương trình sẽ dừng lại.

Đồng thời, nếu bạn tắt nguồn thiết bị của mình và sau một thời gian hoặc bật lại ngay lập tức, tập lệnh sẽ không bắt đầu và bạn sẽ phải thực hiện theo cách thủ công.

Để giải quyết vấn đề này, chúng ta có thể sử dụng trình quản lý quy trình như pm2.

Đây là các bước:

  1. sudo npm install pm2 -g - cài đặt pm2
  2. sudo pm2 startup - tạo một tập lệnh khởi động cho trình quản lý pm2
  3. pm2 start index.js - bắt đầu một ứng dụng
  4. pm2 save - lưu danh sách quy trình của bạn khi khởi động lại máy chủ

Giờ đây, bạn có thể khởi động lại bảng của mình và tập lệnh sẽ tự động bắt đầu khi thiết bị sẵn sàng.

Kết luận

Từ thời điểm này, bạn có thể tùy chỉnh thiết bị mới của mình theo cách bạn muốn. Nếu bạn thấy dữ liệu thời tiết này quan trọng đối với mình (hoặc bất kỳ dữ liệu nào khác từ ClimaCell, như ô nhiễm không khí, phấn hoa, chỉ số cháy hoặc rủi ro trên đường), bạn có thể tạo một trường hợp tùy chỉnh để đặt Raspberry Pi và màn hình LCD vào đó. Sau đó, sau khi thêm pin, bạn có thể đặt thiết bị trong nhà của mình.

Raspberry Pi giống như một máy tính cá nhân, vì vậy bạn có thể làm được nhiều việc hơn trên nó so với những gì bạn thường làm trên vi điều khiển như Arduino. Do đó, thật dễ dàng kết hợp nó với các thiết bị khác mà bạn có trong nhà.