Оглавление:

Персональная метеостанция с использованием Raspberry Pi с BME280 на Java: 6 шагов
Персональная метеостанция с использованием Raspberry Pi с BME280 на Java: 6 шагов

Видео: Персональная метеостанция с использованием Raspberry Pi с BME280 на Java: 6 шагов

Видео: Персональная метеостанция с использованием Raspberry Pi с BME280 на Java: 6 шагов
Видео: Raspberry Pi - Что нужно знать? Что нужно иметь? Достаточно купить только плату? 2024, Июль
Anonim
Image
Image
Билль на основное оборудование
Билль на основное оборудование

Плохая погода всегда хуже смотрится в окно

Нам всегда было интересно следить за погодой в нашем районе и за тем, что мы видим из окна. Мы также хотели лучше контролировать нашу систему отопления и кондиционирования воздуха. Создание персональной метеостанции - это отличный учебный опыт. Когда вы закончите создание этого проекта, вы лучше поймете, как работает беспроводная связь, как работают датчики и насколько мощной может быть платформа Raspberry Pi. Имея за основу этот проект и полученный опыт, вы сможете легко создавать более сложные проекты в будущем.

Шаг 1: перечень необходимого оборудования

Билль на основное оборудование
Билль на основное оборудование
Билль на основное оборудование
Билль на основное оборудование
Билль на основное оборудование
Билль на основное оборудование

1. Raspberry Pi

Первый шаг - заполучить плату Raspberry Pi. Raspberry Pi - это одноплатный компьютер под управлением Linux. Его цель - улучшить навыки программирования и понимание оборудования. Он был быстро принят любителями и энтузиастами электроники для инновационных проектов.

2. I²C Shield для Raspberry Pi

INPI2 (адаптер I2C) предоставляет Raspberry Pi 2/3 порт I²C для использования с несколькими устройствами I²C. Он доступен в магазине Dcube.

3. Цифровой датчик влажности, давления и температуры, BME280

BME280 - это датчик влажности, давления и температуры, который имеет быстрое время отклика и высокую общую точность. Мы приобрели этот датчик в магазине Dcube.

4. Соединительный кабель I²C

У нас был соединительный кабель I²C, доступный в магазине Dcube.

5. Кабель Micro USB

Кабель micro USB Источник питания - идеальный выбор для питания Raspberry Pi.

6. Интерпретация доступа в Интернет через EthernetCable / WiFi адаптер

Первое, что вам нужно сделать, это подключить Raspberry Pi к Интернету. Мы можем подключиться с помощью кабеля Ethernet. Другая возможность заключается в том, что вы можете подключиться к беспроводной сети с помощью беспроводного USB-адаптера.

7. Кабель HDMI (дисплей и кабель для подключения)

Любой монитор HDMI / DVI и любой телевизор должны работать как дисплей для Pi. Но это необязательно. Не исключена и возможность удаленного доступа (например, SSH). Вы также можете получить доступ с помощью программного обеспечения PUTTY.

Шаг 2. Аппаратные соединения для установки

Аппаратные соединения для установки
Аппаратные соединения для установки
Аппаратные соединения для установки
Аппаратные соединения для установки

Сделайте схему согласно показанной схеме.

Во время обучения мы досконально освоили основы электроники, касающиеся аппаратного и программного обеспечения. Мы хотели нарисовать простую схему электроники для этого проекта. Электронные схемы подобны чертежам для электроники. Составьте план и внимательно следите за дизайном. Здесь мы применили некоторые основы электроники. Логика доставит вас от А до Б. Воображение доставит вас куда угодно!

Подключение Raspberry Pi и I²C Shield

Прежде всего, возьмите Raspberry Pi и поместите на него щит I²C (с портом I²C, обращенным внутрь). Аккуратно прижмите экран к контактам GPIO Pi, и мы сделали этот шаг так же просто, как пирог (см. Рис.).

Подключение сенсора и Raspberry Pi

Возьмите датчик и подключите к нему кабель I²C. Убедитесь, что выход I²C ВСЕГДА подключен к входу I²C. То же самое должно быть выполнено для Raspberry Pi с экраном I²C, установленным над контактами GPIO. У нас есть экран I²C и соединительные кабели на нашей стороне как очень большое облегчение и очень большое преимущество, так как нам остается только подключи и играй вариант. Больше нет проблем с контактами и проводкой, и, следовательно, нет путаницы. Просто представьте себя в паутине проводов и попадаете в нее. От этого облегчение. Это делает вещи несложными.

Примечание. Коричневый провод всегда должен следовать за заземлением (GND) между выходом одного устройства и входом другого устройства

Подключение к Интернету - это необходимость

На самом деле у вас есть выбор. Вы можете подключить Raspberry Pi с помощью кабеля LAN или беспроводного адаптера Nano USB для подключения к Wi-Fi. В любом случае манифест должен подключиться к Интернету, что выполнено.

Питание схемы

Подключите кабель Micro USB к разъему питания Raspberry Pi. Вставай и вуаля! Все в порядке, и мы немедленно приступим к работе.

Подключение к дисплею

Мы можем подключить кабель HDMI к монитору или телевизору. Мы можем получить доступ к Raspberry Pi, не подключая его к монитору, используя -SSH (доступ к командной строке Pi с другого компьютера). Вы также можете использовать для этого программу PUTTY. Этот вариант предназначен для опытных пользователей, поэтому здесь мы не будем его подробно рассматривать.

Я слышал, что будет рецессия, я решил не участвовать

Шаг 3: Программирование Raspberry Pi на Java

Программирование Raspberry Pi на Java
Программирование Raspberry Pi на Java

Код Java для датчика Raspberry Pi и BME280. Он доступен в нашем репозитории на Github.

Прежде чем переходить к коду, убедитесь, что вы прочитали инструкции, приведенные в файле Readme, и настройте Raspberry Pi в соответствии с ними. Это займет всего несколько секунд. Персональная метеостанция - это набор приборов для измерения погоды, которыми управляет частное лицо, клуб, ассоциация или даже компания. Персональные метеостанции могут использоваться исключительно для развлечения и обучения владельца, но многие операторы персональных метеостанций также делятся своими данными с другими, либо вручную собирая данные и распределяя их, либо с помощью Интернета или любительского радио.

Код представлен в самой простой форме, которую вы можете себе представить, и у вас не должно возникнуть проблем с ним, но спросите, есть ли у вас. Даже если вы знаете тысячу вещей, все равно спросите кого-нибудь, кто знает.

Вы также можете скопировать рабочий java-код для этого датчика отсюда.

// Распространяется по свободной лицензии.// Используйте его любым способом, коммерческим или бесплатным, при условии, что он соответствует лицензиям на связанные с ним работы. // BME280 // Этот код разработан для работы с мини-модулем BME280_I2CS I2C, доступным на ControlEverything.com. //

import com.pi4j.io.i2c. I2CBus;

import com.pi4j.io.i2c. I2CDevice; import com.pi4j.io.i2c. I2CFactory; import java.io. IOException;

публичный класс BME280

{public static void main (String args ) выдает исключение {// Создание шины I2C. I2CBus bus = I2CFactory.getInstance (I2CBus. BUS_1); // Получение устройства I2C, адрес BME280 I2C 0x76 (108) I2CDevice device = bus.getDevice (0x76); // Считываем 24 байта данных с адреса 0x88 (136) byte b1 = new byte [24]; device.read (0x88, b1, 0, 24); // Преобразование данных // временные коэффициенты int dig_T1 = (b1 [0] & 0xFF) + ((b1 [1] & 0xFF) * 256); int dig_T2 = (b1 [2] & 0xFF) + ((b1 [3] & 0xFF) * 256); если (dig_T2> 32767) {dig_T2 - = 65536; } int dig_T3 = (b1 [4] & 0xFF) + ((b1 [5] & 0xFF) * 256); если (dig_T3> 32767) {dig_T3 - = 65536; } // коэффициенты давления int dig_P1 = (b1 [6] & 0xFF) + ((b1 [7] & 0xFF) * 256); int dig_P2 = (b1 [8] & 0xFF) + ((b1 [9] & 0xFF) * 256); если (dig_P2> 32767) {dig_P2 - = 65536; } int dig_P3 = (b1 [10] & 0xFF) + ((b1 [11] & 0xFF) * 256); если (dig_P3> 32767) {dig_P3 - = 65536; } int dig_P4 = (b1 [12] & 0xFF) + ((b1 [13] & 0xFF) * 256); если (dig_P4> 32767) {dig_P4 - = 65536; } int dig_P5 = (b1 [14] & 0xFF) + ((b1 [15] & 0xFF) * 256); если (dig_P5> 32767) {dig_P5 - = 65536; } int dig_P6 = (b1 [16] & 0xFF) + ((b1 [17] & 0xFF) * 256); если (dig_P6> 32767) {dig_P6 - = 65536; } int dig_P7 = (b1 [18] & 0xFF) + ((b1 [19] & 0xFF) * 256); если (dig_P7> 32767) {dig_P7 - = 65536; } int dig_P8 = (b1 [20] & 0xFF) + ((b1 [21] & 0xFF) * 256); если (dig_P8> 32767) {dig_P8 - = 65536; } int dig_P9 = (b1 [22] & 0xFF) + ((b1 [23] & 0xFF) * 256); если (dig_P9> 32767) {dig_P9 - = 65536; } // Считываем 1 байт данных с адреса 0xA1 (161) int dig_H1 = ((byte) device.read (0xA1) & 0xFF); // Считываем 7 байтов данных с адреса 0xE1 (225) device.read (0xE1, b1, 0, 7); // Преобразование данных // коэффициенты влажности int dig_H2 = (b1 [0] & 0xFF) + (b1 [1] * 256); если (dig_H2> 32767) {dig_H2 - = 65536; } int dig_H3 = b1 [2] & 0xFF; int dig_H4 = ((b1 [3] & 0xFF) * 16) + (b1 [4] & 0xF); если (dig_H4> 32767) {dig_H4 - = 65536; } int dig_H5 = ((b1 [4] & 0xFF) / 16) + ((b1 [5] & 0xFF) * 16); если (dig_H5> 32767) {dig_H5 - = 65536; } int dig_H6 = b1 [6] & 0xFF; если (dig_H6> 127) {dig_H6 - = 256; } // Выбор контрольного регистра влажности // Влажность выше частоты дискретизации = 1 device.write (0xF2, (byte) 0x01); // Выбор контрольного регистра измерения // Нормальный режим, температура и давление выше частоты дискретизации = 1 device.write (0xF4, (byte) 0x27); // Выбор регистра конфигурации // Время ожидания = 1000 мс device.write (0xF5, (byte) 0xA0); // Чтение 8 байтов данных из адреса 0xF7 (247) // msb давления, msb давления, давления lsb, temp msb1, temp msb, temp lsb, влажности lsb, влажности msb byte data = new byte [8]; device.read (0xF7, данные, 0, 8); // Преобразование данных давления и температуры в 19-битную длину adc_p = (((long) (data [0] & 0xFF) * 65536) + ((long) (data [1] & 0xFF) * 256) + (long) (данные [2] & 0xF0)) / 16; long adc_t = (((long) (data [3] & 0xFF) * 65536) + ((long) (data [4] & 0xFF) * 256) + (long) (data [5] & 0xF0)) / 16; // Преобразование данных влажности long adc_h = ((long) (data [6] & 0xFF) * 256 + (long) (data [7] & 0xFF)); // Расчет смещения температуры 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); двойной t_fine = (длинный) (var1 + var2); двойной cTemp = (var1 + var2) / 5120.0; двойной fTemp = cTemp * 1.8 + 32; // Расчет смещения давления var1 = ((double) t_fine / 2.0) - 64000.0; var2 = var1 * var1 * ((двойной) dig_P6) / 32768.0; var2 = var2 + var1 * ((двойной) dig_P5) * 2.0; var2 = (var2 / 4.0) + (((double) dig_P4) * 65536.0); var1 = (((двойной) dig_P3) * var1 * var1 / 524288.0 + ((двойной) dig_P2) * var1) / 524288.0; var1 = (1.0 + var1 / 32768.0) * ((двойной) dig_P1); double p = 1048576.0 - (двойной) adc_p; p = (p - (var2 / 4096.0)) * 6250.0 / var1; var1 = ((двойной) dig_P9) * p * p / 2147483648.0; var2 = p * ((двойной) dig_P8) / 32768.0; двойное давление = (p + (var1 + var2 + ((double) dig_P7)) / 16.0) / 100; // Расчет смещения влажности 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))); двойная влажность = var_H * (1.0 - dig_H1 * var_H / 524288.0); если (влажность> 100,0) {влажность = 100,0; } else if (влажность <0,0) {влажность = 0,0; } // Выводим данные на экран System.out.printf ("Температура в градусах Цельсия:%.2f C% n", cTemp); System.out.printf ("Температура в градусах Фаренгейта:%.2f F% n", fTemp); System.out.printf ("Давление:%.2f гПа% n", давление); System.out.printf («Относительная влажность:%.2f %% RH% n», влажность); }}

Шаг 4: Практичность Кодекса

Практичность Кодекса
Практичность Кодекса

Теперь загрузите (или выполните git pull) код и откройте его в Raspberry Pi.

Выполните команды для компиляции и загрузки кода в терминал и посмотрите результат на мониторе. Через несколько секунд он отобразит все параметры. Убедившись, что у вас плавный переход кода и спокойный результат, вы придумываете больше идей для внесения дальнейших поправок (каждый проект начинается с истории).

Шаг 5: Использование в конструктивном мире

BME280 обеспечивает высокую производительность во всех приложениях, требующих измерения влажности и давления. Эти новые приложения представляют собой контекстную информацию, например Обнаружение кожи, Обнаружение смены комнаты, Мониторинг состояния / благополучия, Предупреждение относительно сухости или высоких температур, Измерение объема и расхода воздуха, Управление домашней автоматикой, Управление отоплением, вентиляцией, кондиционером (HVAC), Интернетом вещей (IoT), Улучшение GPS (например, улучшение времени до первого исправления, определение точного счета, обнаружение уклона), внутренняя навигация (обнаружение смены пола, обнаружение лифта), наружная навигация, приложения для отдыха и спорта, прогноз погоды и индикация вертикальной скорости (подъем / опускание) Скорость).

Шаг 6: Заключение

Как видите, этот проект - отличная демонстрация возможностей аппаратного и программного обеспечения. За короткое время можно построить такой впечатляющий проект! Конечно, это только начало. Создание более сложной персональной метеостанции, такой как автоматизированные персональные метеорологические станции для аэропортов, может включать в себя еще несколько датчиков, таких как анемометр (скорость ветра), трансмиссометр (видимость), пиранометр (солнечное излучение) и т. Д. У нас есть видеоурок на Youtube, в котором описаны основные функции Датчик I²C с Rasp Pi. Приятно видеть результаты и работу коммуникаций I²C. Проверьте это тоже. Получайте удовольствие от строительства и обучения! Сообщите нам, что вы думаете об этом руководстве. При необходимости мы хотели бы внести некоторые улучшения.

Рекомендуемые: