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

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

13 часов назад, post125 сказал:

Как Вы уже рекомендовали, хочу подключить Ардуину как slave к ESP по I2C. Нашел библиотеку iarduino_I2C_connect для этих целей. Думаю, должно получиться. А вот как потом эти данные переварить в ESP и отправить в локальный web-сервер и (или) народный монитор? Подскажите, пожалуйста, куда копать, а то несколько дней никак не могу сообразить, с чего начать.

Как мне кажется, эта библиотека не подойдет, но проверить конечно же стоит. Я бы копал в сторону стандартной библиотеки Wire.h как для AVR контроллеров (Atmega ...) так и для ESP, ищите их в вашей Arduino IDE. Также надо учитывать, что для этих контроллеров библиотеки разные. Например, ESP может работать только в качестве Master устройства, что в принципе и требуется, а вот AVR контроллеры могут работать в Master/Slave режиме. Это можно подсмотреть в заголовочных файлах (.h) их библиотек.

Также для начала будут очень полезны эти материалы:

Также помните о подтягивающих резисторах на SDA и SCL т.к они не отражены на схемах. Они понадобятся если Вы соединяете два контроллера между собой, но если на шине установлен какой ни-ть Китайский датчик, то очень велика вероятность, что резисторы уже есть. И еще один важный момент, это согласование уровней сигнала т.к ESP работает от 3.3V, а для ATmega стандартом является 5V, но они могут поддерживать и 3.3V. В любом случае, Вы должны гарантировать, что рассогласования уровней сигнала не будет. Лично мне нравится вариант, когда оба контроллера имеют питание 3.3V, так можно питать Slave от Master и не ставить плату согласования, но это зависит от конкретных задач, этот вариант не всегда приемлем.

После того, как Вы научитесь передавать данные между контроллерами, копайте в сторону файла sensors.h в проекте. Вам нужен метод add, а точнее разобраться в параметрах, передаваемых ему. Один из параметров указывает какую функцию нужно вызвать чтобы получить данные от датчика, вот в этой функции и стоит описывать код запроса данных от Slave и дальнейший их разбор.

Описание для интерфейса

knob_t *sensor_knob_cfg = new knob_t(0, 100, "1", "Что показывает", "Ед. измер.");

Функция сбора данных

float getSensorData() {
  float value = 0;
  /* Тут описываем работу с Slave по i2c, результат записываем в value */
  return value;
}

Добавление датчика

sensors.add(sensor_knob_cfg, device::out, "sensor_uid", getSensorData);

Это очень грубый пример одного из вариантов. В проекте много примеров реализации и есть некоторое количество комментариев, не стесняйтесь изучать содержимое файлов проекта, таких как sensors.h. Очень велика вероятность, что после изучения их содержимого у Вас появится свое видение как это должно быть реализовано, и это очень хорошо.

  • Like 1

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


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

Как мне кажется, эта библиотека не подойдет, но проверить конечно же стоит.

Спасибо, буду пробовать. К ESP будет подключен только один датчик BME280 по i2c для давления, темп и влаж в помещении. Всё остальное через ардуину (скорее Нано) с приемнком NRF. Каждый передатчик NRF может за раз передать массив из 8 floatов, из них 1 уйдёт на напряжение батареи. Поскольку каждая NRF передает данные в своей трубе, то идентификатор передавать не надо. 7 floatов остается на датчики. И таких NRF можно подключить 5шт. (не строя сеть для экономии батарей). Полагаю, мне этого хватит. 

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


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

Добрый вечер! Есть ли какие либо ограничения по используемым символам в SSID и пароле. Не могу понять , почему к одной сети подключается, а к другой нет. И то сохраняет настройки сети в вебинтерфейсе, то нет.(не ругается, пишет, что сохранено, но при перезагрузке контроллера или страницы остаются старые значения)

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


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

Есть ли какие либо ограничения по используемым символам в SSID и пароле.

Заменил пароль на буквенно-цифровой, стало сохраняться.

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


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

Доброе время суток.

26.02.2019 в 22:33, post125 сказал:

Есть ли какие либо ограничения по используемым символам в SSID и пароле.

Ограничения есть только в web интерфейсе проекта, в файле index.htm

Для проверки SSID применяется следующее регулярное выражение, соответствующее латинским буквам от A до Z без учета регистра, всем цифрам и дополнительным символам "_. -". Общая длинна от 3 до 30 символов включительно.

function checkSSID(ssid) { return ssid.match(/^[a-z0-9_. -]{3,30}$/i); }

Для пароля все еще проще, это от 5 до 63 любых символов

function checkPassw(passw) { return passw.match(/^.{5,63}$/); }
26.02.2019 в 22:33, post125 сказал:

не ругается, пишет, что сохранено, но при перезагрузке контроллера или страницы остаются старые значения

Это говорит о том, что Вы проходите проверку на стороне web интерфейса ESP8266. Следовательно, причина кроется на стороне микроконтроллера.

В первую очередь будет вызван один из методов web сервера, отвечающий за обработку пользовательских запросов.

Файл webserver.h

Скрытый текст

void http::api_settings() {
  this->sendServerHeaders();
  this->sendHeader("Cache-Control", "no-store, no-cache");
  if (!this->security()) this->send(403);
  else if (this->authorized()) {
    if (this->hasArg(F("save"))) conf.write(this->arg(F("save")));
    this->send(200, headerJson, conf.showSecureConfig());
  } else this->send(401);
}

По сути тут будет проведена проверка на авторизацию пользователя и передача новых параметров вашему объекту конфигурации через вызов его метода config::write(String apiSave)

Файл config.h

Скрытый текст

bool config::write(String apiSave) {
  if (this->parameterList) {
    DynamicJsonBuffer jsonBuffer;
    JsonObject& json = jsonBuffer.parseObject(apiSave);
    if (json.success()) {
      configParameter *parameter = this->parameterList;
      while (parameter) {
        if (json.containsKey(parameter->name)) this->param(parameter->name, json[parameter->name]);
        parameter = parameter->next;
      } return this->write();
    }
  } return false;
}

Метод перебирает все доступные ему параметры, находящиеся в оперативной памяти и перезаписывает значения для тех из них чьи имена упоминались в списке, переданном web интерфейсом. Далее записывает данные в конфигурационный файл находящийся во Flash памяти.

27.02.2019 в 11:30, post125 сказал:

Заменил пароль на буквенно-цифровой, стало сохраняться.

Могу предположить, что причина кроется в обработке некоторых символов библиотекой ArduinoJson в методе config::write(String apiSave), что приводит в отказу от записи конфигурации.

json.success()

Попробуйте в файле webserver.h добавить код ответа 500 для подобного события в метод http::api_settings(), приведите его к следующему виду

void http::api_settings() {
  this->sendServerHeaders();
  this->sendHeader("Cache-Control", "no-store, no-cache");
  if (!this->security()) this->send(403);
  else if (this->authorized()) {
    if (this->hasArg(F("save"))) {
      if(!conf.write(this->arg(F("save")))) this->send(500);      
      else this->send(200, headerJson, conf.showSecureConfig());
    } else this->send(200, headerJson, conf.showSecureConfig());
  } else this->send(401);
}

В теории, если ошибка происходит на уровне json формата, то она должна появиться с сообщением

500 Internal Server Error

Если причина действительно в этом и Вам удастся выловить символ, то дайте мне знать какой он.

  • Like 1

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


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

500 Internal Server Error

Благодарю за ответ! Старый пароль записан, завтра проверю и найду что не понравилось ESPке.

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


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

Если причина действительно в этом и Вам удастся выловить символ, то дайте мне знать какой он.

не стал откладывать на завтра, сделал сегодня. ESPке не понравиля символ & , ответила ошибкой 500

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


Ссылка на сообщение
Поделиться на других сайтах
26.02.2019 в 09:29, Kitsum сказал:

После того, как Вы научитесь передавать данные между контроллерами

Добрый день!

Соединил ESP(master) c ProMini(c NRF)(slave). ProMini принимает данные с датчика через NRF и отдаёт ESP. Но возникла проблема в том, что Wire.h может передавать данные как byte или char, а через NRF я могу иередать массив из 8-ми float (либо из 16-ти int). Соответственно, ESP в serial выдаёт не то, что хотелось бы видеть. Можете подсказать, как разобрать массив из floatов на байты и после передачи обратно собрать из байтов во float? Либо, может быть, возможен другой путь?

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


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

Доброе время суток.

@post125 В первую очередь нужно понять, что I2C и NRF это две разные транспортные линии, не рассматривайте их как единую среду передачи данных от беспроводных устройств к ESP, так ничего не выйдет.

Со стороны ProMini необходимо организовать систему получения данных по беспроводному каналу их обработку и хранение в оперативной памяти. Допустим Вы получаете данные с 5-и беспроводных устройств, значит ProMini должна держать в памяти 5 разных значений с этими данными, пусть это будет float или, что угодно. Далее ESP, по мере надобности, запрашивает у ProMini данные по конкретному устройству, одному из 5-и. В ответ ProMini передает заранее преобразованное значение float с одного из датчиков в массив из 4-х byte или char и по очереди передает все элементы массива ESP. Далее проводите обратную операцию и получаете значение float. Главное помнить простую вещь, что float имеет размер в 4 byte, обращайтесь к каждому из них как к элементу массива и передавайте значение по одному byte.

Таким образом получается, что ProMini является агрегатором данных со всех беспроводных устройств, работающих через NRF и передающих мастеру данные в виде массива из 4-х byte для каждого float.

  • Like 1

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


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

Таким образом получается, что ProMini является агрегатором данных со всех беспроводных устройств, работающих через NRF и передающих мастеру данные в виде массива из 4-х byte для каждого float.

Добрый день! Благодарю за ответ. У меня так и получается, что та ProMini , которая рядом с ESP, получает данные от пяти удаленные ProMini, причем каждая удаленная ProMini передает данные массивом от 3 до 8 параметров. Эти данные принимаются и висят в памяти этой принимающей ProMini. А вот забрать ESPшкой я не понимаю как. Подскажите, пожалуйста, где почитать как разобрать данные float (либо int) на байты и обратно. Ничего вразумительного в сети не нашел. Застрял на этой передаче данных по I2C и не вижу просвета... Заранее благодарен.

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


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

@post125 попробуйте такой вариант разбора float на массив byte

float f1 = -3.14;
float f2 = 0;
byte  b1[sizeof(float)];

void setup() {
  Serial.begin(115200);
  Serial.println();
  *(float*)b1 = f1;
  Serial.printf("f1: %f\r\nf2: %f\r\n", f1, f2);
  Serial.printf("0x%02X\r\n0x%02X\r\n0x%02X\r\n0x%02X\r\n", b1[0], b1[1], b1[2], b1[3]);
  f2 = *(float*)b1;  
  Serial.printf("f1: %f\r\nf2: %f\r\n", f1, f2);
}

void loop() {
}

Передавайте этот массив и собирайте его в обратном порядке на стороне ESP.

  • Like 1

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


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

попробуйте такой вариант разбора float на массив byte

Благодарю за ответ, буду пробовать. А если фигурирует seral, надо Мини к ESP по uartу подключать?

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


Ссылка на сообщение
Поделиться на других сайтах
10.03.2019 в 23:08, Kitsum сказал:

попробуйте такой вариант разбора float на массив byte

что-то не хочет компилироваться:

float2byte:9:3: error: stray '\357' in program
   Serial.printf ("f1: %f\r\nf2: %f\r\n", f1, f2);
   ^
float2byte:9:3: error: stray '\273' in program
float2byte:9:3: error: stray '\277' in program
float2byte:9:3: error: stray '\357' in program
float2byte:9:3: error: stray '\273' in program
float2byte:9:3: error: stray '\277' in program
exit status 1
stray '\357' in program

 

 

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


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

Благодарю за ответ, буду пробовать. А если фигурирует seral, надо Мини к ESP по uartу подключать?

Что Вы имеете в виду под фигурирует, связь между двумя контроллерами по Serial? Если да, то оба контроллера подключаются друг к другу через порты RX и TX с общей землей (GND). RX подключается к TX не зависимо от того с какой стороны смотреть. Также необходимо помнить об согласовании уровней сигналов. В программе работаете с контроллерами через Serial, различия будут лишь в том, что в ESP буфер с данными формируется автоматически, а в ATmega данные получаете по одному байту и буфер нужной длинны необходимо формировать самому.

11.03.2019 в 23:57, post125 сказал:

что-то не хочет компилироваться:

Дело в том, что предоставленный пример написан под ESP 8266/32 и для них в объекте Serial есть метод printf, а вот под ATmega данного метода нет, но есть одноименная функция, приводящая к аналогичному результату. Так что для ATmega строки такого вида

Serial.printf ("f1: %f\r\nf2: %f\r\n", f1, f2);

приведите к такому

printf ("f1: %f\r\nf2: %f\r\n", f1, f2);

и все должно заработать.

Вообще все строки с Serial можно удалить, я добавил их для вывода отладочной информации дабы можно было отследить как выглядит число, записанное в float при разборе на массив из 4-х byte элементов и дальнейший обратный процесс с записью значение в другую переменную.

PS: прошу прощение за задержку с ответами.

  • Like 1

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


Ссылка на сообщение
Поделиться на других сайтах
10.03.2019 в 23:08, Kitsum сказал:

попробуйте такой вариант разбора float на массив byte

Благодарю за ответ! Буду пробовать. Прошу прощения за дурацкие вопросы.

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


Ссылка на сообщение
Поделиться на других сайтах
20.02.2019 в 09:48, Kitsum сказал:

Доброе время суток.

Электронных компонентов для проверки у меня нет, но я постараюсь помочь, опираясь на код библиотеки. Все фактические проверки Вам придется произвести самостоятельно. Я буду использовать эту библиотеку https://github.com/bogde/HX711, Вы можете использовать любую другую, просто действуйте по аналогии.

В первую очередь необходимо определиться с используемыми портами микроконтроллера. Предлагаю задействовать 12 и 13 порты, но т.к они уже были использованы ранее, то в основном файле проекта необходимо закомментировать вызов функции gpio_12_13(). Я выбрал эти порты для примера, возможно Вы задействуете какие ни-ть другие.


/* Инициализация GPIO для управления внешней нагрузкой */
//gpio_12_13(); // Простое превышение температуры или влажности (выставляется в WEB интерфейсе)

Теперь мы уверенны, что порты не заняты и можем переходить к реализации весов.

Я предположу, что для описания сенсоров Вы используете один из пользовательских файлов имена которых начинаются с users_.

В начале файла подключаем выбранную библиотеку.


#include "HX711.h"

Объявляем объект с помощью которого будем работать с весами. При объявлении мы передаем в качестве параметров номера задействованных портов.


HX711 scale(12, 13);

Создадим описание для системы визуализации (плагин Knob).


knob_t *W = new knob_t(-100, 10000, "1", "Вес", "Гр");

Мне не известно какой датчик Вы будите использовать, поэтому значения я выбрал на свое усмотрение. Минимальный вес равен -100 грамм, максимальный 10000 грамм, шаг шкалы 1, описание сенсора "Вес", ну и "Гр" в качестве единиц измерения. Минимальный вес в -100 грамм взят не случайно, так Вам будет проще найти калибровочный коэффициент.

Теперь модифицируем функцию sensors_config() и объявим новый сенсор.


/* Добавление датчиков в систему */
void sensors_config() {
  /* Тут описан код других датчиков */
  
  scale.set_scale(3); // калибровочный коэффициент
  scale.tare(); // тарирование

  sensors.add(W, device::in, "in_weight", [&](){
    return scale.get_units() * 0.035274; // перевод в граммы
  });
}

В теории, этого должно быть достаточно.

Обратите внимание на калибровочный коэффициент, я указал значение 3, у Вас это будет свое значение уникальное для Вашего датчика.


scale.set_scale(3);

Также обратите внимание, что при запуске микроконтроллера происходит тарирование весов.


scale.tare();

Отпишитесь о результатах.

Добрый день! 

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

 температуре, влажности и давлению. подставляется содержимое mqtt_path дважды

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


Ссылка на сообщение
Поделиться на других сайтах
26.02.2019 в 09:29, Kitsum сказал:

Я бы копал в сторону стандартной библиотеки Wire.h

Добрый день! Благодарю за помощь. Ваши магические строки "*(float*)b1 = f1;" и "f2 = *(float*)b1; "  решили проблему передачи данных с ардуино на ESP. Долго мучался, как оказалось, с библиотекой ESP v2.5.0 - она категорически не хотела принимать массив из 8-и и более бит. Замена на более старую версию 2.4.2 решила проблему. В ходе опытов остановился на том, что к ESP как slave будут подключаться несколько ProMini каждая со своей NRFкой, т.к. в этом случае не надо сортировать и раскладывать данные из разных труб NRF в большой масив (>32байт) , потом его делить и передавать на ESP.

Начинаю пробовать добавлять датчики в скетч Метеостанции.

  • Like 1

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


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

Друзья дайте пожалуйста прошивку с библиотеками. Я что-то не нашел. Функционал очень заинтересовал.

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


Ссылка на сообщение
Поделиться на других сайтах
12.08.2017 в 13:14, alexd6969 сказал:

Спасибо автору за проделанную работу. Отличная метеостанция, но не хватает измерения скорости ветра. Может подумать над реализацией....?

533,64 руб.  11%СКИДКА | MPXV7002DP скорости полета Сенсор коммутационная плата преобразователя APM2.5 APM2.52 дифференциальный Давление Сенсор игровые джойстики
https://s.click.aliexpress.com/e/c9kuxyBu

14 часов назад, Convix_Maximus сказал:

Друзья дайте пожалуйста прошивку с библиотеками. Я что-то не нашел. Функционал очень заинтересовал.

Так там вроде все в архиве есть , в коде посмотри китсум обычно коментить ссылки

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


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

Доброе время суток.

@Convix_Maximus Из обязательных библиотек только две:

  1. https://github.com/knolleary/pubsubclient
  2. https://github.com/bblanchon/ArduinoJson/releases/tag/v5.13.2

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

Исходники проекта можно забрать тут https://it4it.club/files/file/2-meteostanciya-na-esp8266/

 

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


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

Доброе время суток.

@Convix_Maximus Из обязательных библиотек только две:

  1. https://github.com/knolleary/pubsubclient
  2. https://github.com/bblanchon/ArduinoJson/releases/tag/v5.13.2

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

Исходники проекта можно забрать тут https://it4it.club/files/file/2-meteostanciya-na-esp8266/

 

Спасибо большое. Вечером скачаю.

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


Ссылка на сообщение
Поделиться на других сайтах
26.02.2019 в 09:29, Kitsum сказал:

Добавление датчика

Добрый день! Подскажите, пожалуйста, куда лучше добавлять описания переменных и инициализацию wire в основной файл или в sensors.h? И надо ли  еще добавлять библтотеку wire.h  или достаточно, что она загружается в tools.h?

И еще не пойму куда добавлять

Функцию сбора данных

float getSensorData() {
  float value = 0;
  /* Тут описываем работу с Slave по i2c, результат записываем в value */
  return value;
}

и

Добавление датчика

sensors.add(sensor_knob_cfg, device::out, "sensor_uid", getSensorData);

 то ли в sensor.h, то ли в user_auto.h, то ли в user_bme280_2.h, либо создать новый файл с аналогичной структурой?

Изменено пользователем post125

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


Ссылка на сообщение
Поделиться на других сайтах
26.02.2019 в 09:29, Kitsum сказал:

Функция сбора данных

Если у меня данные с ProMini передаются на ESP массивом, может проще из памяти ESP брать весь массив, чем считывать отдельно каждую ячейку по i2c?

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


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

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

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



Войти сейчас

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

    • Автор: 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 пользователей

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

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