Москва

+7 (495) 488-65-70

Корзина пуста
Загрузка списка товаров из файла
SALE!-10% -20% -30% -40% -50% -60%
дефицитные компоненты
ESP32: IoT устройство, работающее в локальной сети

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

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

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

Автор: Кедар Совани Перевод: Китаин Сергей, г. Москва

Производители: ESPRES

Опубликовано: 30.10.2019

  • Москва
  • Санкт-Петербург
  • Мурманск
  • Ульяновск
  • Новосибирск
  • Екатеринбург
  • Краснодар
  • Нижний Новгород
  • Воронеж
  • Уфа
  • Челябинск
  • Самара
  • Красноярск
  • Казань
  • Ростов-на-Дону
  • Саратов
  • Пермь
  • Томск
  • Иркутск
  • Омск
  • Тюмень

Актуальность предложений на товары в корзине истекла, данные были удалены 18.07.2025 в 00:00:00 (Мск.) Список позиций из корзины сохранен в Списке товаров
Актуальность предложений на товары в корзине истекла, данные были удалены 18.07.2025 в 00:00:00 (Мск.) Зарегистрируйтесь или авторизуйтесь на сайте, если регистрировались ранее, чтобы сохранять список товаров из корзины

Данный товар получен от клиентов, которые купили его для целей производства, но он оказался не востребован. Возможно отсутствие ГТД и страны происхождения.