Датчик оבвещенности BH1750 и Nodemcu esp8622

Требуется помощь

Вопросы от новичков
Ответить
Scrabler
Рядовой
Сообщения: 9
Зарегистрирован: 20.07.2019{, 18:16}
Репутация: 0
Имя: Михаил

Датчик оבвещенности BH1750 и Nodemcu esp8622

#1

Сообщение Scrabler » 20.07.2019{, 22:08}

Всем форумчанам и знатокам Flprog привет.
Требуется помощь в написании пользовательского модуля BH1750 под NodeMcu ESP8266. Для меги в стандартных он есть, но недоступен при выборе NodeMcu...
Есть задача написания программы управления для управления реле включения света, используя BH1750 и плату NodeMcu . Как можно переделать стандартный модуль чтобы он дружил с этой платой. Пытался по всякому сам написать, но знаний видно не хватает...
При компиляции Fprog ругается на секцию описания и вылетает. Помогите кто знает. Спасибо.
Ниже прилагаю то что смог написать и библиотеку что использую.
Вложения
BH1750-HD.zip
(9.24 КБ) 74 скачивания
BH1750_1_(CODE).ubi
(54.19 КБ) 61 скачивание

Anydy

Датчик оבвещенности BH1750 и Nodemcu esp8622

#2

Сообщение Anydy » 21.07.2019{, 00:15}

Проверил пример из библиотеки, скачал с гит, мне как то болше доверия......все компилируется!

Отправлено спустя 51 секунду:
Проверю вашу разработку....несколько минут....

Отправлено спустя 34 минуты 30 секунд:
Не знаю зачем это.....удаляем эти строки в скомпилирован коде:
extern "C" {
#include "user_interface.h";
}
и тогда компиляция идет без проблем ....но у меня нет такого датчика, в железе проверить не могу)))
Вот блок который у меня скомпилировался для ESP8266 -NodeMCU
BH1750_3_(CODE).ubi
(614.09 КБ) 103 скачивания

Scrabler
Рядовой
Сообщения: 9
Зарегистрирован: 20.07.2019{, 18:16}
Репутация: 0
Имя: Михаил

Датчик оבвещенности BH1750 и Nodemcu esp8622

#3

Сообщение Scrabler » 21.07.2019{, 11:47}

Спасибо. Я использовал библиотеку с большим разрешением измерения. И еще вопрос - мне результат в сериал порт кидать не нужно. можно мне удалить эти строки?

Anydy

Датчик оבвещенности BH1750 и Nodemcu esp8622

#4

Сообщение Anydy » 21.07.2019{, 14:58}

Scrabler писал(а):
21.07.2019{, 11:47}
И еще вопрос - мне результат в сериал порт кидать не нужно. можно мне удалить эти строки?
Конечно, даже нужно! Так будет меньше памяти использоваться!

Telman
Рядовой
Сообщения: 47
Зарегистрирован: 06.02.2021{, 15:26}
Репутация: 0
Имя: Telman

Датчик оבвещенности BH1750 и Nodemcu esp8622

#5

Сообщение Telman » 03.04.2021{, 09:47}

Anydy писал(а):
21.07.2019{, 00:50}
Проверил пример из библиотеки, скачал с гит, мне как то болше доверия......все компилируется!

Отправлено спустя 51 секунду:
Проверю вашу разработку....несколько минут....

Отправлено спустя 34 минуты 30 секунд:
Не знаю зачем это.....удаляем эти строки в скомпилирован коде:
extern "C" {
#include "user_interface.h";
}
и тогда компиляция идет без проблем ....но у меня нет такого датчика, в железе проверить не могу)))
Вот блок который у меня скомпилировался для ESP8266 -NodeMCU
BH1750_3_(CODE).ubi
а можно переделать этот блок и туда добавить время опроса датчика и чтобы работал блок на millis, а не по delay ?

Отправлено спустя 32 минуты 46 секунд:
можете посмотреть правильно ли я делал время опроса для датчика?
Вложения
BH1750LightMeter_(Code_-_Basic).ubi
(31.51 КБ) 36 скачиваний

Anydy

Датчик оבвещенности BH1750 и Nodemcu esp8622

#6

Сообщение Anydy » 03.04.2021{, 17:03}

Функция millis() позволит выполнить задержку без delay на ардуино, тем самым обойти недостатки предыдущих способов. Максимальное значение параметра millis такое же, как и у функции delay (4294967295мс или 50 суток). При переполнении значение просто сбрасывается в 0, не забывайте об этом.

С помощью millis мы не останавливаем выполнение всего скетча, а просто указываем, сколько времени ардуино должна просто “обходить” именно тот блок кода, который мы хотим приостановить. В отличие от delay millis сама по себе ничего не останавливает. Данная команда просто возвращает нам от встроенного таймера микроконтроллера количество миллисекунд, прошедших с момента запуска. При каждом вызове loop Мы сами измеряем время, прошедшее с последнего вызова нашего кода и если разница времени меньше желаемой паузы, то игнорируем код. Как только разница станет больше нужной паузы, мы выполняем код, получаем текущее время с помощью той же millis и запоминаем его – это время будет новой точкой отсчета. В следующем цикле отсчет уже будет от новой точки и мы опять будем игнорировать код, пока новая разница millis и нашего сохраненного прежде значения не достигнет вновь желаемой паузы.

Код: Выделить всё

unsigned long timing; // Переменная для хранения точки отсчета
void setup() {
 Serial.begin(9600);
}

void loop() {
/* 
 В этом месте начинается выполнение аналога delay()
 Вычисляем разницу между текущим моментом и ранее сохраненной точкой отсчета.
 Если разница больше нужного значения, то выполняем код. 
 Если нет - ничего не делаем 
*/
 if (millis() - timing > 10000){ // Вместо 10000 подставьте нужное вам значение паузы 
  timing = millis(); 
  Serial.println ("10 seconds");
 }
}
Сначала мы вводим переменную timing, в ней будет храниться количество миллисекунд. По умолчанию значение переменной равно 0. В основной части программы проверяем условие: если количество миллисекунд с запуска микроконтроллера минус число, записанное в переменную timing больше, чем 10000, то выполняется действие по выводу сообщения в монитор порта и в переменную записывается текущее значение времени. В результате работы программы каждые 10 секунд в монитор порта будет выводиться надпись 10 seconds. Данный способ позволяет моргать светодиодом без delay.
Таким же образом задается время опроса датчика

trepuz
Рядовой
Сообщения: 19
Зарегистрирован: 10.09.2015{, 05:15}
Репутация: -1
Откуда: Красноярск
Контактная информация:

Датчик оבвещенности BH1750 и Nodemcu esp8622

#7

Сообщение trepuz » 03.02.2022{, 10:39}

Здравствуйте! А на esp32 блока ни у кого нет?
сила в логике

Ответить

Вернуться в «Начинающим»