YAWS, еще одна метеостанция
Обновление от 02.04.24
Благодаря @ScruffyOrc_217627 мы обнаружили, что проблема может быть в соединении чаши анемометра с держателем, это может быть проблема с подгонкой.
Ничего сложного! Просто подточите его немного резаком!
Обновление от 31.01.24
Электронную часть я начал с некоторым опозданием.
Основная проблема — моя плата (NodeMCU esp32 или esp8266 d1mini).
Оба имеют высокий ток глубокого сна, почти 20 мАч, поэтому работать от батареи практически невозможно (я не могу каждую неделю выходить на крышу для замены батареи).
Итак, в целях экономии я напишу код банкомата, используя эти платы и думая о прямом питании для работы с датчиками. После основного теста я начну с протокола глубокого сна, чтобы максимально снизить мощность и использовать один или два литий-ионных аккумулятора 18650 и небольшую солнечную панель.
Но время от времени я все сделаю
Я нашел ошибку в Esp8266, показания анемометра ужасны, и я не смог найти решение (очевидно, ПОСЛЕ того, как я сделал печатную плату… поэтому мне пришлось переделать ее с помощью Esp32 NodeMCU).
Поэтому, если вы найдете решение этой проблемы, ПОЖАЛУЙСТА, прокомментируйте его, чтобы я мог добавить функцию и два разных кода!
Здесь у вас есть БЕТА-версия датчика, читающего YAML, часть о дождемере находится в стадии разработки.
эсфоме:
имя: esp32-yaws
дружелюбное_имя: esp32-YAWS
включает в себя:
— «as5600_sensor.h»
библиотеки:
— Проволока
— «АС5600»
esp32:
плата: nodemcu-32s
структура:
тип: ардуино
# Включить ведение журнала
регистратор:
# Включить API Home Assistant
API:
шифрование:
ключ: «ХХХХХХХХХХХХХХХ»
ота:
пароль: «ХХХХХХХХХХХХХХХ»
Wi-Fi:
ssid: !secret wifi_ssid
пароль: !secret wifi_password
# Включить резервную точку доступа (портал авторизации) на случай сбоя Wi-Fi-соединения.
ап:
ssid: «ХХХХХХХ»
пароль: «ХХХХ»
captive_portal:
i2c:
СДА: GPIO21
СКЛ: GPIO22
bme680_bsec:
адрес: 0x77 #Я указал его, потому что у меня не 0x76
датчик:
— платформа: кастомная
лямбда: |-
auto my_as5600_sensor = новый AS5600Sensor();
App.register_comComponent(my_as5600_sensor);
вер��уть {my_as5600_sensor};
датчики:
имя: «АС5600»
точность_десятичных чисел: 2
— платформа:pulse_counter # эта часть предназначена для анемометра.
контакт: 19
unit_of_measurement: 'м/с'
название: 'Скорость ветра'
фильтры:
— умножить: 0,0173833333
update_interval: 60 с
— платформа: bme680_bsec
температура:
имя: «Температура BME680»
давление:
имя: «BME680 Давление»
влажность:
имя: «BME680 Влажность»
ЯК:
имя: «BME680 IAQ»
идентификатор: IAQ
co2_эквивалент:
имя: «BME680 Эквивалент CO2»
дыхания_voc_equiвалент:
name: «BME680 Эквивалент ЛОС для дыхания»
text_sensor: // Выход датчика BME, я оставил их все для проверки.
— платформа: bme680_bsec
iaq_accuracy:
имя: «Точность BME680 IAQ»
— платформа: шаблон
имя: «Классификация BME680 IAQ»
icon: «mdi:checkbox-marked-circle-outline»
лямбда: |-
если ( int(id(iaq).state) <= 50) {
вернуть {«Отлично»};
}
else if (int(id(iaq).state) >= 51 && int(id(iaq).state) <= 100) {
вернуть {«Хорошо»};
}
else if (int(id(iaq).state) >= 101 && int(id(iaq).state) <= 150) {
return {«Слегка загрязнено»};
}
else if (int(id(iaq).state) >= 151 && int(id(iaq).state) <= 200) {
return {«Умеренно загрязненный»};
}
else if (int(id(iaq).state) >= 201 && int(id(iaq).state) <= 250) {
return {«Сильно загрязнено»};
}
else if (int(id(iaq).state) >= 251 && int(id(iaq).state) <= 350) {
return {«Сильно загрязнено»};
}
иначе если (int(id(iaq).state) >= 351) {
return {«Чрезвычайно загрязнено»};
}
еще {
вернуть {«ошибка»};
}
Пользовательская конфигурация датчика.
#include «esphome.h»
#include
#include «AS5600.h»
#define ТЕГ «AS5600»
AS5600 as5600; // Адрес i2c по умолчанию 0x36
класс AS5600Sensor: public PollingComponent, public Sensor {
общедоступный: AS5600 as5600;
AS5600Sensor(): PollingComponent(5000) {}
переопределение void setup()















