From 75d630604d35e1a5d8903a23bcef7a429a5dcf9b Mon Sep 17 00:00:00 2001 From: Martin Brodbeck Date: Mon, 2 Jan 2023 14:54:46 +0100 Subject: [PATCH] Move wifi stuff to utils --- src/CMakeLists.txt | 1 + src/abfall.cpp | 72 ++++------------------------------------------ src/utils.cpp | 69 ++++++++++++++++++++++++++++++++++++++++++++ src/utils.h | 8 ++++++ 4 files changed, 83 insertions(+), 67 deletions(-) create mode 100644 src/utils.cpp create mode 100644 src/utils.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f8875d9..6792309 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -2,6 +2,7 @@ set(SOURCES ws2812.cpp + utils.cpp http_client.cpp ntp_client.cpp abfall.cpp diff --git a/src/abfall.cpp b/src/abfall.cpp index 50aa8df..2b3d818 100644 --- a/src/abfall.cpp +++ b/src/abfall.cpp @@ -10,8 +10,7 @@ #include "pico/stdlib.h" #include "pico/util/datetime.h" -//#include "lwip/apps/http_client.h" - +#include "utils.h" #include "ntp_client.h" #include "http_client.h" #include "ws2812.h" @@ -20,80 +19,18 @@ using std::string; #define WS2812_PIN 22 -int wifi_setup(uint32_t country, const string &ssid, const string &pw, bool firstTry = true) { - if (firstTry) { - if (cyw43_arch_init_with_country(country)) { - return 1; - } - } - - cyw43_arch_enable_sta_mode(); - - netif_set_hostname(netif_default, "AbfallPicoW"); - - if (cyw43_arch_wifi_connect_async(ssid.c_str(), pw.c_str(), CYW43_AUTH_WPA2_MIXED_PSK)) { - return 2; - } - - int flashrate = 1000; - int status = CYW43_LINK_UP + 1; - - while (status >= 0 && status != CYW43_LINK_UP) { - int status_new = cyw43_tcpip_link_status(&cyw43_state, CYW43_ITF_STA); - - if (status_new != status) { - status = status_new; - if (status < 0) { - continue; - } - flashrate = flashrate / (status + 1); - // printf("Connect status: %d %d\n", status, flashrate); - } - cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1); - sleep_ms(flashrate); - cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 0); - sleep_ms(flashrate); - } - - if (status < 0) { - cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 0); - } else { - cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1); - - printf("IP: %s\n", ip4addr_ntoa(netif_ip_addr4(netif_default))); - } - - return status; -} - int main() { - const string ssid{"Apis cerana"}; - const string pw{"2JkJEh2vptVT"}; - const uint32_t country{CYW43_COUNTRY_GERMANY}; - stdio_init_all(); rtc_init(); WS2812 led(WS2812_PIN); - bool firstTry = true; - int res = -1; - do { - if (firstTry) { - res = wifi_setup(country, ssid, pw, true); - firstTry = false; - } else { - printf("Setting up connection failed. Trying again after 5 sec...\n"); - sleep_ms(5000); - res = wifi_setup(country, ssid, pw, false); - } - - } while (res != CYW43_LINK_UP); + wifi_setup(); NtpClient::setDateTime(); HttpClient client; - std::string test = client.retrieveWasteDatesAsCsv(); - printf("%s\n", test.c_str()); + std::string csv = client.retrieveWasteDatesAsCsv(); + printf("%s\n", csv.c_str()); char datetime_buf[256]; char *datetime_str = &datetime_buf[0]; @@ -101,6 +38,7 @@ int main() { while (true) { rtc_get_datetime(&dt); + datetime_to_str(datetime_str, sizeof(datetime_buf), &dt); // printf("DateTime: %s\n", datetime_str); led.switchColor(Color::OFF); diff --git a/src/utils.cpp b/src/utils.cpp new file mode 100644 index 0000000..8214d1c --- /dev/null +++ b/src/utils.cpp @@ -0,0 +1,69 @@ +#include "utils.h" + +using std::string; + +int wifi_setup_impl(uint32_t country, const string &ssid, const string &pw, bool firstTry) { + if (firstTry) { + if (cyw43_arch_init_with_country(country)) { + return 1; + } + } + + cyw43_arch_enable_sta_mode(); + + netif_set_hostname(netif_default, "AbfallPicoW"); + + if (cyw43_arch_wifi_connect_async(ssid.c_str(), pw.c_str(), CYW43_AUTH_WPA2_MIXED_PSK)) { + return 2; + } + + int flashrate = 1000; + int status = CYW43_LINK_UP + 1; + + while (status >= 0 && status != CYW43_LINK_UP) { + int status_new = cyw43_tcpip_link_status(&cyw43_state, CYW43_ITF_STA); + + if (status_new != status) { + status = status_new; + if (status < 0) { + continue; + } + flashrate = flashrate / (status + 1); + // printf("Connect status: %d %d\n", status, flashrate); + } + cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1); + sleep_ms(flashrate); + cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 0); + sleep_ms(flashrate); + } + + if (status < 0) { + cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 0); + } else { + cyw43_arch_gpio_put(CYW43_WL_GPIO_LED_PIN, 1); + + printf("IP: %s\n", ip4addr_ntoa(netif_ip_addr4(netif_default))); + } + + return status; +} + +void wifi_setup() { + const string ssid{"Apis cerana"}; + const string pw{"2JkJEh2vptVT"}; + const uint32_t country{CYW43_COUNTRY_GERMANY}; + + bool firstTry = true; + int res = -1; + do { + if (firstTry) { + res = wifi_setup_impl(country, ssid, pw, true); + firstTry = false; + } else { + printf("Setting up connection failed. Trying again after 5 sec...\n"); + sleep_ms(5000); + res = wifi_setup_impl(country, ssid, pw, false); + } + + } while (res != CYW43_LINK_UP); +} \ No newline at end of file diff --git a/src/utils.h b/src/utils.h new file mode 100644 index 0000000..acbe558 --- /dev/null +++ b/src/utils.h @@ -0,0 +1,8 @@ +#pragma once + +#include + +#include "pico/cyw43_arch.h" + +static int wifi_setup_impl(uint32_t country, const std::string &ssid, const std::string &pw, bool firstTry = true); +void wifi_setup(); \ No newline at end of file