diff --git a/README.md b/README.md index 33e4bc96..0e8b82d8 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,14 @@ If you would like to support the developer with a cup of coffee you can do that **General remark:** Beside the `firmware.bin`, typically also the content of `/html` needs to be updated! -##### Rolling (2021-01-23) +##### Rolling (2021-02-03) + +* Pinned espressif32 to version 2.1.0 + With the update to v3.0.0 code can be compiled, but is not functional - major checks (and chances?) needed + + +2021-01-23 + * Implementation of image brightness setting diff --git a/code/components/connect_wlan/connect_wlan._cpp_ b/code/components/connect_wlan/connect_wlan._cpp_ new file mode 100644 index 00000000..eab7a500 --- /dev/null +++ b/code/components/connect_wlan/connect_wlan._cpp_ @@ -0,0 +1,539 @@ +#include "connect_wlan.h" + +#include +#include "freertos/FreeRTOS.h" +#include "freertos/task.h" +#include "freertos/event_groups.h" +#include "esp_wifi.h" +#include "esp_log.h" + +#include +#include +#include + +#include "Helper.h" + +static const char *TAG = "connect_wlan"; + +std::string ssid = ""; +std::string passphrase = ""; +std::string hostname = ""; +std::string ipaddress = ""; +std::string gw = ""; +std::string netmask = ""; +std::string dns = ""; + +std::string std_hostname = "watermeter"; + +#define BLINK_GPIO GPIO_NUM_33 + +static EventGroupHandle_t s_wifi_event_group; + +#define WIFI_CONNECTED_BIT BIT0 +#define WIFI_FAIL_BIT BIT1 +static int s_retry_num = 0; + + +std::vector ZerlegeZeile(std::string input, std::string _delimiter = "") +{ + std::vector Output; + std::string delimiter = " =,"; + if (_delimiter.length() > 0){ + delimiter = _delimiter; + } + + input = trim(input, delimiter); + size_t pos = findDelimiterPos(input, delimiter); + std::string token; + while (pos != std::string::npos) { + token = input.substr(0, pos); + token = trim(token, delimiter); + Output.push_back(token); + input.erase(0, pos + 1); + input = trim(input, delimiter); + pos = findDelimiterPos(input, delimiter); + } + Output.push_back(input); + + return Output; +} + + +void blinkstatus(int dauer, int _anzahl) +{ + gpio_reset_pin(BLINK_GPIO); + gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT); + for (int i = 0; i < _anzahl; ++i) + { + gpio_set_level(BLINK_GPIO, 0); + vTaskDelay(dauer / portTICK_PERIOD_MS); + gpio_set_level(BLINK_GPIO, 1); + vTaskDelay(dauer / portTICK_PERIOD_MS); + } +} + + + + +void strinttoip4(std::string ip, int &a, int &b, int &c, int &d) { + std::stringstream s(ip); + char ch; //to temporarily store the '.' + s >> a >> ch >> b >> ch >> c >> ch >> d; +} + + + + +static void event_handler_neu(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) { + blinkstatus(200, 1); + esp_wifi_connect(); + } else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED) { + blinkstatus(200, 5); + esp_wifi_connect(); + s_retry_num++; + ESP_LOGI(TAG, "retry to connect to the AP"); + } else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP) { + blinkstatus(1000, 3); + 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 initialise_wifi() +{ + 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_neu, + NULL, + &instance_any_id)); + ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT, + IP_EVENT_STA_GOT_IP, + &event_handler_neu, + NULL, + &instance_got_ip)); + + + wifi_config_t wifi_config = { }; + strcpy((char*)wifi_config.sta.ssid, (const char*)ssid.c_str()); + strcpy((char*)wifi_config.sta.password, (const char*)passphrase.c_str()); + + 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", + ssid.c_str(), passphrase.c_str()); + } else if (bits & WIFI_FAIL_BIT) { + ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s", + ssid.c_str(), passphrase.c_str()); + } else { + ESP_LOGE(TAG, "UNEXPECTED EVENT"); + } + + // The event will not be processed after unregister + ESP_ERROR_CHECK(esp_event_handler_instance_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, instance_got_ip)); + ESP_ERROR_CHECK(esp_event_handler_instance_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, instance_any_id)); + vEventGroupDelete(s_wifi_event_group); + + tcpip_adapter_ip_info_t ip_info; + ESP_ERROR_CHECK(tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_STA, &ip_info)); + ipaddress = std::string(ip4addr_ntoa(&ip_info.ip)); + netmask = std::string(ip4addr_ntoa(&ip_info.netmask)); + gw = std::string(ip4addr_ntoa(&ip_info.gw)); + printf("IPv4 : %s\n", ip4addr_ntoa(&ip_info.ip)); + printf("HostName : %s\n", hostname.c_str()); +} + + +void initialise_wifi_fixed_ip2() +{ + s_wifi_event_group = xEventGroupCreate(); + ESP_ERROR_CHECK(esp_netif_init()); + ESP_ERROR_CHECK(esp_event_loop_create_default()); + esp_netif_t *my_sta = esp_netif_create_default_wifi_sta(); + + esp_netif_dhcpc_stop(my_sta); + + esp_netif_ip_info_t ip_info; + + int a, b, c, d; + + strinttoip4(ipaddress, a, b, c, d); + IP4_ADDR(&ip_info.ip, a, b, c, d); + + strinttoip4(gw, a, b, c, d); + IP4_ADDR(&ip_info.gw, a, b, c, d); + + strinttoip4(netmask, a, b, c, d); + IP4_ADDR(&ip_info.netmask, a, b, c, d); + + esp_netif_set_ip_info(my_sta, &ip_info); + + + wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); + ESP_ERROR_CHECK(esp_wifi_init(&cfg)); + + if (dns.length() > 0) { + esp_netif_dns_info_t dns_info; + ip4_addr_t ip; + ip.addr = esp_ip4addr_aton(dns.c_str()); + ip_addr_set_ip4_u32(&dns_info.ip, ip.addr); + ESP_ERROR_CHECK(esp_netif_set_dns_info(my_sta, ESP_NETIF_DNS_MAIN, &dns_info)); + } + + + 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_neu, + NULL, + &instance_any_id)); + ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT, + IP_EVENT_STA_GOT_IP, + &event_handler_neu, + NULL, + &instance_got_ip)); + + + wifi_config_t wifi_config = { }; + strcpy((char*)wifi_config.sta.ssid, (const char*)ssid.c_str()); + strcpy((char*)wifi_config.sta.password, (const char*)passphrase.c_str()); + + 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", + ssid.c_str(), passphrase.c_str()); + } else if (bits & WIFI_FAIL_BIT) { + ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s", + ssid.c_str(), passphrase.c_str()); + } else { + ESP_LOGE(TAG, "UNEXPECTED EVENT"); + } + + // The event will not be processed after unregister + ESP_ERROR_CHECK(esp_event_handler_instance_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, instance_got_ip)); + ESP_ERROR_CHECK(esp_event_handler_instance_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, instance_any_id)); + vEventGroupDelete(s_wifi_event_group); + + tcpip_adapter_ip_info_t ip_info2; + ESP_ERROR_CHECK(tcpip_adapter_get_ip_info(TCPIP_ADAPTER_IF_STA, &ip_info2)); + ipaddress = std::string(ip4addr_ntoa(&ip_info2.ip)); + netmask = std::string(ip4addr_ntoa(&ip_info2.netmask)); + gw = std::string(ip4addr_ntoa(&ip_info2.gw)); +} + +void ConnectToWLAN() +{ + if (ipaddress.length() == 0 || gw.length() == 0 || netmask.length() == 0) + { + printf("Connect to WLAN with dyn. IP\n"); + initialise_wifi(); + } + else + { + printf("Connect to WLAN with fixed IP\n"); + initialise_wifi_fixed_ip2(); + } +} + + +bool ChangeHostName(std::string fn, std::string _newhostname) +{ + if (_newhostname == hostname) + return false; + + string line = ""; + std::vector zerlegt; + + bool found = false; + + std::vector neuesfile; + + FILE* pFile; + fn = FormatFileName(fn); + pFile = OpenFileAndWait(fn.c_str(), "r"); + + printf("file loaded\n"); + + if (pFile == NULL) + return false; + + char zw[1024]; + fgets(zw, 1024, pFile); + line = std::string(zw); + + while ((line.size() > 0) || !(feof(pFile))) + { + printf("%s", line.c_str()); + zerlegt = ZerlegeZeile(line, "="); + zerlegt[0] = trim(zerlegt[0], " "); + + if ((zerlegt.size() > 1) && (toUpper(zerlegt[0]) == "HOSTNAME")){ + line = "hostname = \"" + _newhostname + "\"\n"; + found = true; + } + + neuesfile.push_back(line); + + if (fgets(zw, 1024, pFile) == NULL) + { + line = ""; + } + else + { + line = std::string(zw); + } + } + + if (!found) + { + line = "hostname = \"" + _newhostname + "\"\n"; + neuesfile.push_back(line); + } + + fclose(pFile); + + pFile = OpenFileAndWait(fn.c_str(), "w+"); + + for (int i = 0; i < neuesfile.size(); ++i) + { + fputs(neuesfile[i].c_str(), pFile); + } + + fclose(pFile); + + return true; +} + + +void LoadWlanFromFile(std::string fn) +{ + string line = ""; + std::vector zerlegt; + hostname = std_hostname; + + FILE* pFile; + fn = FormatFileName(fn); + + pFile = OpenFileAndWait(fn.c_str(), "r"); + printf("file loaded\n"); + + if (pFile == NULL) + return; + + char zw[1024]; + fgets(zw, 1024, pFile); + line = std::string(zw); + + while ((line.size() > 0) || !(feof(pFile))) + { + printf("%s", line.c_str()); + zerlegt = ZerlegeZeile(line, "="); + zerlegt[0] = trim(zerlegt[0], " "); + for (int i = 2; i < zerlegt.size(); ++i) + zerlegt[i] = zerlegt[i-1] + zerlegt[i]; + + if ((zerlegt.size() > 1) && (toUpper(zerlegt[0]) == "HOSTNAME")){ + hostname = trim(zerlegt[1]); + if ((hostname[0] == '"') && (hostname[hostname.length()-1] == '"')){ + hostname = hostname.substr(1, hostname.length()-2); + } + } + + if ((zerlegt.size() > 1) && (toUpper(zerlegt[0]) == "SSID")){ + ssid = trim(zerlegt[1]); + if ((ssid[0] == '"') && (ssid[ssid.length()-1] == '"')){ + ssid = ssid.substr(1, ssid.length()-2); + } + } + + if ((zerlegt.size() > 1) && (toUpper(zerlegt[0]) == "PASSWORD")){ + passphrase = zerlegt[1]; + if ((passphrase[0] == '"') && (passphrase[passphrase.length()-1] == '"')){ + passphrase = passphrase.substr(1, passphrase.length()-2); + } + } + + if ((zerlegt.size() > 1) && (toUpper(zerlegt[0]) == "IP")){ + ipaddress = zerlegt[1]; + if ((ipaddress[0] == '"') && (ipaddress[ipaddress.length()-1] == '"')){ + ipaddress = ipaddress.substr(1, ipaddress.length()-2); + } + } + + if ((zerlegt.size() > 1) && (toUpper(zerlegt[0]) == "GATEWAY")){ + gw = zerlegt[1]; + if ((gw[0] == '"') && (gw[gw.length()-1] == '"')){ + gw = gw.substr(1, gw.length()-2); + } + } + + if ((zerlegt.size() > 1) && (toUpper(zerlegt[0]) == "NETMASK")){ + netmask = zerlegt[1]; + if ((netmask[0] == '"') && (netmask[netmask.length()-1] == '"')){ + netmask = netmask.substr(1, netmask.length()-2); + } + } + + if ((zerlegt.size() > 1) && (toUpper(zerlegt[0]) == "DNS")){ + dns = zerlegt[1]; + if ((dns[0] == '"') && (dns[dns.length()-1] == '"')){ + dns = dns.substr(1, dns.length()-2); + } + } + + + if (fgets(zw, 1024, pFile) == NULL) + { + line = ""; + } + else + { + line = std::string(zw); + } + } + + fclose(pFile); + + // Check if Hostname was empty in .ini if yes set to std_hostname + if(hostname.length() <= 0){ + hostname = std_hostname; + } + + printf("\nWLan: %s, %s\n", ssid.c_str(), passphrase.c_str()); + printf("Hostename: %s\n", hostname.c_str()); + printf("Fixed IP: %s, Gateway %s, Netmask %s, DNS %s\n", ipaddress.c_str(), gw.c_str(), netmask.c_str(), dns.c_str()); + +} + +void LoadNetConfigFromFile(std::string _fn, std::string &_ip, std::string &_gw, std::string &_netmask, std::string &_dns) +{ + string line = ""; + std::vector zerlegt; + + + + FILE* pFile; + _fn = FormatFileName(_fn); + pFile = OpenFileAndWait(_fn.c_str(), "r"); + + if (pFile == NULL) + return; + + char zw[1024]; + fgets(zw, 1024, pFile); + line = std::string(zw); + + while ((line.size() > 0) || !(feof(pFile))) + { + printf("%s", line.c_str()); + zerlegt = ZerlegeZeile(line, "="); + zerlegt[0] = trim(zerlegt[0], " "); + + if ((zerlegt.size() > 1) && (toUpper(zerlegt[0]) == "IP")){ + _ip = zerlegt[1]; + if ((_ip[0] == '"') && (_ip[_ip.length()-1] == '"')){ + _ip = _ip.substr(1, _ip.length()-2); + } + } + + if ((zerlegt.size() > 1) && (toUpper(zerlegt[0]) == "GATEWAY")){ + _gw = zerlegt[1]; + if ((_gw[0] == '"') && (_gw[_gw.length()-1] == '"')){ + _gw = _gw.substr(1, _gw.length()-2); + } + } + + if ((zerlegt.size() > 1) && (toUpper(zerlegt[0]) == "NETMASK")){ + _netmask = zerlegt[1]; + if ((_netmask[0] == '"') && (_netmask[_netmask.length()-1] == '"')){ + _netmask = _netmask.substr(1, _netmask.length()-2); + } + } + + if ((zerlegt.size() > 1) && (toUpper(zerlegt[0]) == "DNS")){ + _dns = zerlegt[1]; + if ((_dns[0] == '"') && (_dns[_dns.length()-1] == '"')){ + _dns = _dns.substr(1, _dns.length()-2); + } + } + + if (fgets(zw, 1024, pFile) == NULL) + { + line = ""; + } + else + { + line = std::string(zw); + } + } + + fclose(pFile); +} + + +std::string getHostname(){ + return hostname; +} + +std::string getIPAddress(){ + return ipaddress; +} + +std::string getSSID(){ + return ssid; +} + +std::string getNetMask(){ + return netmask; +} + +std::string getGW(){ + return gw; +} + diff --git a/code/components/connect_wlan/connect_wlan._h_ b/code/components/connect_wlan/connect_wlan._h_ new file mode 100644 index 00000000..f71962c3 --- /dev/null +++ b/code/components/connect_wlan/connect_wlan._h_ @@ -0,0 +1,21 @@ +//#ifndef CONNECT_WLAN_H +//#define CONNECT_WLAN_H + +#include +#include "driver/gpio.h" + +const int CONNECTED_BIT = BIT0; + +void ConnectToWLAN(); + +void LoadWlanFromFile(std::string fn); + +bool ChangeHostName(std::string fn, std::string _newhostname); + +std::string getHostname(); +std::string getIPAddress(); +std::string getSSID(); +std::string getNetMask(); +std::string getGW(); + +//#endif \ No newline at end of file diff --git a/code/components/connect_wlan/connect_wlan.cpp b/code/components/connect_wlan/connect_wlan.cpp index c9f334f6..aa2ea5d9 100644 --- a/code/components/connect_wlan/connect_wlan.cpp +++ b/code/components/connect_wlan/connect_wlan.cpp @@ -23,14 +23,13 @@ static const char *MAIN_TAG = "connect_wlan"; -std::string ssid; -std::string passphrase; -std::string hostname; -std::string ipaddress; -std::string gw; -std::string netmask; -std::string dns; - +std::string ssid = ""; +std::string passphrase = ""; +std::string hostname = ""; +std::string ipaddress = ""; +std::string gw = ""; +std::string netmask = ""; +std::string dns = ""; std::string std_hostname = "watermeter"; static EventGroupHandle_t wifi_event_group; @@ -76,6 +75,8 @@ void wifi_connect(){ ESP_ERROR_CHECK( esp_wifi_connect() ); } + + void blinkstatus(int dauer, int _anzahl) { gpio_reset_pin(BLINK_GPIO); @@ -111,13 +112,11 @@ static esp_err_t event_handler(void *ctx, system_event_t *event) return ESP_OK; } -void initialise_wifi(std::string _ssid, std::string _passphrase, std::string _hostname) +void initialise_wifi() { ESP_ERROR_CHECK(esp_event_loop_init(event_handler, NULL) ); wifi_event_group = xEventGroupCreate(); - ssid = _ssid; - passphrase = _passphrase; - hostname = _hostname; + esp_log_level_set("wifi", ESP_LOG_NONE); // disable wifi driver logging tcpip_adapter_init(); wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); @@ -147,14 +146,9 @@ void strinttoip4(std::string ip, int &a, int &b, int &c, int &d) { s >> a >> ch >> b >> ch >> c >> ch >> d; } -void initialise_wifi_fixed_ip(std::string _ip, std::string _gw, std::string _netmask, std::string _ssid, std::string _passphrase, std::string _hostname, std::string _dns) +void initialise_wifi_fixed_ip() { - ssid = _ssid; - passphrase = _passphrase; - hostname = _hostname; - dns = _dns; - wifi_event_group = xEventGroupCreate(); ESP_ERROR_CHECK(esp_netif_init()); @@ -168,13 +162,13 @@ void initialise_wifi_fixed_ip(std::string _ip, std::string _gw, std::string _net int a, b, c, d; - strinttoip4(_ip, a, b, c, d); + strinttoip4(ipaddress, a, b, c, d); IP4_ADDR(&ip_info.ip, a, b, c, d); - strinttoip4(_gw, a, b, c, d); + strinttoip4(gw, a, b, c, d); IP4_ADDR(&ip_info.gw, a, b, c, d); - strinttoip4(_netmask, a, b, c, d); + strinttoip4(netmask, a, b, c, d); IP4_ADDR(&ip_info.netmask, a, b, c, d); esp_netif_set_ip_info(my_sta, &ip_info); @@ -221,6 +215,23 @@ void initialise_wifi_fixed_ip(std::string _ip, std::string _gw, std::string _net } + +void ConnectToWLAN() +{ + if (ipaddress.length() == 0 || gw.length() == 0 || netmask.length() == 0) + { + printf("Connect to WLAN with dyn. IP\n"); + initialise_wifi(); + } + else + { + printf("Connect to WLAN with fixed IP\n"); + initialise_wifi_fixed_ip(); + } +} + + + bool ChangeHostName(std::string fn, std::string _newhostname) { if (_newhostname == hostname) @@ -290,16 +301,16 @@ bool ChangeHostName(std::string fn, std::string _newhostname) } -void LoadWlanFromFile(std::string fn, std::string &_ssid, std::string &_passphrase, std::string &_hostname) +void LoadWlanFromFile(std::string fn) { string line = ""; std::vector zerlegt; - _hostname = std_hostname; + hostname = std_hostname; FILE* pFile; fn = FormatFileName(fn); - pFile = OpenFileAndWait(fn.c_str(), "r"); + pFile = OpenFileAndWait(fn.c_str(), "r"); printf("file loaded\n"); if (pFile == NULL) @@ -318,26 +329,55 @@ void LoadWlanFromFile(std::string fn, std::string &_ssid, std::string &_passphra zerlegt[i] = zerlegt[i-1] + zerlegt[i]; if ((zerlegt.size() > 1) && (toUpper(zerlegt[0]) == "HOSTNAME")){ - _hostname = trim(zerlegt[1]); - if ((_hostname[0] == '"') && (_hostname[_hostname.length()-1] == '"')){ - _hostname = _hostname.substr(1, _hostname.length()-2); + hostname = trim(zerlegt[1]); + if ((hostname[0] == '"') && (hostname[hostname.length()-1] == '"')){ + hostname = hostname.substr(1, hostname.length()-2); } } if ((zerlegt.size() > 1) && (toUpper(zerlegt[0]) == "SSID")){ - _ssid = trim(zerlegt[1]); - if ((_ssid[0] == '"') && (_ssid[_ssid.length()-1] == '"')){ - _ssid = _ssid.substr(1, _ssid.length()-2); + ssid = trim(zerlegt[1]); + if ((ssid[0] == '"') && (ssid[ssid.length()-1] == '"')){ + ssid = ssid.substr(1, ssid.length()-2); } } if ((zerlegt.size() > 1) && (toUpper(zerlegt[0]) == "PASSWORD")){ - _passphrase = zerlegt[1]; - if ((_passphrase[0] == '"') && (_passphrase[_passphrase.length()-1] == '"')){ - _passphrase = _passphrase.substr(1, _passphrase.length()-2); + passphrase = zerlegt[1]; + if ((passphrase[0] == '"') && (passphrase[passphrase.length()-1] == '"')){ + passphrase = passphrase.substr(1, passphrase.length()-2); } } + if ((zerlegt.size() > 1) && (toUpper(zerlegt[0]) == "IP")){ + ipaddress = zerlegt[1]; + if ((ipaddress[0] == '"') && (ipaddress[ipaddress.length()-1] == '"')){ + ipaddress = ipaddress.substr(1, ipaddress.length()-2); + } + } + + if ((zerlegt.size() > 1) && (toUpper(zerlegt[0]) == "GATEWAY")){ + gw = zerlegt[1]; + if ((gw[0] == '"') && (gw[gw.length()-1] == '"')){ + gw = gw.substr(1, gw.length()-2); + } + } + + if ((zerlegt.size() > 1) && (toUpper(zerlegt[0]) == "NETMASK")){ + netmask = zerlegt[1]; + if ((netmask[0] == '"') && (netmask[netmask.length()-1] == '"')){ + netmask = netmask.substr(1, netmask.length()-2); + } + } + + if ((zerlegt.size() > 1) && (toUpper(zerlegt[0]) == "DNS")){ + dns = zerlegt[1]; + if ((dns[0] == '"') && (dns[dns.length()-1] == '"')){ + dns = dns.substr(1, dns.length()-2); + } + } + + if (fgets(zw, 1024, pFile) == NULL) { line = ""; @@ -351,9 +391,14 @@ void LoadWlanFromFile(std::string fn, std::string &_ssid, std::string &_passphra fclose(pFile); // Check if Hostname was empty in .ini if yes set to std_hostname - if(_hostname.length() <= 0){ - _hostname = std_hostname; + if(hostname.length() <= 0){ + hostname = std_hostname; } + + printf("\nWLan: %s, %s\n", ssid.c_str(), passphrase.c_str()); + printf("Hostename: %s\n", hostname.c_str()); + printf("Fixed IP: %s, Gateway %s, Netmask %s, DNS %s\n", ipaddress.c_str(), gw.c_str(), netmask.c_str(), dns.c_str()); + } void LoadNetConfigFromFile(std::string fn, std::string &_ip, std::string &_gw, std::string &_netmask, std::string &_dns) diff --git a/code/components/connect_wlan/connect_wlan.h b/code/components/connect_wlan/connect_wlan.h index 94cc126f..827f32d2 100644 --- a/code/components/connect_wlan/connect_wlan.h +++ b/code/components/connect_wlan/connect_wlan.h @@ -5,13 +5,9 @@ #include "driver/gpio.h" const int CONNECTED_BIT = BIT0; +void ConnectToWLAN(); -void initialise_wifi(std::string _ssid, std::string _passphrase, std::string _hostname); -void initialise_wifi_fixed_ip(std::string _ip, std::string _gw, std::string _netmask, std::string _ssid, std::string _passphrase, std::string _hostname, std::string _dns = ""); - - -void LoadWlanFromFile(std::string fn, std::string &_ssid, std::string &_passphrase, std::string &_hostname); -void LoadNetConfigFromFile(std::string fn, std::string &_ip, std::string &_gw, std::string &_netmask, std::string &_dns); +void LoadWlanFromFile(std::string fn); bool ChangeHostName(std::string fn, std::string _newhostname); diff --git a/code/main/main.cpp b/code/main/main.cpp index 3097847a..187495a9 100644 --- a/code/main/main.cpp +++ b/code/main/main.cpp @@ -80,40 +80,13 @@ extern "C" void app_main(void) Camera.LightOnOff(false); Init_NVS_SDCard(); -// LogFile.WriteToFile("Startsequence 02"); + CheckOTAUpdate(); -// LogFile.WriteToFile("Startsequence 03"); - std::string ssid = ""; - std::string password = ""; - std::string hostname = ""; - std::string ip = ""; - std::string gw = ""; - std::string netmask = ""; - std::string dns = ""; -// LoadWlanFromFile("/sdcard/wlan.ini", ssid, password, hostname, ip, gw, netmask, dns); - LoadWlanFromFile("/sdcard/wlan.ini", ssid, password, hostname); - LoadNetConfigFromFile("/sdcard/wlan.ini", ip, gw, netmask, dns); - -// LogFile.WriteToFile("Startsequence 04"); - printf("To use WLan: %s, %s\n", ssid.c_str(), password.c_str()); - printf("To set Hostename: %s\n", hostname.c_str()); - printf("Fixed IP: %s, Gateway %s, Netmask %s, DNS %s\n", ip.c_str(), gw.c_str(), netmask.c_str(), dns.c_str()); - - if (ip.length() == 0 || gw.length() == 0 || netmask.length() == 0) - { - initialise_wifi(ssid, password, hostname); - } - else - { - initialise_wifi_fixed_ip(ip, gw, netmask, ssid, password, hostname, dns); - } - - printf("Netparameter: IP: %s - GW: %s - NetMask %s\n", getIPAddress().c_str(), getGW().c_str(), getNetMask().c_str()); + LoadWlanFromFile("/sdcard/wlan.ini"); + ConnectToWLAN(); + printf("\nNetparameter: IP: %s - GW: %s - NetMask %s\n", getIPAddress().c_str(), getGW().c_str(), getNetMask().c_str()); - -// LogFile.WriteToFile("Startsequence 05"); - TickType_t xDelay; xDelay = 2000 / portTICK_PERIOD_MS; printf("Autoflow: sleep for : %ldms\n", (long) xDelay); diff --git a/code/main/version.cpp b/code/main/version.cpp index 81642e39..7b38c088 100644 --- a/code/main/version.cpp +++ b/code/main/version.cpp @@ -1,4 +1,4 @@ -const char* GIT_REV="abc4cb4"; +const char* GIT_REV="8720211"; const char* GIT_TAG=""; const char* GIT_BRANCH="rolling"; -const char* BUILD_TIME="2021-01-23 22:04"; \ No newline at end of file +const char* BUILD_TIME="2021-02-03 21:16"; \ No newline at end of file diff --git a/code/platformio.ini b/code/platformio.ini index 1518eef5..4af22de5 100644 --- a/code/platformio.ini +++ b/code/platformio.ini @@ -14,7 +14,7 @@ src_dir = main [env:esp32cam] -platform = espressif32 +platform = espressif32@2.1.0 board = esp32cam framework = espidf diff --git a/code/sdkconfig b/code/sdkconfig index 30ad0482..7028733c 100644 --- a/code/sdkconfig +++ b/code/sdkconfig @@ -173,95 +173,7 @@ CONFIG_BTDM_BLE_SLEEP_CLOCK_ACCURACY_INDEX_EFF=1 CONFIG_BT_RESERVE_DRAM=0 # end of Bluetooth -CONFIG_BLE_MESH=y -CONFIG_BLE_MESH_HCI_5_0=y -# CONFIG_BLE_MESH_ALLOC_FROM_PSRAM_FIRST is not set -# CONFIG_BLE_MESH_FAST_PROV is not set -# CONFIG_BLE_MESH_NODE is not set -# CONFIG_BLE_MESH_PROVISIONER is not set -CONFIG_BLE_MESH_PROV=y -CONFIG_BLE_MESH_PB_ADV=y -# CONFIG_BLE_MESH_PB_GATT is not set -CONFIG_BLE_MESH_PROXY=y -# CONFIG_BLE_MESH_GATT_PROXY_CLIENT is not set -CONFIG_BLE_MESH_NET_BUF_POOL_USAGE=y -# CONFIG_BLE_MESH_SETTINGS is not set -CONFIG_BLE_MESH_SUBNET_COUNT=3 -CONFIG_BLE_MESH_APP_KEY_COUNT=3 -CONFIG_BLE_MESH_MODEL_KEY_COUNT=3 -CONFIG_BLE_MESH_MODEL_GROUP_COUNT=3 -CONFIG_BLE_MESH_LABEL_COUNT=3 -CONFIG_BLE_MESH_CRPL=10 -CONFIG_BLE_MESH_MSG_CACHE_SIZE=10 -CONFIG_BLE_MESH_ADV_BUF_COUNT=60 -# CONFIG_BLE_MESH_SUPPORT_BLE_ADV is not set -CONFIG_BLE_MESH_IVU_DIVIDER=4 -CONFIG_BLE_MESH_TX_SEG_MSG_COUNT=1 -CONFIG_BLE_MESH_RX_SEG_MSG_COUNT=1 -CONFIG_BLE_MESH_RX_SDU_MAX=384 -CONFIG_BLE_MESH_TX_SEG_MAX=32 -# CONFIG_BLE_MESH_FRIEND is not set -# CONFIG_BLE_MESH_NO_LOG is not set - -# -# BLE Mesh STACK DEBUG LOG LEVEL -# -# CONFIG_BLE_MESH_TRACE_LEVEL_NONE is not set -# CONFIG_BLE_MESH_TRACE_LEVEL_ERROR is not set -CONFIG_BLE_MESH_TRACE_LEVEL_WARNING=y -# CONFIG_BLE_MESH_TRACE_LEVEL_INFO is not set -# CONFIG_BLE_MESH_TRACE_LEVEL_DEBUG is not set -# CONFIG_BLE_MESH_TRACE_LEVEL_VERBOSE is not set -CONFIG_BLE_MESH_STACK_TRACE_LEVEL=2 -# end of BLE Mesh STACK DEBUG LOG LEVEL - -# -# BLE Mesh NET BUF DEBUG LOG LEVEL -# -# CONFIG_BLE_MESH_NET_BUF_TRACE_LEVEL_NONE is not set -# CONFIG_BLE_MESH_NET_BUF_TRACE_LEVEL_ERROR is not set -CONFIG_BLE_MESH_NET_BUF_TRACE_LEVEL_WARNING=y -# CONFIG_BLE_MESH_NET_BUF_TRACE_LEVEL_INFO is not set -# CONFIG_BLE_MESH_NET_BUF_TRACE_LEVEL_DEBUG is not set -# CONFIG_BLE_MESH_NET_BUF_TRACE_LEVEL_VERBOSE is not set -CONFIG_BLE_MESH_NET_BUF_TRACE_LEVEL=2 -# end of BLE Mesh NET BUF DEBUG LOG LEVEL - -CONFIG_BLE_MESH_CLIENT_MSG_TIMEOUT=4000 - -# -# Support for BLE Mesh Client Models -# -# CONFIG_BLE_MESH_CFG_CLI is not set -# CONFIG_BLE_MESH_HEALTH_CLI is not set -# CONFIG_BLE_MESH_GENERIC_ONOFF_CLI is not set -# CONFIG_BLE_MESH_GENERIC_LEVEL_CLI is not set -# CONFIG_BLE_MESH_GENERIC_DEF_TRANS_TIME_CLI is not set -# CONFIG_BLE_MESH_GENERIC_POWER_ONOFF_CLI is not set -# CONFIG_BLE_MESH_GENERIC_POWER_LEVEL_CLI is not set -# CONFIG_BLE_MESH_GENERIC_BATTERY_CLI is not set -# CONFIG_BLE_MESH_GENERIC_LOCATION_CLI is not set -# CONFIG_BLE_MESH_GENERIC_PROPERTY_CLI is not set -# CONFIG_BLE_MESH_SENSOR_CLI is not set -# CONFIG_BLE_MESH_TIME_CLI is not set -# CONFIG_BLE_MESH_SCENE_CLI is not set -# CONFIG_BLE_MESH_SCHEDULER_CLI is not set -# CONFIG_BLE_MESH_LIGHT_LIGHTNESS_CLI is not set -# CONFIG_BLE_MESH_LIGHT_CTL_CLI is not set -# CONFIG_BLE_MESH_LIGHT_HSL_CLI is not set -# CONFIG_BLE_MESH_LIGHT_XYL_CLI is not set -# CONFIG_BLE_MESH_LIGHT_LC_CLI is not set -# end of Support for BLE Mesh Client Models - -# CONFIG_BLE_MESH_IV_UPDATE_TEST is not set - -# -# BLE Mesh specific test option -# -# CONFIG_BLE_MESH_SELF_TEST is not set -# CONFIG_BLE_MESH_SHELL is not set -# CONFIG_BLE_MESH_DEBUG is not set -# end of BLE Mesh specific test option +# CONFIG_BLE_MESH is not set # # CoAP Configuration diff --git a/code/version.cpp b/code/version.cpp index 81642e39..7b38c088 100644 --- a/code/version.cpp +++ b/code/version.cpp @@ -1,4 +1,4 @@ -const char* GIT_REV="abc4cb4"; +const char* GIT_REV="8720211"; const char* GIT_TAG=""; const char* GIT_BRANCH="rolling"; -const char* BUILD_TIME="2021-01-23 22:04"; \ No newline at end of file +const char* BUILD_TIME="2021-02-03 21:16"; \ No newline at end of file diff --git a/firmware/bootloader.bin b/firmware/bootloader.bin index 95b6de48..c1a68508 100644 Binary files a/firmware/bootloader.bin and b/firmware/bootloader.bin differ diff --git a/firmware/firmware.bin b/firmware/firmware.bin index 8f1c948e..f8dc5c80 100644 Binary files a/firmware/firmware.bin and b/firmware/firmware.bin differ diff --git a/firmware/html.zip b/firmware/html.zip index 28432c8b..4b78f3a1 100644 Binary files a/firmware/html.zip and b/firmware/html.zip differ diff --git a/sd-card/html/setup - Kopie.html b/sd-card/html/setup - Kopie.html deleted file mode 100644 index 598d3b49..00000000 --- a/sd-card/html/setup - Kopie.html +++ /dev/null @@ -1,40 +0,0 @@ - - - -jomjol - AI on the edge - - - - - - - -
- - -
- - - - \ No newline at end of file