IoT

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

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

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

Допустим, вы создаете умную розетку и хотите включать и выключать ее. Для этого мы запустим на контроллере 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 RND DT
Доступно: 489 шт. 278,00
Базовый модуль, использующий высокопроизводительную микросхему ESP32-D0WDQ6 с двухъядерным процессором и максимальной рабочей частотой до 240 МГц. Микросхема ESP32-D0WDQ6 работает под управлением freeRTOS и использует стек LwIP, ESP32-D0WDQ6, 32Mbits SPI flash, UART Mode
ESP32-WROOM-32 [4MB] 278,00 от 9 шт. 242,00 от 30 шт. 238,00 от 62 шт. 227,00
5 шт.
(на складе)
484 шт.
(под заказ)
ESP8285
ESP8285
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2584270 ИНФО PDF RND
Доступно: 4134 шт. 134,00
Система-на-кристалле (SoC) на базе 32-битного процессора Tensilica L106 160 МГц
ESP8285 134,00 от 19 шт. 116,00 от 62 шт. 114,00 от 129 шт. 109,00
15 шт.
(на складе)
4119 шт.
(под заказ)
ESP32-WROVER-I [4MB]
ESP32-WROVER-I [4MB]
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2610278 ИНФО PDF DT
Доступно: 47 шт. 568,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] 568,00 от 5 шт. 494,00 от 15 шт. 486,00 от 32 шт. 464,00
47 шт.
(на складе)
ESP32-WROVER [4MB]
ESP32-WROVER [4MB]
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2738673 ИНФО PDF RND DT
Доступно: 40 шт. 457,00
ESP32-WROVER - мощный высокопроизводительный модуль общего назначения со встроенным микроконтроллерным ядром и с поддержкой стандартов связи Wi-Fi+BT+BLE, предназначенный для широкого ряда приложений с экономичным энергопотреблением.
ESP32-WROVER [4MB] 457,00 от 6 шт. 397,00 от 19 шт. 391,00 от 39 шт. 373,00
40 шт.
(на складе)
ESP32-S0WD
ESP32-S0WD
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2739124 ИНФО PDF RND DT
Доступно: 1602 шт. 289,00
Система-на-кристалле (SoC) на базе 32-битного процессора Xtensa® 160 МГц 200 DMIPS
ESP32-S0WD 289,00 от 9 шт. 251,00 от 30 шт. 247,00 от 62 шт. 236,00
92 шт.
(на складе)
1510 шт.
(под заказ)
ESP32-D0WD
ESP32-D0WD
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2739127 ИНФО PDF RND DT
Доступно: 7471 шт. 244,00
Система-на-кристалле (SoC) на базе вухъядерного 32-битного процессора Xtensa® 240 МГц 600 DMIPS
ESP32-D0WD 244,00 от 10 шт. 212,00 от 34 шт. 209,00 от 71 шт. 199,00
45 шт.
(на складе)
7426 шт.
(под заказ)
ESP32-WROOM-32U [4MB]
ESP32-WROOM-32U [4MB]
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2739131 ИНФО PDF RND DT
Доступно: 81 шт. 364,00
SMD Module ESP32-WROOM-32U, ESP32-D0WD, 32Mbits SPI flash, UART mode, U.FL antenna connector
ESP32-WROOM-32U [4MB] 364,00 от 7 шт. 317,00 от 23 шт. 312,00 от 48 шт. 298,00
80 шт.
(на складе)
1 шт.
(под заказ)
ESP32-SOLO-1
ESP32-SOLO-1
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2739132 ИНФО PDF RND DT
Доступно: 3788 шт. 342,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 342,00 от 8 шт. 298,00 от 25 шт. 293,00 от 51 шт. 280,00
51 шт.
(на складе)
3737 шт.
(под заказ)
ESP32-PICO-D4
ESP32-PICO-D4
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2739133 ИНФО PDF RND DT
Доступно: 1835 шт. 325,00
SIP module ESP32 with 4MByte Flash, Dual Core MCU, Wi-Fi & Bluetooth Combo, LGA48-pin, 7*7mm
ESP32-PICO-D4 325,00 от 8 шт. 283,00 от 26 шт. 278,00 от 53 шт. 266,00
54 шт.
(на складе)
1781 шт.
(под заказ)
ESP-WROOM-02U [2MB]
ESP-WROOM-02U [2MB]
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2739149 ИНФО PDF RND DT
Доступно: 1235 шт. 198,00
модуль по своим характеристикам идентичен ESP-WROOM-02D, но вместо печатной антенны FL-разъем и габариты модуля более компактные – 18?14,3?3,20 мм., ESP8266EX, 16Mbits SPI flash, UART Mode, U.FL antenna connector
ESP-WROOM-02U [2MB] 198,00 от 13 шт. 172,00 от 43 шт. 169,00 от 100 шт. 162,00
80 шт.
(на складе)
1155 шт.
(под заказ)
ESP-WROOM-S2
ESP-WROOM-S2
Espressif Systems (shanghai) Pte. Ltd.
Арт.: 2739150 ИНФО PDF RND
Доступно: 1004 шт. 296,00
модуль с печатной антенной, который может выступать в роли ведомого SDIO/SPI с рабочей частотой SPI до 8 Мбит/с. Кроме микросхемы ESP8266, на борту у модуля присутствует SPI-Flash объемом 2 Мбайт. Габариты ESP-WROOM-S2 составляют 16x23x2,80 мм.
ESP-WROOM-S2 296,00 от 9 шт. 257,00 от 29 шт. 253,00 от 60 шт. 242,00
93 шт.
(на складе)
911 шт.
(под заказ)

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

  • ()