Перейти к публикации
iT4iT.CLUB

Рекомендованные сообщения

Если вдруг кто решит заняться некрофилией как я, то
BMP085 - https://github.com/adafruit/Adafruit-BMP085-Library/releases/tag/1.0.0

ESP8266 v.2.4.0 - https://github.com/esp8266/Arduino/releases/tag/2.4.0

А то пришлось повозится ) Почему не выкладывать целиком проект со всеми зависимостями?

И не могу побороть SPIFFS Error: mkspiffs not found! Arduino IDE 1.8.5 win10. КОмпилируеется, но ни прошивка не заливается, типа esptool not found, ни SPIFFS не загружается... Есть у кого прям готовая arduino ide под это все дело?

Изменено пользователем Василий Залукаев

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Комплект ПО тут лежит у автора: 

 

 

Для справки - отвал WiFI кажется тоже починился у меня. Убрал привязку IP по МАС адресу в роутере, все работает без отвала теперь...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый день, есть проблема. при подключении ds18b20 выводится температура -40.

В основном файле     //gpio_14();  закомментировано, также закомментировано в начале файла

 // #include "users_auto.h";
//#include "users_bme280_x2.h"; // Пример для двух датчиков BME280
#include "users_ds18.h"; // Пример для датчиков DS18B20
//#include "users_wspeed.h"; // пример для самодельного анемометра

подключен только один ds18b20. В чем проблема? Версия последняя, ESP8266_WS_V2.0_iT4IT.CLUB.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну, сам себе ответил. 

идентификация не по UID, а по индексу - показывает все отлично.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Привет! Кто ни будь решил "проблему" минусовой температуры в суточном графике.?!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
8 часов назад, EndWar сказал:

Привет! Кто ни будь решил "проблему" минусовой температуры в суточном графике.?!

Поддерживаю камрада  @U-M, все нормально.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый день.

Тоже заинтересовался этой темой.
Но с применением связки "ESP-12F WeMos D1 WiFi", "Arduino UNO" и внешнего приложения.
Рабочее название: «Метеостанция с охранной сигнализацией».
Результат, в целом, удовлетворительный (в рамках поставленных целей).
Если интересно, то можно посмотреть здесь:
https://roamer55.ru/my_projs/arduino_prj/my_ts/005_step/ex_grp_03/ex_03_001.pdf ;
https://roamer55.ru/main_programming/arduino/arduino_technosphere_000/arduino_technosphere_000_005/

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
8 часов назад, neon999 сказал:

Добрый день.

Тоже заинтересовался этой темой.
Но с применением связки "ESP-12F WeMos D1 WiFi", "Arduino UNO" и внешнего приложения.
Рабочее название: «Метеостанция с охранной сигнализацией».
Результат, в целом, удовлетворительный (в рамках поставленных целей).
Если интересно, то можно посмотреть здесь:
https://roamer55.ru/my_projs/arduino_prj/my_ts/005_step/ex_grp_03/ex_03_001.pdf ;
https://roamer55.ru/main_programming/arduino/arduino_technosphere_000/arduino_technosphere_000_005/

 

ИМХО... результат прям вообще так себе. Видно что вы только ступаете на путь программирования, но уже учите...

if (s == "PIN_0") { res = 0; };
 if (s == "PIN_1") { res = 1; };
 if (s == "PIN_2") { res = 2; };

А знаете ли вы что даже если будет PIN_0, то он все равно будет продолжать перебирать по остальным? В таком контексте было бы правильнее сделать так:

if (s == "PIN_0") { res = 0; } else {
 if (s == "PIN_1") { res = 1; } else {
 if (s == "PIN_2") { res = 2; }}}

Потом где вы вообще видели за закрывающей скобкой точку с запятой? Вы в курсе что это в программировании грубо говоря пустая строка?

if (bla) ;

В данном случае будет выполнена проверка и по итогу ни чего не сделано.

Но и в данном случае такая себе идея гонять строки. Откройте для себя switch ... case

Вычленяем все до "_" + проверяем после него на "W" и "A" и после уже в числовую переменную номер пина. 

pin_val_get(0, true);
 pin_val_get(1, true);
 pin_val_get(2, true);
 pin_val_get(3, true);
 pin_val_get(4, true);
 pin_val_get(5, true);
 pin_val_get(6, true);
 pin_val_get(7, true);
 pin_val_get(8, true);
 pin_val_get(9, true);
 pin_val_get(10, true);
 pin_val_get(11, true);

Тоже тема знатная... for еще не проходили?

if (va < 0) {va = 0; }
if (va > 1) {va = 1; }

Зачем этот изврат? Вы в курсе что в половине случаев вы просто сделаете лишние тики?

if (va <= 0) va = 0 else va = 1; 

Опять же зачем плодить лишние {}?

Да и подобные простые вещи тоже так громоздко не пишут давно

va = (va <= 0) ? 0 : 1;

Так же можно было и сократить и ваши ифы выше:

res = (s == "PIN_0") ?  0 :
(s == "PIN_1") ? 1 :
(s == "PIN_2") ? 2;

Вот по теме ссылка первая в гугле - https://wm-school.ru/js/js_if_else.php

Далее по отдаче данных. Кто же отдает кашу? Как там что разбирать? Или отдавайте json, ну или на худой конец xml. И для того и для другого во всех языках есть драйвер по работе. У вас же каждый раз при изменении символа в строке придется городить проверки и прочее.

Там еще есть вопрос по переменным... Там тебе и "bool res=" и "int res;" Чего только стоит "String sAct = ""; // действие: GET: или SET:" Вы же заранее знаете что там кроме этого ни чего не будет. "char sAcr[4];" - и уже памяти экономим вагон! Но и это изврат: "bool GetSet;" Да и работать с ним куда проще (в плане тиков на операцию). А это... "const int soundPin = 3;" Серьезно? Вы под номер пина выделяете 16 бит? byte - 8 бит. от 0 до 255 вам будет с головой. Но и это тот еще изврат если это постоянная. "#define soundPin 3" - ВСЕ!!! При компиляции машинного кода эта тройка подставится везде. Вы же define вообще обходите стороной... 

Блин чувак, ты позиционируешь этот код как обучающий ("пример", "настоятельно рекомендую"). Да тебе еще самому обучаться и обучаться.

Изменено пользователем Василий Залукаев

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый день! Кто в курсе, подскажите, пожалуйста, можно ли использовать Планировщик задач из этого проекта (cron.h) с Mega2560. Пробую сделать себе контроллер теплицы, при компиляции ругается:

In file included from /var/folders/1j/57_hl_vj3fxdlg7wc55tb8pr0000gn/T/arduino_modified_sketch_575968/tepl_motor4.ino:7:0:
sketch/cron.h: At global scope:
cron.h:54:49: error: 'cronEvent::cronUserFunction_t' has not been declared
     void add(unsigned long interval, cronEvent::cronUserFunction_t fn, const char *id);
                                                 ^
cron.h:55:49: error: 'cronEvent::cronUserFunction_t' has not been declared
     void add(unsigned long interval, cronEvent::cronUserFunction_t fn, bool coldStart, const char *id);
                                                 ^
cron.h:91:51: error: 'cronEvent::cronUserFunction_t' has not been declared
 void cron::add(unsigned long interval, cronEvent::cronUserFunction_t fn, const char *id = 0) {
                                                   ^
cron.h:97:51: error: 'cronEvent::cronUserFunction_t' has not been declared
 void cron::add(unsigned long interval, cronEvent::cronUserFunction_t fn, bool coldStart, const char *id = 0) {
                                                   ^
sketch/cron.h: In member function 'void cron::add(long unsigned int, int, bool, const char*)':
cron.h:99:21: error: 'fn' cannot be used as a function
   if (coldStart) fn();
                     ^
sketch/cron.h: In member function 'void cron::handleEvents()':
cron.h:108:23: error: 'class cronEvent' has no member named 'function'
         currentEvent->function();
                       ^
exit status 1
'function' in namespace 'std' does not name a template type

на ESP компилируется, но там пинов слишком мало - не выйдет реализовать задуманное

Заранее благодарен за помощь

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
23.01.2022 в 18:45, post125 сказал:

можно ли использовать Планировщик задач из этого проекта

Уже не актуально, вопрос решен с обычными таймерами

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Привет, можно поподробней про Первый запуск, точку доступа с именем WeatherStation я вижу,

дальше Подключитесь к данной сети с любого удобного устройства и перейдите в панель управления (для этого имеется соответствующая иконка) - это как?

не получается.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это на страничке устройства есть иконка с человечком и шестеренкой. Пароль логин admin/admin вроде. Потом там, в настройках надо полазить и прописать свой роутер (как пример). Потом устройство перезагружается, точка доступа пропадет, но роутер выдаст IP для устройства. По сути, теперь по IP поподаем снова на устройство. Есть еще вариант попадать по DNS имени. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, U-M сказал:

Это на страничке устройства есть иконка с человечком и шестеренкой. Пароль логин admin/admin вроде. Потом там, в настройках надо полазить и прописать свой роутер (как пример). Потом устройство перезагружается, точка доступа пропадет, но роутер выдаст IP для устройства. По сути, теперь по IP поподаем снова на устройство. Есть еще вариант попадать по DNS имени. 

нет не заходит, не по ip не по адресу http://espws.local 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
15 минут назад, IvAn сказал:

Кроме прошивки, данные заливали?

Заливал вот это ESP8266_WS_V2.0_iT4IT.CLUB вместе с data.

Может ещё что-то надо.

Я года полтора назад, уже собирал эту станцию, потом отложил, сейчас залил в ESP8266 без очистки  флеш, он меня на веб страницу не пускал, пароль забыл.

Прошил с очисткой флеш и всё. но у меня роутер 192.168.0.50, а второй 192.168.1.1. может в этом дело?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

При "первом" запуске, мы должны увидеть точку доступа  - нашу метеостанцию. Она имеет IP 192.168.4.1, маску 255.255.255.0. При попытке к ней подключиться по Wifi, запрашивает логин/пароль (admin/admin) - этот момент у Вас получется?

 

А, еще момент - по UART можно видеть некоторую отладочную информацию - у Вас видно что метеостанция делает при запусках?

Изменено пользователем U-M

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
12 часов назад, U-M сказал:

При "первом" запуске, мы должны увидеть точку доступа  - нашу метеостанцию. Она имеет IP 192.168.4.1, маску 255.255.255.0. При попытке к ней подключиться по Wifi, запрашивает логин/пароль (admin/admin) - этот момент у Вас получется?

 

А, еще момент - по UART можно видеть некоторую отладочную информацию - у Вас видно что метеостанция делает при запусках?

Все получилось, как-то само собой, ещё раз прошился и всё заработало.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всех с праздником.

Подскажите, как добавить в интерфейс отображение датчика освещенности, или у кого есть первая прошивка, там он был.

01.png

02.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Добрый день. Помогите пожалуйста подключиться по mqtt. Брокер clusterfly.ru. Порт в скетче поменял на 9991. На андроиде установлен iot MQTT panel, подписка на на

топик: user_xx/espws/light. Но в приложение ничего не приходит. Пробовал с прошивками от WIFI iot- там  все приходит. Куда копать, что делать, уже голову сломал:(

Скриншот .jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доброго времени суток!

нужна помощь чайнику в переводе формата отправки данных с GET на POST JSON данной метеостанции

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

всем привет. при компиляции выдает ошибку:

'ummHeapInfo' was not declared in this scope

скачал библу mm_malloc.h - не помогло,где взять корректный вариант библиотеки? спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
07.09.2022 в 12:31, XLin сказал:

всем привет. при компиляции выдает ошибку:

'ummHeapInfo' was not declared in this scope

скачал библу mm_malloc.h - не помогло,где взять корректный вариант библиотеки? спасибо

не актуально

как добавить AHT10?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пожалуйста, войдите для комментирования

Вы сможете оставить комментарий после входа



Войти сейчас

  • Похожие публикации

    • Автор: Kitsum
      Хотите помочь проекту или спонсировать новый?
      Yandex.Money PayPal.me Тема проекта
      Arduino IDE + Project + Libraries + tools: https://yadi.sk/d/jseefFB50NMhAg
    • Автор: Kitsum
      Просмотреть файл [esp8266] Библиотека CMD, реализует настройку микроконтроллера и управление вашей программой через терминал.
      Основная задача библиотеки, это прием пользовательских команд через UART интерфейс, их обработка и выполнение пользовательского кода, связанного с той или иной командой.
      Данная библиотека позволяет реализовать:
      Управление микроконтроллером Любую настройку, будь то WiFi, другие библиотеки или часть Вашей программы Вызывать Ваши задачи (функции) из терминала по команде и передавать им требуемые параметры Использовать контроллер в качестве шлюза между датчиками и программами на PC Внимание: любая команда, передаваемая в терминал обязана заканчиваться символом перевода строки "\n".
      Подключение библиотеки
      #include <cmd.h> Инициализация объекта, к которому мы будем обращаться для добавления команд. В качестве параметра объекту необходимо передать указатель на объект Serial или любой другой схожий по типу интерфейс.
      cmd command(&Serial); В функции Setup описываем какие команды требуется обрабатывать. Например, по команде "test" вызывать пользовательскую функцию с именем "myFunctionName". Имя пользовательской функции может быть абсолютно любым.
      void Setup() { Serial.begin(115200); command.add("test", myFunctionName); } Пользовательская функция будет вызываться каждый раз, когда по интерфейсу Serial поступит команда "test". Если команда будет передана с параметрами, то эти параметры будут переданы в качестве аргументов пользовательской функции.
      В функции loop должна находится команда вызова обработчика.
      void loop() { command.handleEvents(); } Пользовательская функция обязана соответствовать ряду требований:
      Не возвращать никакого результата (быть объявленной с типом void) Принимать в качестве первого аргумента переменную с типом byte в которой будет храниться число равное количеству переданных параметров Принимать в качестве второго параметра переменную с типом char** в которой будет храниться указатель на массив со всеми указателями (char*) на переданные параметры void myFunctionName(byte argc, char** argv) { /* ... */ } Функция всегда должна иметь такой вид, даже если не подразумевается, что ей будут передаваться какие-либо параметры.
      Чтобы перебрать все переданные параметры и вывести их в консоль, можно воспользоваться следующим примером
      void myFunctionName(byte argc, char** argv) { if (0 < argc) { for (uint8_t i = 0; i < argc; i++) { Serial.printf("%i. %s\n", i, argv[i]); } } } Пример вызова пользовательской функции без параметров и с ними
      # test No parameter was passed # test p1 p2 p3 p4 p5 0. p1 1. p2 2. p3 3. p4 4. p5 Помните, что параметры представлены в виде указателей и работать с ними нужно как с обычными переменными не получится т.к указатель содержит не значение переменной (переданный параметр), а указатель на ту область памяти микроконтроллера в которой это значение находится.
      Чтобы сравнить два значения, например, параметр под индексом 0 (идет первым в списке) с каким-либо значением в программе, воспользуйтесь функцией strcmp, которая возвращает целочисленное значение, указывающее на лексическое расхождение строк. Если строки равны, то возвращаемое значение равно 0.
      if (!strcmp(argv[0], "wifi")) { Serial.println(F("Первый аргумент WiFi")); } else { Serial.println(F("Первый аргумент НЕ WiFi!!!")); } Для копирования значения указателя в другую переменную с типом char можно воспользоваться функцией strcpy
      char myVar[20]; strcpy(myVar, argv[0]); if (myVar == "123456") { Serial.prinln(F("ok")); } Также можно обернуть указатель объектом String и получить весь функционал этого объекта, который будет содержать значение параметра
      String param1(argv[0]); // String param1 = argv[0]; Serial.printf("argv[0] length: %i\n", param1.length()); Serial.printf("argv[0] is integer?: %s\n", param1.toInt() ? "YES" : "NO"); if (param1 == "qwerty") { Serial.println(F("Hello QWERTY!")); } С библиотекой идут несколько примеров, в том числе и пример конфигурации WiFi в режиме STA.
      Автор Kitsum Добавлен 05.12.2018 Категория Библиотеки  
    • Автор: Kitsum
      Просмотреть файл [esp8266] Библиотека smartBlink, реализует умное управление штатным светодиодом, что позволяет добавить индикацию состояния вашей программы или микроконтроллера.
      Основная задача библиотеки, это добавление индикации состояния Вашей программы или микроконтроллера. Отображение состояния производится посредством светодиода. Что самое важное, работа библиотеки через прерывание, это позволяет ей поддерживать индикацию даже в то время, когда выполняется длительный код основной программы. Например, Вы можете использовать её для отображения в каком режиме сейчас работает WiFi микроконтроллера, STA или AP и т.д. Или ход выполнения какой-либо операции, например, передача данных на внешний сервер.
      Подключение библиотеки
      #include <smartBlink.h> Чтобы инициализировать управление светодиодом необходимо создать объект, через который мы буем задавать режимы работы индикации.
      smartBlink::smartBlink(byte gpio, bool on = LOW); Объекту необходимо передать два параметра, первый это номер порта, на котором находится светодиод, а второй это уровень логического сигнала, который заставит светодиод работать. Сигнал может быть низким (LOW) или высоким (HIGH), это зависит от схемотехники подключения светодиода.
      Например, штатный светодиод модуля ESP12, использующий GPIO2 (порт 2) можно объявить следующим образом.
      #define led2_pin 2 #define led2_on_signal LOW smartBlink led2(led2_pin, led2_on_signal); Теперь можно в основной программе использовать метод устанавливающий какой режим индикации использовать.
      smartBlink::setMode(mode_t mode); Например, зададим режим светодиода led2 в котором светодиод будет давать одну короткую вспышку раз в секунду.
      led2.setMode(smartBlink::mode_flash1); Режимов работы может быть несколько.
      led2.setMode(smartBlink::mode_off); led2.setMode(smartBlink::mode_flash1); led2.setMode(smartBlink::mode_flash2); led2.setMode(smartBlink::mode_flash3); led2.setMode(smartBlink::mode_flash4); led2.setMode(smartBlink::mode_burn); led2.setMode(smartBlink::mode_inhalf); Чтобы вернуть предыдущий режим индикации для ранее объявленного светодиода led2 используйте следующий метод
      led2.previous(); Благодаря работе библиотеки через прерывания по таймеру, индикация будет работать даже в тех случаях, когда выполняется долгий код.
      С библиотекой идут несколько примеров.
      Автор Kitsum Добавлен 10.12.2018 Категория Библиотеки  
    • Автор: Kitsum
      Основная задача библиотеки, это добавление индикации состояния Вашей программы или микроконтроллера. Отображение состояния производится посредством светодиода. Что самое важное, работа библиотеки через прерывание, это позволяет ей поддерживать индикацию даже в то время, когда выполняется длительный код основной программы. Например, Вы можете использовать её для отображения в каком режиме сейчас работает WiFi микроконтроллера, STA или AP и т.д. Или ход выполнения какой-либо операции, например, передача данных на внешний сервер.
      Подключение библиотеки
      #include <smartBlink.h> Чтобы инициализировать управление светодиодом необходимо создать объект, через который мы буем задавать режимы работы индикации.
      smartBlink::smartBlink(byte gpio, bool on = LOW); Объекту необходимо передать два параметра, первый это номер порта, на котором находится светодиод, а второй это уровень логического сигнала, который заставит светодиод работать. Сигнал может быть низким (LOW) или высоким (HIGH), это зависит от схемотехники подключения светодиода.
      Например, штатный светодиод модуля ESP12, использующий GPIO2 (порт 2) можно объявить следующим образом.
      #define led2_pin 2 #define led2_on_signal LOW smartBlink led2(led2_pin, led2_on_signal); Теперь можно в основной программе использовать метод устанавливающий какой режим индикации использовать.
      smartBlink::setMode(mode_t mode); Например, зададим режим светодиода led2 в котором светодиод будет давать одну короткую вспышку раз в секунду.
      led2.setMode(smartBlink::mode_flash1); Режимов работы может быть несколько.
      led2.setMode(smartBlink::mode_off); led2.setMode(smartBlink::mode_flash1); led2.setMode(smartBlink::mode_flash2); led2.setMode(smartBlink::mode_flash3); led2.setMode(smartBlink::mode_flash4); led2.setMode(smartBlink::mode_burn); led2.setMode(smartBlink::mode_inhalf); Чтобы вернуть предыдущий режим индикации для ранее объявленного светодиода led2 используйте следующий метод
      led2.previous(); Благодаря работе библиотеки через прерывания по таймеру, индикация будет работать даже в тех случаях, когда выполняется долгий код.
      С библиотекой идут несколько примеров.
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу.

×
×
  • Создать...