-
Similar Content
-
By 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 Категория Библиотеки
-
By Kitsum
Основная задача библиотеки, это прием пользовательских команд через 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.
-
By Kitsum
Данную тему не поднимал только ленивый. По существу все просто и очень подробно описано в первоисточнике https://github.com/esp8266/Arduino
Скачиваем Arduino IDE с официального сайта Запускаем Arduino и открываем окно настроек (Файл -> Настройки) В поле "Дополнительные ссылки для Менеджера плат:" указываем адрес http://arduino.esp8266.com/stable/package_esp8266com_index.json Открываем менеджер плат (Инструменты -> Список плат -> Менеджер плат) и в качестве фильтра поиска указываем "esp8266". И жмем кнопку установить. В списке поддерживаемых плат появится ESP8266 в различных вариациях. Все необходимые файлы для поддержки работы с этим микроконтроллером и дополнительные библиотеки с примерами их работы будут закачаны в каталог %APPDATA%\Arduino15\
Подключение ESP8266 для загрузки скетча
В сети множество схем для подключения всех разновидностей ESP, от ESP-01 до ESP-12, но нужно понимать, что как бы они не назывались и не выглядели, собраны они на одном микроконтроллере ESP8266EX, следовательно, подключаются они все одинаково за исключением того момента, что если у ESP не выведена та или иная нога (например, ESP-01), то и искать, и подключать её не требуется. Достаточно знать, как подключить ESP-12 и Вы сможете завести и прошить любой тип ESP.
Предлагаю использовать схему подключения с автоматическим сбросом и переводом микроконтроллера в режим загрузки программы. Главное, что понадобится - USB-TTL конвертер с выведенными ногами DTR и RTS. Я использовал конвертер на базе FT232RL.
Если вы собираетесь использовать deepSleep(), то необходимо обязательно подтянуть GPIO-16 к RESET через резистор 470 Ом.
И так, что тут к чему
RTS - Запрос на передачу (Request to Send) DTR - Готовность приемника данных (Data Terminal Ready) Во время загрузки скетча транзистор T1 откроется и подтянет GPIO-0 к земле, в это время конденсатор C1 перезарядится и тем самым нога RESET кратковременно окажется подтянута к земле, что приведет к перезагрузке микроконтроллера и загрузке программы. Также благодаря конденсатору C1 мы будем перезапускать микроконтроллер каждый раз, при открытии монитора порта (как при использовании обычной Arduino UNO и т.п).
Подведем итоги
Лично мое мнение, что на базе ESP8266 стоит брать только ESP-07 или ESP-12 с переходной платой под отверстия 2,54мм, чтобы можно было установить модуль в макетную плату. Таким образом, за туже цену мы получаем микроконтроллер с максимальным количеством выведенных для нас ног и возможностью быстрого монтажа для экспериментов с разными поделками.
-
-
Recently Browsing 0 members
No registered users viewing this page.