Jump to content
iT4iT.CLUB

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

   (0 reviews)

4 Screenshots

About This File

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




User Feedback

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest

  • This will not be shown to other users.
  • Add a review...

    ×   Pasted as rich text.   Paste as plain text instead

      Only 75 emoji are allowed.

    ×   Your link has been automatically embedded.   Display as a link instead

    ×   Your previous content has been restored.   Clear editor

    ×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...