IoT

ESP32: IoT устройство, работающее в локальной сети

В статье показан пример разработки подключенной к локальной сети простой умной розетки. Приведенные примеры функций помогут быстрее начать разработку более сложного устройства
1117
В избранное

В статье показан пример разработки подключенной к локальной сети простой умной розетки. Приведенные примеры функций помогут быстрее начать разработку более сложного устройства

Допустим, вы создаете умную розетку и хотите включать и выключать ее. Для этого мы запустим на контроллере HTTP сервер и будем управлять контроллером, используя запросы по адресу/ power  на устройстве:

  • Запрос HTTP GET на этот URI вернет текущее состояние выхода.
  • Запрос HTTP POST на этот URI обновит состояние выхода.

Следующий код определяет обработчики запросов для нужного URI:

httpd_uri_t power_get = {
       .uri = "/power",
       .method = HTTP_GET,
       .handler = power_get_handler
}; httpd_uri_t power_post = {
       .uri = "/power",
       .method = HTTP_POST,
       .handler = power_post_handler
};

Функции Power_get_handler() и power_post_handler() будут вызываться при поступлении HTTP GET или HTTP POST запросов на контроллер.

Теперь нужно запустить веб-сервер и зарегистрировать эти URI на нем:

httpd_handle_t server = NULL;
// Запуск httpd server 
httpd_config_t config = HTTPD_DEFAULT_CONFIG();      
ESP_LOGI(TAG, "Starting server on port: '%d'", config.server_port);
if (httpd_start(&server, &config) == ESP_OK) {
        // Регистрация обработчикоов
        httpd_register_uri_handler(server, &power_get);
        httpd_register_uri_handler(server, &power_post);
}

Собственно  функции power_get_handler() и power_post_handler() могут быть реализованы следующим образом (приведен не весь код, а только та его часть, которая касается обработки веб запросов):

esp_err_t power_get_handler(httpd_req_t *req)
{
          char resp_str[100];
          snprintf(resp_str, sizeof(resp_str), "{\"state\": %s}",
                 driver_get_output_state() ? "true" : "false"); 
         httpd_resp_send(req, resp_str, strlen(resp_str));   
       return ESP_OK;
}
#define RESP_SUCCESS   "{\"status\": \"success\"}"
#define RESP_FAIL      "{\"status\": \"fail\"}"
esp_err_t power_post_handler(httpd_req_t *req)
{
          char buffer[100];
          char *resp_str = RESP_SUCCESS;
          int remaining = req->content_len;
          while (remaining > 0) {
                  /* Чтение данных из запроса */
                  if ((ret = httpd_req_recv(req, buffer,                       
                         MIN(remaining, sizeof(buffer)))) < 0) {
                         return ESP_FAIL;
                  }
                  remaining -= ret;
          }          /* Разбор запроса */
          target_state = my_parse_user_request(buffer);
          if (target_state < 0) {
                  resp_str = RESP_FAIL;
          } else {
                  /* Изменение выхода */
                  driver_set_output_state(target_state);
          }          /* Возврат статуса */       
          httpd_resp_send(req, resp_str, strlen(resp_str));
          return ESP_OK;
}

В приведенном выше примере функция power_get_handler() просто получает текущее состояние вывода из драйвера и возвращает его в ответе на запрос HTTP GET.

Функция  power_post_handler() получает запрос пользователя и изменяет состояние выхода устройства в соответствии с этим запросом.

Использование API

Теперь можно использовать команды Curl для проверки работы контроллера:

$ curl http://192.168.1.113/power
 {"state": true}
$ curl -d '{"state": false}' http://192.168.1.113/power
 {"status": "success"}

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

Безопасность

Использование созданного выше API абсолютно не защищено от любых внешних атак. Конечно, если вы находитесь внутри безопасной сети Wi-Fi, не имеющей подключения к интернету, этим можно пренебречь, но в большинстве реальных задач нужно будет использовать совсем другой уровень безопасности, и даже использование HTTP сервера, скорее всего, будет недопустимо. Но это тема для другой статьи.

Статья основана на проекте ESP-Jumpstart  https://docs.espressif.com/projects/esp-jumpstart

Источник: https://medium.com

Производитель: Espressif Systems (shanghai) Pte. Ltd.
Наименование
Производитель
Описание Корпус/
Изображение
Цена, руб. Наличие
ESP32-WROOM-32 [4MB]
ESP32-WROOM-32 [4MB]
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2292549 ИНФО PDF DT
Доступно: 104 шт. 398,00
Базовый модуль, использующий высокопроизводительную микросхему ESP32-D0WDQ6 с двухъядерным процессором и максимальной рабочей частотой до 240 МГц. Микросхема ESP32-D0WDQ6 работает под управлением freeRTOS и использует стек LwIP, ESP32-D0WDQ6, 32Mbits SPI flash, UART Mode
ESP32-WROOM-32 [4MB] 398,00 от 10 шт. 341,00 от 22 шт. 307,00 от 46 шт. 284,00 от 121 шт. 270,00
96 шт.
(на складе)
8 шт.
(под заказ)
ESP8285
ESP8285
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2584270 ИНФО PDF
Доступно: 2094 шт. 166,00
Система-на-кристалле (SoC) на базе 32-битного процессора Tensilica L106 160 МГц
ESP8285 166,00 от 23 шт. 142,00 от 51 шт. 128,00 от 110 шт. 119,00 от 290 шт. 113,00
43 шт.
(на складе)
2051 шт.
(под заказ)
ESP32-WROVER-I [4MB]
ESP32-WROVER-I [4MB]
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2610278 ИНФО PDF DT
Доступно: 31 шт. 609,00
ESP32-WROVER-I [4MB] - SMD Module ESP32-WROVER, ESP32-D0WDQ6, 1.8V 64Mbits PSRAM, 32Mbits SPI flash, IPEX Antenna connector
ESP32-WROVER-I [4MB] 609,00 от 7 шт. 522,00 от 14 шт. 470,00 от 30 шт. 435,00 от 79 шт. 414,00
31 шт.
(на складе)
ESP32-WROVER [4MB]
ESP32-WROVER [4MB]
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2738673 ИНФО PDF DT
Доступно: 74 шт. 494,00
ESP32-WROVER - мощный высокопроизводительный модуль общего назначения со встроенным микроконтроллерным ядром и с поддержкой стандартов связи Wi-Fi+BT+BLE, предназначенный для широкого ряда приложений с экономичным энергопотреблением.
ESP32-WROVER [4MB] 494,00 от 8 шт. 424,00 от 18 шт. 381,00 от 37 шт. 353,00 от 98 шт. 336,00
68 шт.
(на складе)
6 шт.
(под заказ)
ESP32-S0WD
ESP32-S0WD
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2739124 ИНФО PDF DT
Доступно: 1415 шт. 367,00
Система-на-кристалле (SoC) на базе 32-битного процессора Xtensa® 160 МГц 200 DMIPS
ESP32-S0WD 367,00 от 11 шт. 314,00 от 24 шт. 283,00 от 50 шт. 262,00 от 131 шт. 249,00
97 шт.
(на складе)
1318 шт.
(под заказ)
ESP32-D0WD
ESP32-D0WD
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2739127 ИНФО PDF DT
Доступно: 1250 шт. 276,00
Система-на-кристалле (SoC) на базе вухъядерного 32-битного процессора Xtensa® 240 МГц 600 DMIPS
ESP32-D0WD 276,00 от 14 шт. 236,00 от 31 шт. 213,00 от 67 шт. 197,00 от 175 шт. 187,00
52 шт.
(на складе)
1198 шт.
(под заказ)
ESP32-WROOM-32U [4MB]
ESP32-WROOM-32U [4MB]
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2739131 ИНФО PDF DT
Доступно: 1126 шт. 491,00
SMD Module ESP32-WROOM-32U, ESP32-D0WD, 32Mbits SPI flash, UART mode, U.FL antenna connector
ESP32-WROOM-32U [4MB] 491,00 от 8 шт. 421,00 от 18 шт. 379,00 от 38 шт. 351,00 от 98 шт. 333,00
142 шт.
(на складе)
984 шт.
(под заказ)
ESP32-SOLO-1
ESP32-SOLO-1
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2739132 ИНФО PDF DT
Доступно: 1376 шт. 474,00
Wi-Fi+BT+BLE-модуль, построенный на базе одноядерной микросхемы ESP32-S0WD. Как отмечалось выше, ESP32-S0WD – младший представитель семейства ESP32. Несмотря на это, ESP32-SOLO-1 может применяться в широком спектре приложений – от малопотребляющих датчиков (наиболее оптимальный вариант), до приложений с беспроводной передачей звука, ESP32-S0WD, Single Core, 32Mbits SPI flash, UART Mode
ESP32-SOLO-1 474,00 от 9 шт. 407,00 от 18 шт. 366,00 от 39 шт. 339,00 от 102 шт. 322,00
78 шт.
(на складе)
1298 шт.
(под заказ)
ESP32-PICO-D4
ESP32-PICO-D4
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2739133 ИНФО PDF DT
Доступно: 2027 шт. 546,00
SIP module ESP32 with 4MByte Flash, Dual Core MCU, Wi-Fi & Bluetooth Combo, LGA48-pin, 7*7mm
ESP32-PICO-D4 546,00 от 7 шт. 468,00 от 16 шт. 421,00 от 34 шт. 390,00 от 89 шт. 370,00
10 шт.
(на складе)
2017 шт.
(под заказ)
ESP-WROOM-02U [2MB]
ESP-WROOM-02U [2MB]
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2739149 ИНФО PDF DT
Доступно: 2063 шт. 272,00
модуль по своим характеристикам идентичен ESP-WROOM-02D, но вместо печатной антенны FL-разъем и габариты модуля более компактные – 18?14,3?3,20 мм., ESP8266EX, 16Mbits SPI flash, UART Mode, U.FL antenna connector
ESP-WROOM-02U [2MB] 272,00 от 14 шт. 233,00 от 32 шт. 210,00 от 68 шт. 194,00 от 200 шт. 184,00
67 шт.
(на складе)
1996 шт.
(под заказ)
ESP-WROOM-S2
ESP-WROOM-S2
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2739150 ИНФО PDF
Доступно: 398 шт. 376,00
модуль с печатной антенной, который может выступать в роли ведомого SDIO/SPI с рабочей частотой SPI до 8 Мбит/с. Кроме микросхемы ESP8266, на борту у модуля присутствует SPI-Flash объемом 2 Мбайт. Габариты ESP-WROOM-S2 составляют 16x23x2,80 мм.
ESP-WROOM-S2 376,00 от 11 шт. 322,00 от 23 шт. 290,00 от 49 шт. 268,00 от 128 шт. 255,00
98 шт.
(на складе)
300 шт.
(под заказ)

Сравнение позиций

  • ()