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

[esp8266] Библиотека CMD, реализует настройку микроконтроллера и управление вашей программой через терминал. 1.0

   (0 отзывов)

4 скриншота

Описание файла

Основная задача библиотеки, это прием пользовательских команд через 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.




Отзывы пользователей

Создайте аккаунт или войдите в него для публикации отзыва

Вы должны быть зарегистрированным пользователем для публикации отзыва

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

Нет отзывов для отображения.

×