configure wifi connection via webpage
This commit is contained in:
123
main/main.c
123
main/main.c
@@ -1,15 +1,28 @@
|
||||
#include <stdio.h>
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "freertos/event_groups.h"
|
||||
#include "esp_system.h"
|
||||
#include "esp_wifi.h"
|
||||
#include "esp_event.h"
|
||||
#include "esp_log.h"
|
||||
#include "esp_system.h"
|
||||
#include "nvs_flash.h"
|
||||
#include <nvs_flash.h>
|
||||
#include <esp_http_server.h>
|
||||
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
#include "freertos/event_groups.h"
|
||||
#include "freertos/queue.h"
|
||||
|
||||
#include "driver/gpio.h"
|
||||
#include "driver/ledc.h"
|
||||
#include <esp_http_server.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <sys/param.h>
|
||||
|
||||
#include "esp_netif.h"
|
||||
#include "esp_eth.h"
|
||||
|
||||
|
||||
#define WIFI_SSID "AndroidAP"
|
||||
#define WIFI_PASS "uyts6533"
|
||||
@@ -17,6 +30,7 @@
|
||||
#define ESP_INTR_FLAG_DEFAULT 0
|
||||
|
||||
uint8_t led_state = 0;
|
||||
void connect_to_wifi(char* new_ssid, char* new_psk);
|
||||
|
||||
// Event group
|
||||
static EventGroupHandle_t wifi_event_group;
|
||||
@@ -40,7 +54,7 @@ ledc_channel_config_t ledc_channel =
|
||||
.timer_sel = LEDC_TIMER_1
|
||||
};
|
||||
|
||||
static char* resp_str ="\
|
||||
static char* website_lamp_str ="\
|
||||
<input type=\"submit\" name=\"lamp_state\" onclick=\"sendState(this.value)\" value=\"ON\"> \
|
||||
<input type=\"submit\" name=\"lamp_state\" onclick=\"sendState(this.value)\" value=\"OFF\"> \
|
||||
<input type=\"range\" min=\"0\" max=\"100\" value=\"0\" oninput=\"sendSlider(this.value)\" class=\"slider\" id=\"myRange\"> \
|
||||
@@ -58,9 +72,57 @@ static char* resp_str ="\
|
||||
</script> \
|
||||
";
|
||||
|
||||
static char* website_wifi_str ="<form action=\"wifi\" method=\"post\">\n<table>\n<tr>\n<td>SSID:</td>\n<td><input type=\"text\" name=\"SSID\"></td>\n</tr>\n<tr>\n<td>PSK :</td>\n<td><input type=\"text\" name=\"PSK\"></td>\n</tr>\n</table>\n<input type=\"submit\" value=\"Submit\">\n</form>";
|
||||
|
||||
static esp_err_t default_get_handler(httpd_req_t *req)
|
||||
{
|
||||
httpd_resp_send(req, resp_str, strlen(resp_str));
|
||||
httpd_resp_send(req, website_lamp_str, strlen(website_lamp_str));
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
static esp_err_t web_wifi_get_handler(httpd_req_t *req)
|
||||
{
|
||||
httpd_resp_send(req, website_wifi_str, strlen(website_wifi_str));
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
static esp_err_t web_wifi_post_handler(httpd_req_t *req)
|
||||
{
|
||||
char buf[256];
|
||||
int ret, remaining = req->content_len;
|
||||
|
||||
char ssid[32];
|
||||
char psk[64];
|
||||
|
||||
while (remaining > 0) {
|
||||
/* Read the data for the request */
|
||||
if ((ret = httpd_req_recv(req, buf, MIN(remaining, sizeof(buf)))) <= 0) {
|
||||
if (ret == HTTPD_SOCK_ERR_TIMEOUT) {
|
||||
/* Retry receiving if timeout occurred */
|
||||
continue;
|
||||
}
|
||||
return ESP_FAIL;
|
||||
}
|
||||
remaining -= ret;
|
||||
|
||||
/* NULL terminal string */
|
||||
buf[ret] = 0;
|
||||
|
||||
|
||||
char *string, *found;
|
||||
string = strdup(buf);
|
||||
while( (found = strsep(&string,"&")) != NULL ){
|
||||
if(strncmp(found, "SSID=", 5)==0){
|
||||
memcpy(ssid,&found[5],strlen(&found[5])+1);
|
||||
}
|
||||
if(strncmp(found, "PSK=", 4)==0){
|
||||
memcpy(psk,&found[4],strlen(&found[4])+1);
|
||||
}
|
||||
}
|
||||
}
|
||||
connect_to_wifi(ssid, psk);
|
||||
|
||||
httpd_resp_send(req, website_wifi_str, strlen(website_wifi_str));
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
@@ -70,6 +132,19 @@ static const httpd_uri_t default_uri = {
|
||||
.handler = &default_get_handler
|
||||
};
|
||||
|
||||
static const httpd_uri_t web_wifi_uri = {
|
||||
.uri = "/wifi",
|
||||
.method = HTTP_GET,
|
||||
.handler = &web_wifi_get_handler
|
||||
};
|
||||
|
||||
static const httpd_uri_t web_wifi_post_uri = {
|
||||
.uri = "/wifi",
|
||||
.method = HTTP_POST,
|
||||
.handler = &web_wifi_post_handler
|
||||
};
|
||||
|
||||
|
||||
static void IRAM_ATTR gpio_isr_handler(void* arg)
|
||||
{
|
||||
uint32_t gpio_num = (uint32_t) arg;
|
||||
@@ -113,12 +188,39 @@ static void gpio_task(void* arg)
|
||||
uint32_t io_num;
|
||||
for(;;) {
|
||||
if(xQueueReceive(gpio_evt_queue, &io_num, portMAX_DELAY)) {
|
||||
printf("GPIO[%d] intr, val: %d\n", io_num, gpio_get_level(io_num));
|
||||
xTaskCreate(&button_debounce_task, "button_debounce_task", 2048, NULL, 10, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void connect_to_wifi(char* new_ssid, char* new_psk){
|
||||
printf("ssid: \'%s\'\n", new_ssid);
|
||||
printf("psk:\'%s\'\n", new_psk);
|
||||
|
||||
ESP_ERROR_CHECK(esp_wifi_stop());
|
||||
|
||||
wifi_init_config_t wifi_init_config = WIFI_INIT_CONFIG_DEFAULT();
|
||||
ESP_ERROR_CHECK(esp_wifi_init(&wifi_init_config));
|
||||
ESP_ERROR_CHECK(esp_wifi_set_storage(WIFI_STORAGE_RAM));
|
||||
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
|
||||
|
||||
// configure the wifi connection and start the interface
|
||||
wifi_config_t wifi_config = {
|
||||
.sta = {
|
||||
.ssid = {*new_ssid},
|
||||
.password = {*new_psk}
|
||||
}
|
||||
};
|
||||
strcpy(&(wifi_config.sta.ssid), new_ssid);
|
||||
strcpy(&(wifi_config.sta.password), new_psk);
|
||||
|
||||
printf("ssid: \'%s\'\n", wifi_config.sta.ssid);
|
||||
printf("psk: \'%s\'\n", wifi_config.sta.password);
|
||||
|
||||
ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config));
|
||||
ESP_ERROR_CHECK(esp_wifi_start());
|
||||
}
|
||||
|
||||
// Wifi event handler
|
||||
static esp_err_t event_handler(void *ctx, system_event_t *event)
|
||||
{
|
||||
@@ -143,7 +245,6 @@ static esp_err_t event_handler(void *ctx, system_event_t *event)
|
||||
|
||||
return ESP_OK;
|
||||
}
|
||||
|
||||
// Main application
|
||||
void app_main()
|
||||
{
|
||||
@@ -229,5 +330,7 @@ void app_main()
|
||||
if (httpd_start(&server, &config) == ESP_OK) {
|
||||
// Set URI handlers
|
||||
httpd_register_uri_handler(server, &default_uri);
|
||||
httpd_register_uri_handler(server, &web_wifi_uri);
|
||||
httpd_register_uri_handler(server, &web_wifi_post_uri);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user