From 31f8406a68ea0e89b61d6c624b411ce518c99002 Mon Sep 17 00:00:00 2001 From: Nam Tran Date: Sun, 13 Sep 2020 12:54:47 -0500 Subject: [PATCH] copied from https server example, changed wifi info and certs --- .gitignore | 2 + CMakeLists.txt | 10 ++++ Makefile | 11 ++++ main/CMakeLists.txt | 4 ++ main/certs/cacert.pem | 23 ++++++++ main/certs/prvtkey.pem | 28 +++++++++ main/component.mk | 7 +++ main/main.c | 127 +++++++++++++++++++++++++++++++++++++++++ 8 files changed, 212 insertions(+) create mode 100644 .gitignore create mode 100644 CMakeLists.txt create mode 100644 Makefile create mode 100644 main/CMakeLists.txt create mode 100644 main/certs/cacert.pem create mode 100644 main/certs/prvtkey.pem create mode 100644 main/component.mk create mode 100644 main/main.c diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2e846ee --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +build +sdkconfig* diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..71672d5 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,10 @@ +# The following lines of boilerplate have to be in your project's CMakeLists +# in this exact order for cmake to work correctly +cmake_minimum_required(VERSION 3.5) + +# (Not part of the boilerplate) +# This example uses an extra component for common functions such as Wi-Fi and Ethernet connection. +set(EXTRA_COMPONENT_DIRS $ENV{IDF_PATH}/examples/common_components/protocol_examples_common) + +include($ENV{IDF_PATH}/tools/cmake/project.cmake) +project(bme280) diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..19228a1 --- /dev/null +++ b/Makefile @@ -0,0 +1,11 @@ +# +# This is a project Makefile. It is assumed the directory this Makefile resides in is a +# project subdirectory. +# + +PROJECT_NAME := bme280 + +EXTRA_COMPONENT_DIRS = $(IDF_PATH)/examples/common_components/protocol_examples_common + +include $(IDF_PATH)/make/project.mk + diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt new file mode 100644 index 0000000..feca398 --- /dev/null +++ b/main/CMakeLists.txt @@ -0,0 +1,4 @@ +idf_component_register(SRCS "main.c" + INCLUDE_DIRS "." + EMBED_TXTFILES "certs/cacert.pem" + "certs/prvtkey.pem") \ No newline at end of file diff --git a/main/certs/cacert.pem b/main/certs/cacert.pem new file mode 100644 index 0000000..2a301a0 --- /dev/null +++ b/main/certs/cacert.pem @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIIDvTCCAqWgAwIBAgIUVxPiiPnOj/z8TyrXxhHaa4V4Yi0wDQYJKoZIhvcNAQEL +BQAwbjELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAklMMQwwCgYDVQQHDANOL0ExITAf +BgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEhMB8GCSqGSIb3DQEJARYS +dGhuYW0ubWVAZ21haWwuY29tMB4XDTIwMDkxMzE2NDk0NVoXDTMwMDkxMTE2NDk0 +NVowbjELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAklMMQwwCgYDVQQHDANOL0ExITAf +BgNVBAoMGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDEhMB8GCSqGSIb3DQEJARYS +dGhuYW0ubWVAZ21haWwuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAzlOmB9ioTyA4U2J9rxfTDzgizhF6UtB6p9sbmvG2lakTPhXSHfPYQAzZNT6J +oKvXWHQZ2zf8QtBXsz08nJsamblXfcBw9NVnnUHYMaP9PI+DyR9pzPv3JZVtdIpp +wrjAzvfh3oP6Uh2LwNUgTwwFlVGwut2rFISRSfiWBC5Q1DZyHgNJXxsFxRFQ61xl +EhUsatD4dF49mLjLo2jCRpCB5P/oSzJYqP5Ix9p5Ol0HDg/3R5Ltw8ZvVDcmbRRU +Gw76Mb4zt/89oCOTNI7XCsJ5Q5FTCz2FZ/m/IzDb4m4POYuIHDjnGVSZdfeZ6D1z +OpsfKjiUyrpo5I9KDccqQ2TrqQIDAQABo1MwUTAdBgNVHQ4EFgQU/Ytzpowejmfk +a/KcYxeRRjB5nF4wHwYDVR0jBBgwFoAU/Ytzpowejmfka/KcYxeRRjB5nF4wDwYD +VR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAcJ4463CUefQZ6JwI3UPN +TjgSrX/Swe3AxpnYy6J+LnC1qUXJdUrQSp8hG1Qi82xy6x380usR7ZC7SSu3z6O2 +JGhg0/eB7v+sArmXO4K2uelkMWTuPdBkA7eTP5EUT7uFhyrQQxcy0l94aK+y6rHx +JYxe4dyvwHP9t0WUYVVIHvdtd6+7PfLV8nWEDhPBP+Wv8mhvIX4k9ZVZQVfoYxmw +odK2ylBkLeP3uC9GNp2DOVxiDEvBjWC4ZUYGsi8lycQibY05+suRhNslDc/dTd3T +xLP24dbQ/VeeTXudJRjoHh19A7pCZ64ihJKWPT6n10ws8ju5tb8uGKTDh9TZXtJV +Xw== +-----END CERTIFICATE----- diff --git a/main/certs/prvtkey.pem b/main/certs/prvtkey.pem new file mode 100644 index 0000000..e9340ba --- /dev/null +++ b/main/certs/prvtkey.pem @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDOU6YH2KhPIDhT +Yn2vF9MPOCLOEXpS0Hqn2xua8baVqRM+FdId89hADNk1Pomgq9dYdBnbN/xC0Fez +PTycmxqZuVd9wHD01WedQdgxo/08j4PJH2nM+/cllW10imnCuMDO9+Heg/pSHYvA +1SBPDAWVUbC63asUhJFJ+JYELlDUNnIeA0lfGwXFEVDrXGUSFSxq0Ph0Xj2YuMuj +aMJGkIHk/+hLMlio/kjH2nk6XQcOD/dHku3Dxm9UNyZtFFQbDvoxvjO3/z2gI5M0 +jtcKwnlDkVMLPYVn+b8jMNvibg85i4gcOOcZVJl195noPXM6mx8qOJTKumjkj0oN +xypDZOupAgMBAAECggEBAMLHaw0rNrEEHMhzSW17U0+h0hGxpEX79F70VRowKAsf +Q0AwP1zxb2v/9SnzsN+SekhRynsOXkIBB1n5bHf3YORQeU0I2Fn6AMgPefZa9t0u +Kt46npnaIBZF+7+yT2d5HOQGVR/Ifg75P466ZLbbBYZSSUIPs8s53yLy30RxKPM8 +BP5KQ+u6s2TpKX5xk9i72wPmx9ZAMbzBXb+Q6yAJRs9ncp54zm6HxNEjGsa2cdKZ +UG3aMgrkVMFP6Qd0gQbJLzcu07cKpMUxx0X8ZaLZfIoiOuuWLo/6vAkcD+aoYMew +R8Ntruvb0+2CRI/pe+CmZtRLrSg94i9GxDn4iP1zVFECgYEA6ddIjOfmJYAOuke7 +jqzR7iDMkpnbr0NETOGz591vdqTxOD65ZKIPAPLsNziVpO+42GPxsIP8lrRBk/9b ++suI7ciqGyvWyT4aMnEFjDmmzTKrTopCXfGriDrrkJ/kwiO04nX30vxr4fiO1cTo +R4be6b9XVmD23WYSR52KZqFy5h0CgYEA4eDm4InuebZYeXxtO+1PT2MuCZGRtFXZ +BCNb/MmYcsdXQpFSf0UlMtD++Y0WqjtCN2ztSbDsBYNNa2/UAxUUsKMhnUrAMAcP +rYl9IxSsXlboDqq+QxTDuA1S9PWhZ+5Qbq0Yo34sMT0GT8h1bPAM5b3jynGt4tI4 +dPkevZuptf0CgYEAxqRSxR/ZqdF2sVduRG0aiCbkoUSCEggaZRT2NuksXqUPJLBj +3NCt3ih98QroVAwwAeIk1cXJNFw7uPUbtZhg4V2s4xgChUF0D5VjGROAVp/MVhOs +/RDmnfsvUNQDB8g9SILd2yUCoBr9eyqiBuDTS81267HDA6BJtvxlLXnImSECgYAc +e4eheMMhheTSLOZ5UAtYL2F2w2xkGQ8sfmjzD1ix4IEYW8rTUZzHM6NzRF8/SAmp +g4rIaA7bAxuYGJnbaaUaQPfUJcDmTX2knFmzOsAhhUPt1Yn4W33yj3uOeArKWDq8 +OgeJVjesXc2V8ekcu4hkz/URahRLLccAuQkvT5mu4QKBgEQdwTaSP+nY36aw+/aj +7bu/GTgfusV9tHTFo5+/WuxM5hFSh+N8oTeEK1j9zBYo2QtTFxG83xKGZuKUJlzB +0zcC7F9af8xoRxfYF5fu7KOj8OHyoP5VATuU5/1THwk74H0lnYPgUG4dbsQhHP48 +VMJof+bmDAu36d8dFAyiHolS +-----END PRIVATE KEY----- diff --git a/main/component.mk b/main/component.mk new file mode 100644 index 0000000..b120d66 --- /dev/null +++ b/main/component.mk @@ -0,0 +1,7 @@ +# +# "main" pseudo-component makefile. +# +# (Uses default behaviour of compiling all source files in directory, adding 'include' to include path.) + +COMPONENT_EMBED_TXTFILES := certs/cacert.pem +COMPONENT_EMBED_TXTFILES += certs/prvtkey.pem diff --git a/main/main.c b/main/main.c new file mode 100644 index 0000000..2cf9369 --- /dev/null +++ b/main/main.c @@ -0,0 +1,127 @@ +/* Simple HTTP + SSL Server 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 +#include +#include +#include +#include +#include "esp_netif.h" +#include "esp_eth.h" +#include "protocol_examples_common.h" + +#include + +/* A simple example that demonstrates how to create GET and POST + * handlers and start an HTTPS server. +*/ + +static const char *TAG = "example"; + + +/* An HTTP GET handler */ +static esp_err_t root_get_handler(httpd_req_t *req) +{ + httpd_resp_set_type(req, "text/html"); + httpd_resp_send(req, "

Hello Secure World!

", -1); // -1 = use strlen() + + return ESP_OK; +} + +static const httpd_uri_t root = { + .uri = "/", + .method = HTTP_GET, + .handler = root_get_handler +}; + + +static httpd_handle_t start_webserver(void) +{ + httpd_handle_t server = NULL; + + // Start the httpd server + ESP_LOGI(TAG, "Starting server"); + + httpd_ssl_config_t conf = HTTPD_SSL_CONFIG_DEFAULT(); + + extern const unsigned char cacert_pem_start[] asm("_binary_cacert_pem_start"); + extern const unsigned char cacert_pem_end[] asm("_binary_cacert_pem_end"); + conf.cacert_pem = cacert_pem_start; + conf.cacert_len = cacert_pem_end - cacert_pem_start; + + extern const unsigned char prvtkey_pem_start[] asm("_binary_prvtkey_pem_start"); + extern const unsigned char prvtkey_pem_end[] asm("_binary_prvtkey_pem_end"); + conf.prvtkey_pem = prvtkey_pem_start; + conf.prvtkey_len = prvtkey_pem_end - prvtkey_pem_start; + + esp_err_t ret = httpd_ssl_start(&server, &conf); + if (ESP_OK != ret) { + ESP_LOGI(TAG, "Error starting server!"); + return NULL; + } + + // Set URI handlers + ESP_LOGI(TAG, "Registering URI handlers"); + httpd_register_uri_handler(server, &root); + return server; +} + +static void stop_webserver(httpd_handle_t server) +{ + // Stop the httpd server + httpd_ssl_stop(server); +} + +static void disconnect_handler(void* arg, esp_event_base_t event_base, + int32_t event_id, void* event_data) +{ + httpd_handle_t* server = (httpd_handle_t*) arg; + if (*server) { + stop_webserver(*server); + *server = NULL; + } +} + +static void connect_handler(void* arg, esp_event_base_t event_base, + int32_t event_id, void* event_data) +{ + httpd_handle_t* server = (httpd_handle_t*) arg; + if (*server == NULL) { + *server = start_webserver(); + } +} + +void app_main(void) +{ + static httpd_handle_t server = NULL; + + ESP_ERROR_CHECK(nvs_flash_init()); + ESP_ERROR_CHECK(esp_netif_init()); + ESP_ERROR_CHECK(esp_event_loop_create_default()); + + /* Register event handlers to start server when Wi-Fi or Ethernet is connected, + * and stop server when disconnection happens. + */ + +#ifdef CONFIG_EXAMPLE_CONNECT_WIFI + ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_STA_GOT_IP, &connect_handler, &server)); + ESP_ERROR_CHECK(esp_event_handler_register(WIFI_EVENT, WIFI_EVENT_STA_DISCONNECTED, &disconnect_handler, &server)); +#endif // CONFIG_EXAMPLE_CONNECT_WIFI +#ifdef CONFIG_EXAMPLE_CONNECT_ETHERNET + ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_ETH_GOT_IP, &connect_handler, &server)); + ESP_ERROR_CHECK(esp_event_handler_register(ETH_EVENT, ETHERNET_EVENT_DISCONNECTED, &disconnect_handler, &server)); +#endif // CONFIG_EXAMPLE_CONNECT_ETHERNET + + /* This helper function configures Wi-Fi or Ethernet, as selected in menuconfig. + * Read "Establishing Wi-Fi or Ethernet Connection" section in + * examples/protocols/README.md for more information about this function. + */ + ESP_ERROR_CHECK(example_connect()); +}