Всем форумчанам и знатокам Flprog привет.
Требуется помощь в написании пользовательского модуля BH1750 под NodeMcu ESP8266. Для меги в стандартных он есть, но недоступен при выборе NodeMcu...
Есть задача написания программы управления для управления реле включения света, используя BH1750 и плату NodeMcu . Как можно переделать стандартный модуль чтобы он дружил с этой платой. Пытался по всякому сам написать, но знаний видно не хватает...
При компиляции Fprog ругается на секцию описания и вылетает. Помогите кто знает. Спасибо.
Ниже прилагаю то что смог написать и библиотеку что использую.
Датчик оבвещенности BH1750 и Nodemcu esp8622
Датчик оבвещенности BH1750 и Nodemcu esp8622
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Датчик оבвещенности BH1750 и Nodemcu esp8622
Проверил пример из библиотеки, скачал с гит, мне как то болше доверия......все компилируется!
Отправлено спустя 51 секунду:
Проверю вашу разработку....несколько минут....
Отправлено спустя 34 минуты 30 секунд:
Не знаю зачем это.....удаляем эти строки в скомпилирован коде:
extern "C" {
#include "user_interface.h";
}
и тогда компиляция идет без проблем ....но у меня нет такого датчика, в железе проверить не могу)))
Вот блок который у меня скомпилировался для ESP8266 -NodeMCU
Отправлено спустя 51 секунду:
Проверю вашу разработку....несколько минут....
Отправлено спустя 34 минуты 30 секунд:
Не знаю зачем это.....удаляем эти строки в скомпилирован коде:
extern "C" {
#include "user_interface.h";
}
и тогда компиляция идет без проблем ....но у меня нет такого датчика, в железе проверить не могу)))
Вот блок который у меня скомпилировался для ESP8266 -NodeMCU
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Датчик оבвещенности BH1750 и Nodemcu esp8622
Спасибо. Я использовал библиотеку с большим разрешением измерения. И еще вопрос - мне результат в сериал порт кидать не нужно. можно мне удалить эти строки?
Датчик оבвещенности BH1750 и Nodemcu esp8622
Конечно, даже нужно! Так будет меньше памяти использоваться!Scrabler писал(а): 21 июл 2019, 11:47 И еще вопрос - мне результат в сериал порт кидать не нужно. можно мне удалить эти строки?
-
- Рядовой
- Сообщения: 71
- Зарегистрирован: 06 фев 2021, 15:26
- Имя: Telman
- Благодарил (а): 10 раз
- Поблагодарили: 2 раза
Датчик оבвещенности BH1750 и Nodemcu esp8622
а можно переделать этот блок и туда добавить время опроса датчика и чтобы работал блок на millis, а не по delay ?Anydy писал(а): 21 июл 2019, 00:50 Проверил пример из библиотеки, скачал с гит, мне как то болше доверия......все компилируется!
Отправлено спустя 51 секунду:
Проверю вашу разработку....несколько минут....
Отправлено спустя 34 минуты 30 секунд:
Не знаю зачем это.....удаляем эти строки в скомпилирован коде:
extern "C" {
#include "user_interface.h";
}
и тогда компиляция идет без проблем ....но у меня нет такого датчика, в железе проверить не могу)))
Вот блок который у меня скомпилировался для ESP8266 -NodeMCU
BH1750_3_(CODE).ubi
Отправлено спустя 32 минуты 46 секунд:
можете посмотреть правильно ли я делал время опроса для датчика?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Датчик оבвещенности BH1750 и Nodemcu esp8622
Таким же образом задается время опроса датчикаФункция millis() позволит выполнить задержку без delay на ардуино, тем самым обойти недостатки предыдущих способов. Максимальное значение параметра millis такое же, как и у функции delay (4294967295мс или 50 суток). При переполнении значение просто сбрасывается в 0, не забывайте об этом.
С помощью millis мы не останавливаем выполнение всего скетча, а просто указываем, сколько времени ардуино должна просто “обходить” именно тот блок кода, который мы хотим приостановить. В отличие от delay millis сама по себе ничего не останавливает. Данная команда просто возвращает нам от встроенного таймера микроконтроллера количество миллисекунд, прошедших с момента запуска. При каждом вызове loop Мы сами измеряем время, прошедшее с последнего вызова нашего кода и если разница времени меньше желаемой паузы, то игнорируем код. Как только разница станет больше нужной паузы, мы выполняем код, получаем текущее время с помощью той же millis и запоминаем его – это время будет новой точкой отсчета. В следующем цикле отсчет уже будет от новой точки и мы опять будем игнорировать код, пока новая разница millis и нашего сохраненного прежде значения не достигнет вновь желаемой паузы.Сначала мы вводим переменную timing, в ней будет храниться количество миллисекунд. По умолчанию значение переменной равно 0. В основной части программы проверяем условие: если количество миллисекунд с запуска микроконтроллера минус число, записанное в переменную timing больше, чем 10000, то выполняется действие по выводу сообщения в монитор порта и в переменную записывается текущее значение времени. В результате работы программы каждые 10 секунд в монитор порта будет выводиться надпись 10 seconds. Данный способ позволяет моргать светодиодом без delay.Код: Выделить всё
unsigned long timing; // Переменная для хранения точки отсчета void setup() { Serial.begin(9600); } void loop() { /* В этом месте начинается выполнение аналога delay() Вычисляем разницу между текущим моментом и ранее сохраненной точкой отсчета. Если разница больше нужного значения, то выполняем код. Если нет - ничего не делаем */ if (millis() - timing > 10000){ // Вместо 10000 подставьте нужное вам значение паузы timing = millis(); Serial.println ("10 seconds"); } }
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей