😊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
Код программы ниже
создадим проект
далее два пункта
согласно рисунку выше!
Выполним три пункта?
Скопируем в проект указанный ниже код.💡 не пугайтесь - это вам не 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 можно нарыть в интернете?
запустим броузер
опробуйте пункты! 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();
}