From ebb6ec68c26a4d2618d6364ec7e6a6d559c77673 Mon Sep 17 00:00:00 2001 From: Simon Weidacher Date: Sun, 26 Dec 2021 14:00:29 +0100 Subject: [PATCH] First working externalized server. --- device/components/AsyncTCP | 1 + device/components/ESPAsyncWebServer | 1 + device/components/arduino-esp32 | 1 + device/main/CMakeLists.txt | 4 +- device/main/WebInterface.cpp | 17 ++++ device/main/WebInterface.hpp | 14 +++ device/main/main.cpp | 35 +++++--- device/main/wifi_connect.c | 130 ---------------------------- device/main/wifi_connect.h | 8 -- 9 files changed, 59 insertions(+), 152 deletions(-) create mode 160000 device/components/AsyncTCP create mode 160000 device/components/ESPAsyncWebServer create mode 160000 device/components/arduino-esp32 create mode 100644 device/main/WebInterface.cpp create mode 100644 device/main/WebInterface.hpp delete mode 100644 device/main/wifi_connect.c delete mode 100644 device/main/wifi_connect.h diff --git a/device/components/AsyncTCP b/device/components/AsyncTCP new file mode 160000 index 0000000..ca8ac5f --- /dev/null +++ b/device/components/AsyncTCP @@ -0,0 +1 @@ +Subproject commit ca8ac5f919d02bea07b474531981ddbfd64de97c diff --git a/device/components/ESPAsyncWebServer b/device/components/ESPAsyncWebServer new file mode 160000 index 0000000..1d46269 --- /dev/null +++ b/device/components/ESPAsyncWebServer @@ -0,0 +1 @@ +Subproject commit 1d46269cedf477661ca8a29518414f4b74e957d4 diff --git a/device/components/arduino-esp32 b/device/components/arduino-esp32 new file mode 160000 index 0000000..16a9cf7 --- /dev/null +++ b/device/components/arduino-esp32 @@ -0,0 +1 @@ +Subproject commit 16a9cf781fafffedd70b794beed24853965d78ce diff --git a/device/main/CMakeLists.txt b/device/main/CMakeLists.txt index d20ddd3..1d84c4c 100644 --- a/device/main/CMakeLists.txt +++ b/device/main/CMakeLists.txt @@ -1,2 +1,2 @@ -idf_component_register(SRCS "wifi_connect.c" "main.cpp" - INCLUDE_DIRS ".") +idf_component_register(SRCS "main.cpp" "WebInterface.cpp" + INCLUDE_DIRS ".") diff --git a/device/main/WebInterface.cpp b/device/main/WebInterface.cpp new file mode 100644 index 0000000..d8d43f9 --- /dev/null +++ b/device/main/WebInterface.cpp @@ -0,0 +1,17 @@ +#include "WebInterface.hpp" + +#include +#include + +WebInterface::WebInterface() { + server = new AsyncWebServer(80); +} + +void WebInterface::start() { + server->on("/", HTTP_GET, [](AsyncWebServerRequest *request) { + Serial.println("Received a request"); + request->send(200, "text/plain", "Hello World"); + }); + + server->begin(); +} \ No newline at end of file diff --git a/device/main/WebInterface.hpp b/device/main/WebInterface.hpp new file mode 100644 index 0000000..cc94a45 --- /dev/null +++ b/device/main/WebInterface.hpp @@ -0,0 +1,14 @@ +#ifndef _WEB_INTERFACE_HPP +#define _WEB_INTERFACE_HPP + +#include + +class WebInterface { + AsyncWebServer* server; + + public: + WebInterface(); + void start(); +}; + +#endif \ No newline at end of file diff --git a/device/main/main.cpp b/device/main/main.cpp index 044975e..a8bfe7f 100644 --- a/device/main/main.cpp +++ b/device/main/main.cpp @@ -1,22 +1,33 @@ -/* This example code is in the Public Domain (or CC0 licensed, at your option.) +#include "Arduino.h" - Unless required by applicable law or agreed to in writing, this - software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR - CONDITIONS OF ANY KIND, either express or implied. -*/ +#include -#include - -#include "wifi_connect.h" +#include "WebInterface.hpp" extern "C" { void app_main(); } -static const char *TAG = "KIDSBOX"; +void connectWifi() { + WiFi.begin(CONFIG_ESP_WIFI_SSID, CONFIG_ESP_WIFI_PASSWORD); -void app_main(void) -{ + while (WiFi.status() != WL_CONNECTED) { + delay(1000); + Serial.println("Waiting for connection..."); + } - ESP_LOGI(TAG, "CONNECTED, quitting"); + Serial.println("Connected."); + Serial.println(WiFi.localIP()); +} + +WebInterface webInterface; + +void app_main(void) { + initArduino(); + + Serial.begin(115200); + + connectWifi(); + + webInterface.start(); } diff --git a/device/main/wifi_connect.c b/device/main/wifi_connect.c deleted file mode 100644 index 4da1c17..0000000 --- a/device/main/wifi_connect.c +++ /dev/null @@ -1,130 +0,0 @@ -/* WiFi station Example - - This example code is in the Public Domain (or CC0 licensed, at your option.) - - Unless required by applicable law or agreed to in writing, this - software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR - CONDITIONS OF ANY KIND, either express or implied. -*/ -#include -#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 "nvs_flash.h" - -#include "lwip/err.h" -#include "lwip/sys.h" - -/* The examples use WiFi configuration that you can set via project configuration menu - - If you'd rather not, just change the below entries to strings with - the config you want - ie #define EXAMPLE_WIFI_SSID "mywifissid" -*/ -#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 - -/* FreeRTOS event group to signal when we are connected*/ -static EventGroupHandle_t s_wifi_event_group; - -/* The event group allows multiple bits for each event, but we only care about two events: - * - we are connected to the AP with an IP - * - we failed to connect after the maximum amount of retries */ -#define WIFI_CONNECTED_BIT BIT0 -#define WIFI_FAIL_BIT BIT1 - -static const char *TAG = "wifi station"; - -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:%s", - ip4addr_ntoa(&event->ip_info.ip)); - s_retry_num = 0; - xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT); - } -} - -void wifi_init_sta() -{ - s_wifi_event_group = xEventGroupCreate(); - - tcpip_adapter_init(); - - ESP_ERROR_CHECK(esp_event_loop_create_default()); - - wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); - ESP_ERROR_CHECK(esp_wifi_init(&cfg)); - - ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler, NULL)); - ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler, NULL)); - - wifi_config_t wifi_config = { - .sta = { - .ssid = EXAMPLE_ESP_WIFI_SSID, - .password = EXAMPLE_ESP_WIFI_PASS - }, - }; - ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA) ); - ESP_ERROR_CHECK(esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config) ); - ESP_ERROR_CHECK(esp_wifi_start() ); - - ESP_LOGI(TAG, "wifi_init_sta finished."); - - /* Waiting until either the connection is established (WIFI_CONNECTED_BIT) or connection failed for the maximum - * number of re-tries (WIFI_FAIL_BIT). The bits are set by event_handler() (see above) */ - EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group, - WIFI_CONNECTED_BIT | WIFI_FAIL_BIT, - pdFALSE, - pdFALSE, - portMAX_DELAY); - - /* xEventGroupWaitBits() returns the bits before the call returned, hence we can test which event actually - * happened. */ - 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"); - } - - ESP_ERROR_CHECK(esp_event_handler_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, &event_handler)); - ESP_ERROR_CHECK(esp_event_handler_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, &event_handler)); - vEventGroupDelete(s_wifi_event_group); -} - -void connectBlocking() -{ - //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"); - wifi_init_sta(); -} diff --git a/device/main/wifi_connect.h b/device/main/wifi_connect.h deleted file mode 100644 index 60b3902..0000000 --- a/device/main/wifi_connect.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef __WIFI_CONNECT_H -#define __WIFI_CONNECT_H - -extern "C" { - void connectBlocking(); -} - -#endif \ No newline at end of file