Найти в Дзене

esp32 and html and led in webserver

Оглавление

😊no help !! Уважаю пошаговые инструкции . В бытность преподавателем готовил их часто и результат был. Можно долго указкой по доске водить и мелом елозить - время убивайство, но в современных условиях поток информации и плотность информации и, а значит качество и актуальность важны. Потому убрал бы все доски в школах и заменил бы их на экраны. А подростков учить надо делать презентации и уметь их представлять и обосновывать?😗 Конспекты пишут? Зачем? Лучше бы пошаговую прошли и на контрольные вопросы ответили, а и теорию почитали и поискали в интернете практику решения по теории?

  • ДЛЯ понимания: естественно успеваемость повышается и кругозор и оценки. Если оценки нормальны, то отчислить не могут? Ну и из забитых студентов в силу воспитания появляются три направления а) кто считает , что можно лучше и дальше; 😚б) и так сойдет и не надо на судьбу голосить; 😉c) можно понаглеть по причине , что пара плохих оценок уже не испортит общую картину. 🤔 К чему всё это ? ЗАЧЕМ извращенцам = наглецам=моральным вампирам давать преимущество? А потом почему образование СПО должно быть лучше ВЫСШЕГО? В СПО кто попадает? Кто не хочет учиться? Тут бац и методика образования обеспечивает даже если не хочется нужные компетенции. Такое может быть? БРЕД!!!!🤢
  • но наш образование самое упёртое и потому , то что можно пройти за неделю растянут на полгода и т.п. Но не факт , что освоят и еще не факт , что преподаватель сам в это вникнет.🎃
  • Итак , что важно практика или ли ли теория? Может теория в практике? А практика в теории бывает? all in ... Всё тут. кто в этом смыслит - имеется ввиду, что некоторые задачи можно осилить , но осмысление их процесса возможно или невозможно в силу базовых знаний, но в это не погружаемся , а считаем , что надо просто выполнить проверку материала , который изложен в ссылке, но в среде espressif.
для понимания как всё выглядит в теории.
для понимания как всё выглядит в теории.

🎈То есть согласно структурной схеме ПО необходимо данные по МК и данные по устройствам , которые будут работать по интерфейсам с МК , ну и инструменты , которые еееето всё отладят и опишут в программе, которая позволит сделать код для МК и затем прошить его в камень!!!🎃

Ниже не обязательно такой , но с МИКРО USB ВХОДОМ ГАДЖЕТ. Прbобрести можно спокойно на яндекс маркете кстати, можно и в других местах. шнурок usb-microusb да хоть в ашане., а хоть на яндех маркете.

если у вас такая плата , то
если у вас такая плата , то

ОРГАНИЗАЦИОННО ДОЛЖНО БЫТЬ ТАК.

наглядно, но понятно , когда  результат сотворён. обычно к схемам и даже структурным идут описания (спасибо кто её оформил!!!!)
наглядно, но понятно , когда результат сотворён. обычно к схемам и даже структурным идут описания (спасибо кто её оформил!!!!)

ПРОСТОЕ ОПИСАНИЕ СХЕМЫ При нажатии кнопок на ПК или телефоне светодиод тухнет или гаснет. на плате МК. Естественно вместо светодиода можно много чего организовать.

Ниже код index.html - это страница главная в любом сайте и выглядит она по разному и код разный. но в данном случае так!!!

<!DOCTYPE html>
<html>
<head>
<style type=\"text/css\">html
{ font-family: Arial; display: inline-block; margin: 0px auto; text-align: center;}h1{ color: #070812; padding: 2vh;}.button
{ display: inline-block; background-color: #b30000; //red color border: none; border-radius: 4px; color: white; padding: 16px 40px; text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}.button2
{ background-color: #364cf4; //blue color}.content
{ padding: 50px;}.card-grid{ max-width: 800px; margin: 0 auto; display: grid; grid-gap: 2rem; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));}.card
{ background-color: white; box-shadow: 2px 2px 12px 1px rgba(140,140,140,.5);}.card-title { font-size: 1.2rem; font-weight: bold; color: #034078}
</style>
<title>ESP32 WEB SERVER</title>
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">
<link rel=\"icon\" href=\"data:,\">
<link rel=\"stylesheet\" href=\"https://use.fontawesome.com/releases/v5.7.2/css/all.css\" integrity=\"sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr\" crossorigin=\"anonymous\">
<link rel=\"stylesheet\" type=\"text/css\" >
</head>
<body>
<h2>ESP32 WEB SERVER</h2>
<div class=\"content\">
<div class=\"card-grid\">
<div class=\"card\">
<p> <i class=\"fas fa-lightbulb fa-2x\" style=\"color:#c81919;\"></i> <strong>GPIO2</strong>
GPIO state: <strong> ON</strong> </p>
<p> <a href=\"/led2on\"><button class=\"button\">ON</button></a></p>
<p> <a href=\"/led2off\"><button class=\"button button2\">OFF</button></a> </p>
</div>
</div>
</div>
</body>
</html>

Ниже видно как выглядит данная страница в браузере

цвета не схватились и картинки по причине нет доступа в ИНЕТ!!!
цвета не схватились и картинки по причине нет доступа в ИНЕТ!!!

ранее уже установили espressif

Код программы ниже

с верху в низ.
с верху в низ.

создадим проект

достаточно нажать  CTRL+N
достаточно нажать CTRL+N

далее два пункта

далее два пункта?
далее два пункта?

согласно рисунку выше!

стрелками указано
стрелками указано

Выполним три пункта?

файл самый важный откроем.
файл самый важный откроем.

Скопируем в проект указанный ниже код.💡 не пугайтесь - это вам не 50 и более страниц исходника🎀

кстати main.c код взят

#include <stdio.h>
#include <stdlib.h>
#include <string.h> //Requires by memset
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
#include <esp_http_server.h>
#include "esp_wifi.h"
#include "esp_event.h"
#include "freertos/event_groups.h"
#include "esp_log.h"
#include "nvs_flash.h"
#include "esp_netif.h"
#include "driver/gpio.h"
#include <lwip/sockets.h>
#include <lwip/sys.h>
#include <lwip/api.h>
#include <lwip/netdb.h>
#define LED_PIN 2

///указываем библиотеку.🎈

char on_resp[] = "<!DOCTYPE html><html><head><style type=\"text/css\">html { font-family: Arial; display: inline-block; margin: 0px auto; text-align: center;}h1{ color: #070812; padding: 2vh;}.button { display: inline-block; background-color: #b30000; //red color border: none; border-radius: 4px; color: white; padding: 16px 40px; text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}.button2 { background-color: #364cf4; //blue color}.content { padding: 50px;}.card-grid { max-width: 800px; margin: 0 auto; display: grid; grid-gap: 2rem; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));}.card { background-color: white; box-shadow: 2px 2px 12px 1px rgba(140,140,140,.5);}.card-title { font-size: 1.2rem; font-weight: bold; color: #034078}</style> <title>ESP32 WEB SERVER</title> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"> <link rel=\"icon\" href=\"data:,\"> <link rel=\"stylesheet\" href=\"https://use.fontawesome.com/releases/v5.7.2/css/all.css\" integrity=\"sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr\" crossorigin=\"anonymous\"> <link rel=\"stylesheet\" type=\"text/css\" ></head><body> <h2>ESP32 WEB SERVER</h2> <div class=\"content\"> <div class=\"card-grid\"> <div class=\"card\"> <p><i class=\"fas fa-lightbulb fa-2x\" style=\"color:#c81919;\"></i> <strong>GPIO2</strong></p> <p>GPIO state: <strong> ON</strong></p> <p> <a href=\"/led2on\"><button class=\"button\">ON</button></a> <a href=\"/led2off\"><button class=\"button button2\">OFF</button></a> </p> </div> </div> </div></body></html>";

//указываем переменную🎈

///далее

char off_resp[] = "<!DOCTYPE html><html><head><style type=\"text/css\">html { font-family: Arial; display: inline-block; margin: 0px auto; text-align: center;}h1{ color: #070812; padding: 2vh;}.button { display: inline-block; background-color: #b30000; //red color border: none; border-radius: 4px; color: white; padding: 16px 40px; text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}.button2 { background-color: #364cf4; //blue color}.content { padding: 50px;}.card-grid { max-width: 800px; margin: 0 auto; display: grid; grid-gap: 2rem; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));}.card { background-color: white; box-shadow: 2px 2px 12px 1px rgba(140,140,140,.5);}.card-title { font-size: 1.2rem; font-weight: bold; color: #034078}</style> <title>ESP32 WEB SERVER</title> <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"> <link rel=\"icon\" href=\"data:,\"> <link rel=\"stylesheet\" href=\"https://use.fontawesome.com/releases/v5.7.2/css/all.css\" integrity=\"sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr\" crossorigin=\"anonymous\"> <link rel=\"stylesheet\" type=\"text/css\"></head><body> <h2>ESP32 WEB SERVER</h2> <div class=\"content\"> <div class=\"card-grid\"> <div class=\"card\"> <p><i class=\"fas fa-lightbulb fa-2x\" style=\"color:#c81919;\"></i> <strong>GPIO2</strong></p> <p>GPIO state: <strong> OFF</strong></p> <p> <a href=\"/led2on\"><button class=\"button\">ON</button></a> <a href=\"/led2off\"><button class=\"button button2\">OFF</button></a> </p> </div> </div> </div></body></html>";

///указываем переменные настройки🎈

static const char *TAG = "espressif"; // TAG for debug
int led_state = 0;
#define EXAMPLE_ESP_WIFI_SSID CONFIG_ESP_WIFI_SSID
#define EXAMPLE_ESP_WIFI_PASS CONFIG_ESP_WIFI_PASSWORD
#define EXAMPLE_ESP_MAXIMUM_RETRY CONFIG_ESP_MAXIMUM_RETRY
static EventGroupHandle_t s_wifi_event_group;
#define WIFI_CONNECTED_BIT BIT0
#define WIFI_FAIL_BIT BIT1
static int s_retry_num = 0;

////далее вводим функцию🎈 по переменным понятно зачем она нужна

static void event_handler(void *arg, esp_event_base_t event_base,int32_t event_id, void *event_data)

{if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START)
{esp_wifi_connect();}
else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED)
{if (s_retry_num < EXAMPLE_ESP_MAXIMUM_RETRY)
{esp_wifi_connect(); s_retry_num++;
ESP_LOGI(TAG, "retry to connect to the AP");}
else
{xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT);}
ESP_LOGI(TAG, "connect to the AP fail");}
else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP)
{ip_event_got_ip_t *event = (ip_event_got_ip_t *)event_data;
ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip));
s_retry_num = 0;
xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
}
}

////далее вводим функцию🎈 по названию понятно зачем она нужна

void connect_wifi(void)

{s_wifi_event_group = xEventGroupCreate();
ESP_ERROR_CHECK(esp_netif_init());
ESP_ERROR_CHECK(esp_event_loop_create_default());
esp_netif_create_default_wifi_sta();
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
esp_event_handler_instance_t instance_any_id;
esp_event_handler_instance_t instance_got_ip;
ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,
ESP_EVENT_ANY_ID,&event_handler,NULL,&instance_any_id));
ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT,
IP_EVENT_STA_GOT_IP,&event_handler,NULL,&instance_got_ip));
wifi_config_t wifi_config = {.sta = {.ssid = EXAMPLE_ESP_WIFI_SSID,
.password = EXAMPLE_ESP_WIFI_PASS,
.threshold.authmode = WIFI_AUTH_WPA2_PSK,},};
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config));
ESP_ERROR_CHECK(esp_wifi_start());
ESP_LOGI(TAG, "wifi_init_sta finished.");
EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group,
WIFI_CONNECTED_BIT | WIFI_FAIL_BIT,pdFALSE,pdFALSE,
portMAX_DELAY);
if (bits & WIFI_CONNECTED_BIT)
{ESP_LOGI(TAG, "connected to ap SSID:%s password:%s",
EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);
}else if (bits & WIFI_FAIL_BIT)
{ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s",
EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);
}else{ESP_LOGE(TAG, "UNEXPECTED EVENT");
}vEventGroupDelete(s_wifi_event_group);}

////далее вводим функцию🎈 по названию понятно зачем она нужна

esp_err_t send_web_page(httpd_req_t *req)

{int response; if (led_state == 0)
response = httpd_resp_send(req, off_resp, HTTPD_RESP_USE_STRLEN);
else
response = httpd_resp_send(req, on_resp, HTTPD_RESP_USE_STRLEN);
return response;}

////далее вводим функцию🎈 по названию понятно зачем она нужна

esp_err_t get_req_handler(httpd_req_t *req)

{return send_web_page(req);}

////далее вводим функцию🎈 по названию понятно зачем она нужна

esp_err_t led_on_handler(httpd_req_t *req)

{gpio_set_level(LED_PIN, 1);led_state = 1;
return send_web_page(req);}

////далее вводим функцию🎈 по названию понятно зачем она нужна

esp_err_t led_off_handler(httpd_req_t *req)

{gpio_set_level(LED_PIN, 0);led_state = 0;
return send_web_page(req);}

////далее вводим структуру🎈 по названию понятно зачем она нужна

httpd_uri_t uri_get = {

.uri = "/",

.method = HTTP_GET,

.handler = get_req_handler,

.user_ctx = NULL};

////далее вводим структуру🎈 по названию понятно зачем она нужна

httpd_uri_t uri_on = {

.uri = "/led2on",

.method = HTTP_GET,

.handler = led_on_handler,

.user_ctx = NULL};

////далее вводим структуру🎈 по названию понятно зачем она нужна

httpd_uri_t uri_off = {

.uri = "/led2off",

.method = HTTP_GET,

.handler = led_off_handler,

.user_ctx = NULL};

////далее вводим функцию🎈 по названию понятно зачем она нужна

httpd_handle_t setup_server(void)

{httpd_config_t config = HTTPD_DEFAULT_CONFIG();
httpd_handle_t server = NULL;
if (httpd_start(&server, &config) == ESP_OK)
{httpd_register_uri_handler(server, &uri_get);
httpd_register_uri_handler(server, &uri_on);
httpd_register_uri_handler(server, &uri_off);
}return server;}

////далее вводим тело🎈 по названию понятно зачем она нужна

void app_main()

{// Initialize NVS
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND)
{ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();}
ESP_ERROR_CHECK(ret);
ESP_LOGI(TAG, "ESP_WIFI_MODE_STA");
connect_wifi();
// GPIO initialization
gpio_pad_select_gpio(LED_PIN);
gpio_set_direction(LED_PIN, GPIO_MODE_OUTPUT);
led_state = 0;
ESP_LOGI(TAG, "LED Control Web Server is running ... ...\n");
setup_server();}

ДАЛЕЕ нажимаем на запуск отладки . придётся подождать.

если не хотите ждать, то надо библиотеки  перетаскивать в проект, но лучше подождать при отладке при освоении. Чай или пиво ? В холодильнике  Кофю? 👌
если не хотите ждать, то надо библиотеки перетаскивать в проект, но лучше подождать при отладке при освоении. Чай или пиво ? В холодильнике Кофю? 👌

У нас ошибки остались!!!! Ход конём по стрелке. - где то не хватает переменной. можно прям вписать. можно в настройках указать.

стрелка показывает на файл  установки параметров
стрелка показывает на файл установки параметров

откроем данный файл и модернизируем

menu "Example Configuration"
config ESP_WIFI_SSID
string "WiFi SSID"
default "myssid"
<= впишем имя точки доступа "YOTA"?
help
SSID (network name) for the example to connect to.

config ESP_WIFI_PASSWORD
string "WiFi Password"
default "mypassword"
<= впишем пароль точки доступа "12345678"?
help
WiFi password (WPA or WPA2) for the example to use.

config ESP_MAXIMUM_RETRY
int "Maximum retry"
default 5
<= количество попыток достучаться
help
Set the Maximum retry to avoid station reconnecting to the AP unlimited when the AP is really inexistent.
endmenu

//🤮Далее в D:\Espressif\frameworks\esp-idf-v5.1.2\components\driver\gpio отыскал библиотеку и функции gpio_pad_select_gpio(LED_PIN); под esp32 нет значит данную функцию по идее убрать в комментарии?

👍По пунктам! Кстати не забудьте шнурок подключить к ПК и к шнурку плату для прошивки. Если не подключён, то ругаться как показано ниже.

готовим связь с МК😜
готовим связь с МК😜

далее следим за стрелками

Стрелки рекомендуют . Есть другие предложения?
Стрелки рекомендуют . Есть другие предложения?

Это если шнурок не видит плату

нажмите ОК!!!✔
нажмите ОК!!!✔

после прошивки незабудьте кнопку EN нажать!

успешна прошивка.
успешна прошивка.

Утилиту HERCULES можно нарыть в интернете?

если  ip адрес есть, то собрали программу и отладили и прошили  нормально.
если ip адрес есть, то собрали программу и отладили и прошили нормально.

запустим броузер

любопытная ?
любопытная ?

опробуйте пункты! STATE ON or OFF? меняется? отключите питание с платы esp32/ Повторите пункт 2 и 3? КАК? меняется ? video

пример в среде espressif может быть использован

ниже код с двумя светодиодами и четыре кнопки Скопируйте ? Проверьте?

/////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <stdlib.h>
#include <string.h> //Requires by memset
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_spi_flash.h"
#include <esp_http_server.h>
#include "esp_wifi.h"
#include "esp_event.h"
#include "freertos/event_groups.h"
#include "esp_log.h"
#include "nvs_flash.h"
#include "esp_netif.h"
#include "driver/gpio.h"
#include <lwip/sockets.h>
#include <lwip/sys.h>
#include <lwip/api.h>
#include <lwip/netdb.h>
#define LED_PIN 2
#define LED_P12 12
char* rsp_doc_ = "<!DOCTYPE html><html><head>";
char* rsp_st_1 = "<style type=\"text/css\">html";
char* rsp_btn1 = "{ font-family: Arial; display: inline-block; margin: 0px auto; text-align: center;}h1{ color: #070812; padding: 2vh;}.button";
char* rsp_btn2 = "{ display: inline-block; background-color: #b30000; //red color border: none; border-radius: 4px; color: white; padding: 16px 40px; text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}.button2 ";
char* rsp_cntn = "{ background-color: #364cf4; //blue color}.content";
char* rsp_crt1 = "{ padding: 50px;}.card-grid{ max-width: 800px; margin: 0 auto; display: grid; grid-gap: 2rem; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));}.card ";
char* rsp_crt2 = "{ background-color: white; box-shadow: 2px 2px 12px 1px rgba(140,140,140,.5);}.card-title { font-size: 1.2rem; font-weight: bold; color: #034078}";
char* rsp_titl = "</style> <title> ESP32 WEB --- SERVER!</title>";
char* rsp_meta = "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"> ";
char* rsp_lnk1 ="<link rel=\"icon\" href=\"data:,\">";
char* rsp_lnk2 ="<link rel=\"stylesheet\" href=\"https://use.fontawesome.com/releases/v5.7.2/css/all.css\" integrity=\"sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr\" crossorigin=\"anonymous\">";
char* rsp_lin_ = "<link rel=\"stylesheet\" type=\"text/css\" >";
//---insert code---date --inf
char* rsp_h_b_ = " </head> <body> <h2>=ESP32 WEB !!! SERVER-</h2>";
char* rsp_div_ = " <div class=\"content\"> <div class=\"card-grid\"> <div class=\"card\">";
//---insert code---
char* rsp_i_1 =" <p> <i class=\"fas fa-lightbulb fa-2x\" style=\"color:#c81919;\"></i> <strong>GPIO2</strong> </p>";
char* rsp_gpON =" <p> GPIO state: <strong> ON</strong> </p>";
char* rsp_gpOF =" <p> GPIO state: <strong> OFF</strong></p>";
char* rsp_p_a1 ="<p> <a href=\"/led2on\"><button class=\"button\">ON</button></a>";
char* rsp_p_a2 =" <a href=\"/led2off\"><button class=\"button button2\">OFF</button></a> </p>";
char* rsp_p_11 ="<p> <a href=\"/l12on\"><button class=\"button\">ON</button></a>";
char* rsp_p_12 =" <a href=\"/l12off\"><button class=\"button button2\">OFF</button></a> </p>";
char* rspeh_eb= "</div> </div> </div> </body></html>";
static const char *TAG = "espressif"; // TAG for debug
int led_state = 0;
int state_led = 0;
int len_on = 0;
#define EXAMPLE_ESP_WIFI_SSID CONFIG_ESP_WIFI_SSID
#define EXAMPLE_ESP_WIFI_PASS CONFIG_ESP_WIFI_PASSWORD
#define EXAMPLE_ESP_MAXIMUM_RETRY CONFIG_ESP_MAXIMUM_RETRY
static EventGroupHandle_t s_wifi_event_group;
#define WIFI_CONNECTED_BIT BIT0
#define WIFI_FAIL_BIT BIT1
static int s_retry_num = 0;
////////////////////////////////////
int count_htm()
{ int c=0;
c=c+strlen(rsp_doc_);
c=c+strlen(rsp_st_1);
c=c+strlen(rsp_btn1);
c=c+strlen(rsp_btn2);
c=c+strlen(rsp_cntn);
c=c+strlen(rsp_crt1);
c=c+strlen(rsp_crt2);
c=c+strlen(rsp_titl);
c=c+strlen(rsp_meta);
c=c+strlen(rsp_lnk1);
c=c+strlen(rsp_lnk2);
c=c+strlen(rsp_lin_);
c=c+strlen(rsp_h_b_);
c=c+strlen(rsp_div_);
c=c+strlen(rsp_i_1);
c=c+strlen(rsp_gpON);
c=c+strlen(rsp_gpON);
c=c+strlen(rsp_p_a1);
c=c+strlen(rsp_p_a2);
c=c+strlen(rsp_p_11);
c=c+strlen(rsp_p_12);
c=c+strlen(rspeh_eb);
return c;
}
//////////////////////
static void event_handler(void *arg, esp_event_base_t event_base,
int32_t event_id, void *event_data)
{
if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START)
{ esp_wifi_connect();
}
else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED)
{ if (s_retry_num < EXAMPLE_ESP_MAXIMUM_RETRY)
{ esp_wifi_connect(); s_retry_num++;
ESP_LOGI(TAG, "retry to connect to the AP");
} else
{ xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT); }
ESP_LOGI(TAG, "connect to the AP fail");
}
else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP)
{ ip_event_got_ip_t *event = (ip_event_got_ip_t *)event_data;
ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip));
s_retry_num = 0;
xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT);
}
}
void connect_wifi(void)
{
s_wifi_event_group = xEventGroupCreate();
ESP_ERROR_CHECK(esp_netif_init());
ESP_ERROR_CHECK(esp_event_loop_create_default());
esp_netif_create_default_wifi_sta();
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
esp_event_handler_instance_t instance_any_id;
esp_event_handler_instance_t instance_got_ip;
ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,
ESP_EVENT_ANY_ID,
&event_handler,
NULL,
&instance_any_id));
ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT,
IP_EVENT_STA_GOT_IP,
&event_handler,
NULL,
&instance_got_ip));
wifi_config_t wifi_config = {
.sta = {
.ssid = EXAMPLE_ESP_WIFI_SSID,
.password = EXAMPLE_ESP_WIFI_PASS,
.threshold.authmode = WIFI_AUTH_WPA2_PSK,
},
};
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config));
ESP_ERROR_CHECK(esp_wifi_start());
ESP_LOGI(TAG, "wifi_init_sta finished.");
EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group,
WIFI_CONNECTED_BIT | WIFI_FAIL_BIT,
pdFALSE,
pdFALSE,
portMAX_DELAY);
if (bits & WIFI_CONNECTED_BIT)
{ ESP_LOGI(TAG, "connected to ap SSID:%s password:%s",
EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);
}
else if (bits & WIFI_FAIL_BIT)
{ ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s",
EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);
}
else
{ ESP_LOGE(TAG, "UNEXPECTED EVENT");
} vEventGroupDelete(s_wifi_event_group);
}
//-----------------------------------------------------//---------------------------------------------
esp_err_t send_web_page(httpd_req_t *req)
{ char *result1 = malloc(len_on+1);
strcpy(result1,rsp_doc_);
strcat(result1,rsp_st_1);
strcat(result1,rsp_btn1);
strcat(result1,rsp_btn2);
strcat(result1,rsp_cntn);
strcat(result1,rsp_crt1);
strcat(result1,rsp_crt2);
strcat(result1,rsp_titl);
strcat(result1,rsp_meta);
strcat(result1,rsp_lnk1);
strcat(result1,rsp_lnk2);
strcat(result1,rsp_lin_);
strcat(result1,rsp_h_b_);
strcat(result1,rsp_div_);
strcat(result1,rsp_i_1);
if (led_state == 0) strcat(result1,rsp_gpON);
else strcat(result1,rsp_gpOF);
if (state_led == 0) strcat(result1,rsp_gpON);
else strcat(result1,rsp_gpOF);
strcat(result1,rsp_p_a1);
strcat(result1,rsp_p_a2);
strcat(result1,rsp_p_11);
strcat(result1,rsp_p_12);
strcat(result1,rspeh_eb); printf(result1);
int response;
if (led_state == 0)
response = httpd_resp_send(req, result1, HTTPD_RESP_USE_STRLEN);
else
response = httpd_resp_send(req, result1, HTTPD_RESP_USE_STRLEN);
free(result1);
return response;
}
esp_err_t get_req_handler(httpd_req_t *req)
{ return send_web_page(req);}
esp_err_t led_on_handler(httpd_req_t *req)
{ gpio_set_level(LED_PIN, 0); led_state = 0;
return send_web_page(req);
}
esp_err_t led_off_handler(httpd_req_t *req)
{ gpio_set_level(LED_PIN, 1); led_state = 1;
return send_web_page(req);
}
esp_err_t l12_on_handler(httpd_req_t *req)
{ gpio_set_level(GPIO_NUM_13, 0); state_led =0;
return send_web_page(req);
}
esp_err_t l12_off_handler(httpd_req_t *req)
{ gpio_set_level(GPIO_NUM_13, 1); state_led =1;
return send_web_page(req);
}
httpd_uri_t uri_get = {
.uri = "/",
.method = HTTP_GET,
.handler = get_req_handler,
.user_ctx = NULL};
httpd_uri_t uri_on = {
.uri = "/led2on",
.method = HTTP_GET,
.handler = led_on_handler,
.user_ctx = NULL};
httpd_uri_t uri_off = {
.uri = "/led2off",
.method = HTTP_GET,
.handler = led_off_handler,
.user_ctx = NULL};
httpd_uri_t uri_on_12 = {
.uri = "/l12on",
.method = HTTP_GET,
.handler = l12_on_handler,
.user_ctx = NULL};
httpd_uri_t uri_off_12 = {
.uri = "/l12off",
.method = HTTP_GET,
.handler = l12_off_handler,
.user_ctx = NULL};
httpd_handle_t setup_server(void)
{ httpd_config_t config = HTTPD_DEFAULT_CONFIG();
httpd_handle_t server = NULL;
if (httpd_start(&server, &config) == ESP_OK)
{ httpd_register_uri_handler(server, &uri_get);
httpd_register_uri_handler(server, &uri_on);
httpd_register_uri_handler(server, &uri_off);
httpd_register_uri_handler(server, &uri_on_12);
httpd_register_uri_handler(server, &uri_off_12);
} return server;
}
///////////////////////////////////////
void app_main()
{ len_on=count_htm();
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND)
{ ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
}
ESP_ERROR_CHECK(ret);
ESP_LOGI(TAG, "ESP_WIFI_MODE_STA");
connect_wifi();
gpio_set_direction(LED_PIN, GPIO_MODE_OUTPUT);
gpio_set_direction(GPIO_NUM_13, GPIO_MODE_OUTPUT);
gpio_set_pull_mode(GPIO_NUM_13, GPIO_FLOATING);
led_state = 0;
ESP_LOGI(TAG, "LED Control Web Server is running ... ...\n");
setup_server();
}

примерно такое есть!!!
примерно такое есть!!!