Mục lục:

Trạm thời tiết cá nhân sử dụng Raspberry Pi với BME280 trong Java: 6 bước
Trạm thời tiết cá nhân sử dụng Raspberry Pi với BME280 trong Java: 6 bước

Video: Trạm thời tiết cá nhân sử dụng Raspberry Pi với BME280 trong Java: 6 bước

Video: Trạm thời tiết cá nhân sử dụng Raspberry Pi với BME280 trong Java: 6 bước
Video: Raspberry Pi Pico W: Wireless Weather Station 2024, Tháng bảy
Anonim
Image
Image
Hóa đơn thiết bị cần thiết
Hóa đơn thiết bị cần thiết

Thời tiết xấu luôn trông tồi tệ hơn qua cửa sổ

Chúng tôi luôn quan tâm đến việc theo dõi thời tiết địa phương của chúng tôi và những gì chúng tôi nhìn thấy ngoài cửa sổ. Chúng tôi cũng muốn kiểm soát tốt hơn hệ thống sưởi và A / C của mình. Xây dựng Trạm Thời tiết Cá nhân là một trải nghiệm học tập tuyệt vời. Khi hoàn thành việc xây dựng dự án này, bạn sẽ hiểu rõ hơn về cách thức hoạt động của truyền thông không dây, cách các cảm biến hoạt động và nền tảng Raspberry Pi có thể mạnh mẽ như thế nào. Với dự án này làm cơ sở và kinh nghiệm thu được, bạn sẽ có thể dễ dàng xây dựng các dự án phức tạp hơn trong tương lai.

Bước 1: Hóa đơn thiết bị cần thiết

Hóa đơn thiết bị cần thiết
Hóa đơn thiết bị cần thiết
Hóa đơn thiết bị cần thiết
Hóa đơn thiết bị cần thiết
Hóa đơn thiết bị cần thiết
Hóa đơn thiết bị cần thiết

1. Một Raspberry Pi

Bước đầu tiên là đặt tay trên bảng Raspberry Pi. Raspberry Pi là một máy tính bảng đơn chạy hệ điều hành Linux. Mục tiêu của nó là nâng cao kỹ năng lập trình và hiểu biết về phần cứng. Nó nhanh chóng được những người có sở thích và đam mê điện tử áp dụng cho các dự án sáng tạo.

2. I²C Shield cho Raspberry Pi

INPI2 (bộ điều hợp I2C) cung cấp cho Raspberry Pi 2/3 cổng I²C để sử dụng với nhiều thiết bị I²C. Nó có sẵn trên Dcube Store

3. Cảm biến độ ẩm, áp suất và nhiệt độ kỹ thuật số, BME280

BME280 là cảm biến độ ẩm, áp suất và nhiệt độ có thời gian phản hồi nhanh và độ chính xác tổng thể cao. Chúng tôi đã mua cảm biến này từ Dcube Store

4. Cáp kết nối I²C

Chúng tôi đã có sẵn cáp kết nối I²C tại Dcube Store

5. Cáp micro USB

Cáp micro USB Bộ nguồn là lựa chọn lý tưởng để cấp nguồn cho Raspberry Pi.

6. Diễn giải Truy cập Internet qua Bộ điều hợp EthernetCable / WiFi

Một trong những điều đầu tiên bạn cần làm là kết nối Raspberry Pi với Internet. Chúng tôi có thể kết nối bằng cáp Ethernet. Một khả năng khác là bạn có thể kết nối với mạng không dây bằng Bộ điều hợp không dây USB.

7. Cáp HDMI (Cáp hiển thị & kết nối)

Mọi màn hình HDMI / DVI và mọi TV sẽ hoạt động như một màn hình cho Pi. Nhưng nó là tùy chọn. Cũng không thể loại trừ khả năng truy cập từ xa (như-SSH). Bạn cũng có thể truy cập bằng phần mềm PUTTY.

Bước 2: Kết nối phần cứng để thiết lập

Kết nối phần cứng để thiết lập
Kết nối phần cứng để thiết lập
Kết nối phần cứng để thiết lập
Kết nối phần cứng để thiết lập

Làm cho mạch theo sơ đồ được hiển thị.

Trong khi học, chúng tôi đã nắm được rất kỹ những kiến thức cơ bản về điện tử liên quan đến kiến thức phần cứng và phần mềm. Chúng tôi muốn vẽ một sơ đồ điện tử đơn giản cho dự án này. Sơ đồ điện tử giống như một bản thiết kế cho điện tử. Lên một bản thiết kế và làm theo thiết kế một cách cẩn thận. Chúng tôi đã áp dụng một số điều cơ bản về điện tử ở đây. Logic đưa bạn từ A đến B, Trí tưởng tượng sẽ đưa bạn đến mọi nơi!

Kết nối giữa Raspberry Pi và I²C Shield

Trước hết, hãy lấy Raspberry Pi và đặt Tấm chắn I²C (có Cổng I²C hướng vào trong) trên đó. Nhấn nhẹ Shield qua các chân GPIO của Pi và chúng ta đã hoàn thành bước này dễ dàng như chiếc bánh (xem hình).

Kết nối của Cảm biến và Raspberry Pi

Lấy cảm biến và kết nối cáp I²C với nó. Đảm bảo rằng Đầu ra I²C LUÔN LUÔN kết nối với Đầu vào I²C. Điều tương tự cũng phải tuân theo đối với Raspberry Pi với tấm chắn I²C được gắn trên các chân GPIO. tùy chọn cắm và chạy. Không có thêm chân và vấn đề dây điện và do đó, sự nhầm lẫn không còn nữa. Chỉ cần tưởng tượng bạn đang ở trong mạng lưới dây và tham gia vào điều đó. Một sự nhẹ nhõm từ điều đó. Điều này làm cho mọi thứ không phức tạp.

Lưu ý: Dây màu nâu phải luôn đi theo kết nối Nối đất (GND) giữa đầu ra của một thiết bị và đầu vào của thiết bị khác

Kết nối Internet là một nhu cầu

Bạn có một sự lựa chọn ở đây thực sự. Bạn có thể kết nối Raspberry Pi bằng cáp LAN hoặc Bộ điều hợp USB Nano không dây cho Kết nối WIFI. Dù bằng cách nào, bản kê khai là kết nối với Internet.

Cấp nguồn cho mạch

Cắm cáp Micro USB vào giắc cắm nguồn của Raspberry Pi. Đấm lên và thì đấy! Mọi thứ vẫn tốt và chúng ta sẽ bắt đầu ngay lập tức.

Kết nối với màn hình

Chúng tôi có thể kết nối cáp HDMI với màn hình hoặc TV. Chúng ta có thể truy cập Raspberry Pi mà không cần kết nối nó với màn hình bằng -SSH (Truy cập dòng lệnh của Pi từ một máy tính khác). Bạn cũng có thể sử dụng phần mềm PUTTY cho việc đó. Tùy chọn này dành cho người dùng nâng cao nên chúng tôi sẽ không trình bày chi tiết ở đây.

Tôi nghe nói sắp có suy thoái kinh tế, tôi đã quyết định không tham gia

Bước 3: Lập trình Raspberry Pi trong Java

Lập trình Raspberry Pi trong Java
Lập trình Raspberry Pi trong Java

Mã Java cho cảm biến Raspberry Pi và BME280. Nó có sẵn trong kho lưu trữGithub của chúng tôi.

Trước khi tiếp tục mã, hãy đảm bảo bạn đã đọc các hướng dẫn được cung cấp trong tệp Readme và thiết lập Raspberry Pi của bạn theo nó. Sẽ chỉ mất một chút thời gian để làm như vậy. Trạm thời tiết cá nhân là một bộ thiết bị đo thời tiết được điều hành bởi một cá nhân, câu lạc bộ, hiệp hội hoặc thậm chí doanh nghiệp tư nhân. Các trạm thời tiết cá nhân có thể được vận hành chỉ vì sự vui thích và giáo dục của chủ sở hữu, nhưng nhiều nhà điều hành trạm thời tiết cá nhân cũng chia sẻ dữ liệu của họ với những người khác, bằng cách biên dịch dữ liệu và phân phối theo cách thủ công, hoặc thông qua việc sử dụng internet hoặc đài nghiệp dư.

Mã ở dạng đơn giản nhất mà bạn có thể tưởng tượng và bạn sẽ không gặp vấn đề gì với nó nhưng hãy hỏi nếu bạn có. Dù bạn biết cả ngàn điều, hãy hỏi người biết.

Bạn cũng có thể sao chép mã java đang hoạt động cho cảm biến này từ đây.

// Được phân phối với giấy phép tự do.// Sử dụng nó theo bất kỳ cách nào bạn muốn, lợi nhuận hoặc miễn phí, miễn là nó phù hợp với giấy phép của các tác phẩm liên quan. // BME280 // Mã này được thiết kế để hoạt động với Mô-đun Mini BME280_I2CS I2C có sẵn trên ControlEverything.com. //

nhập com.pi4j.io.i2c. I2CBus;

nhập com.pi4j.io.i2c. I2CDevice; nhập com.pi4j.io.i2c. I2CFactory; nhập java.io. IOException;

lớp công cộng BME280

{public static void main (String args ) throws Exception {// Tạo I2C bus I2CBus bus = I2CFactory.getInstance (I2CBus. BUS_1); // Lấy thiết bị I2C, địa chỉ I2C BME280 là 0x76 (108) I2CDevice device = bus.getDevice (0x76); // Đọc 24 byte dữ liệu từ địa chỉ 0x88 (136) byte b1 = new byte [24]; device.read (0x88, b1, 0, 24); // Chuyển đổi dữ liệu // hệ số tạm thời int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256); int dig_T2 = (b1 [2] & 0xFF) + ((b1 [3] & 0xFF) * 256); if (dig_T2> 32767) {dig_T2 - = 65536; } int dig_T3 = (b1 [4] & 0xFF) + ((b1 [5] & 0xFF) * 256); if (dig_T3> 32767) {dig_T3 - = 65536; } // hệ số áp suất int dig_P1 = (b1 [6] & 0xFF) + ((b1 [7] & 0xFF) * 256); int dig_P2 = (b1 [8] & 0xFF) + ((b1 [9] & 0xFF) * 256); if (dig_P2> 32767) {dig_P2 - = 65536; } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256); if (dig_P3> 32767) {dig_P3 - = 65536; } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256); if (dig_P4> 32767) {dig_P4 - = 65536; } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256); if (dig_P5> 32767) {dig_P5 - = 65536; } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256); if (dig_P6> 32767) {dig_P6 - = 65536; } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256); if (dig_P7> 32767) {dig_P7 - = 65536; } int dig_P8 = (b1 [20] & 0xFF) + ((b1 [21] & 0xFF) * 256); if (dig_P8> 32767) {dig_P8 - = 65536; } int dig_P9 = (b1 [22] & 0xFF) + ((b1 [23] & 0xFF) * 256); if (dig_P9> 32767) {dig_P9 - = 65536; } // Đọc 1 byte dữ liệu từ địa chỉ 0xA1 (161) int dig_H1 = ((byte) device.read (0xA1) & 0xFF); // Đọc 7 byte dữ liệu từ địa chỉ 0xE1 (225) device.read (0xE1, b1, 0, 7); // Chuyển đổi dữ liệu // hệ số độ ẩm int dig_H2 = (b1 [0] & 0xFF) + (b1 [1] * 256); if (dig_H2> 32767) {dig_H2 - = 65536; } int dig_H3 = b1 [2] & 0xFF; int dig_H4 = ((b1 [3] & 0xFF) * 16) + (b1 [4] & 0xF); if (dig_H4> 32767) {dig_H4 - = 65536; } int dig_H5 = ((b1 [4] & 0xFF) / 16) + ((b1 [5] & 0xFF) * 16); if (dig_H5> 32767) {dig_H5 - = 65536; } int dig_H6 = b1 [6] & 0xFF; if (dig_H6> 127) {dig_H6 - = 256; } // Chọn thanh ghi độ ẩm điều khiển // Độ ẩm trên tỷ lệ lấy mẫu = 1 device.write (0xF2, (byte) 0x01); // Chọn thanh ghi đo kiểm soát // Chế độ bình thường, nhiệt độ và áp suất trên tốc độ lấy mẫu = 1 device.write (0xF4, (byte) 0x27); // Chọn thanh ghi cấu hình // Thời gian chờ = 1000 ms device.write (0xF5, (byte) 0xA0); // Đọc 8 byte dữ liệu từ địa chỉ 0xF7 (247) // áp suất msb1, áp suất msb, áp suất lsb, nhiệt độ msb1, nhiệt độ msb, nhiệt độ lsb, độ ẩm lsb, độ ẩm msb byte data = byte mới [8]; device.read (0xF7, data, 0, 8); // Chuyển đổi dữ liệu áp suất và nhiệt độ thành độ dài 19 bit adc_p = (((dài) (dữ liệu [0] & 0xFF) * 65536) + ((dài) (dữ liệu [1] & 0xFF) * 256) + (dài) (dữ liệu [2] & 0xF0)) / 16; long adc_t = (((long) (data [3] & 0xFF) * 65536) + ((long) (data [4] & 0xFF) * 256) + (long) (data [5] & 0xF0)) / 16; // Chuyển đổi dữ liệu độ ẩm long adc_h = ((long) (data [6] & 0xFF) * 256 + (long) (data [7] & 0xFF)); // Tính toán bù nhiệt độ double var1 = (((double) adc_t) / 16384.0 - ((double) dig_T1) / 1024.0) * ((double) dig_T2); double var2 = ((((double) adc_t) / 131072.0 - ((double) dig_T1) / 8192.0) * (((double) adc_t) /131072.0 - ((double) dig_T1) /8192.0)) * ((double) dig_T3); double t_fine = (long) (var1 + var2); double cTemp = (var1 + var2) / 5120.0; double fTemp = cTemp * 1.8 + 32; // Tính toán bù áp var1 = ((double) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((double) dig_P6) / 32768.0; var2 = var2 + var1 * ((double) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((kép) dig_P4) * 65536.0); var1 = (((double) dig_P3) * var1 * var1 / 524288.0 + ((double) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((kép) dig_P1); double p = 1048576.0 - (double) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((double) dig_P9) * p * p / 2147483648.0; var2 = p * ((double) dig_P8) / 32768.0; áp suất kép = (p + (var1 + var2 + ((double) dig_P7)) / 16.0) / 100; // Tính toán bù ẩm double var_H = (((double) t_fine) - 76800.0); var_H = (adc_h - (dig_H4 * 64.0 + dig_H5 / 16384.0 * var_H)) * (dig_H2 / 65536.0 * (1.0 + dig_H6 / 67108864.0 * var_H * (1.0 + dig_H3 / 67108864.0 * var_H))); độ ẩm kép = var_H * (1.0 - dig_H1 * var_H / 524288.0); if (độ ẩm> 100,0) {độ ẩm = 100,0; } else if (độ ẩm <0,0) {độ ẩm = 0,0; } // Xuất dữ liệu ra màn hình System.out.printf ("Nhiệt độ tính theo độ C:%.2f C% n", cTemp); System.out.printf ("Nhiệt độ tính bằng F:%.2f F% n", fTemp); System.out.printf ("Áp suất:%.2f hPa% n", áp suất); System.out.printf ("Độ ẩm Tương đối:%.2f %% RH% n", độ ẩm); }}

Bước 4: Quy tắc thực hành

Quy tắc thực hành
Quy tắc thực hành

Bây giờ, hãy tải xuống (hoặc git pull) mã và mở nó trong Raspberry Pi.

Chạy các lệnh để Biên dịch và Tải lên mã trên thiết bị đầu cuối và xem kết quả đầu ra trên Màn hình. Sau một vài giây, nó sẽ hiển thị tất cả các thông số. Đảm bảo rằng bạn có quá trình chuyển đổi mã suôn sẻ và kết quả bình tĩnh (ish), bạn nghĩ ra nhiều ý tưởng hơn để sửa đổi thêm (Mỗi dự án đều bắt đầu bằng một Câu chuyện).

Bước 5: Sử dụng trong Thế giới Kiến tạo

BME280 đạt được hiệu suất cao trong tất cả các ứng dụng yêu cầu đo độ ẩm và áp suất. Các ứng dụng mới nổi này là Nhận thức về ngữ cảnh, ví dụ: Phát hiện da, Phát hiện thay đổi phòng, Giám sát thể chất / Sức khỏe, Cảnh báo về độ khô hoặc nhiệt độ cao, Đo thể tích và lưu lượng không khí, Điều khiển tự động hóa gia đình, Điều khiển hệ thống sưởi, Thông gió, Điều hòa không khí (HVAC), Internet of Things (IoT), Cải tiến GPS (ví dụ: Cải thiện thời gian đến lần đầu tiên sửa chữa, Ngã rẽ, Phát hiện dốc), Điều hướng trong nhà (Phát hiện thay đổi tầng, Phát hiện thang máy), Điều hướng ngoài trời, Ứng dụng giải trí & thể thao, Dự báo thời tiết và Chỉ báo vận tốc dọc (Tăng / Chìm Tốc độ, vận tốc).

Bước 6: Kết luận

Như bạn có thể thấy, dự án này là một minh chứng tuyệt vời về khả năng của phần cứng và phần mềm. Trong một khoảng thời gian ngắn, người ta có thể xây dựng một công trình ấn tượng như vậy! Tất nhiên, đây chỉ là sự khởi đầu. Việc tạo một Trạm thời tiết cá nhân phức tạp hơn như Trạm thời tiết cá nhân ở sân bay tự động có thể liên quan đến một số cảm biến khác như Máy đo gió (tốc độ gió), Máy đo truyền (khả năng hiển thị), Pyranometer (bức xạ mặt trời), v.v. Chúng tôi có một video hướng dẫn trên Youtube về chức năng cơ bản của Cảm biến I²C với Rasp Pi. Thực sự đáng kinh ngạc khi thấy kết quả và hoạt động của giao tiếp I²C. Kiểm tra nó là tốt. Hãy vui vẻ xây dựng và học tập! Vui lòng cho chúng tôi biết bạn nghĩ gì về hướng dẫn này. Chúng tôi muốn thực hiện một số cải tiến nếu cần thiết.

Đề xuất: