Prototype working, please review code
-
Hello all!
I just got my M5StickCPlus and made a little program to control the screen via a web server. Everything works fine, but I wanted to see if folks had any feedback on the code. I am writing this with the Arduino IDE.
Thanks for any feedback!
#include <esp_http_server.h> // https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/protocols/esp_http_server.html?highlight=webserver#overview #include <HTTP_Method.h> #include <Uri.h> #include <WiFi.h> #include <WiFiMulti.h> #include <M5StickCPlus.h> esp_err_t green_handler(httpd_req_t *req) { const char resp[] = "ok"; httpd_resp_send(req, resp, HTTPD_RESP_USE_STRLEN); M5.Lcd.fillScreen(GREEN); return ESP_OK; } httpd_uri_t uri_green = { .uri = "/green", .method = HTTP_GET, .handler = green_handler, .user_ctx = NULL }; esp_err_t red_handler(httpd_req_t *req) { const char resp[] = "ok"; httpd_resp_send(req, resp, HTTPD_RESP_USE_STRLEN); M5.Lcd.fillScreen(RED); M5.Lcd.setTextColor(BLACK, RED); M5.Lcd.setCursor(0, 0); M5.Lcd.print("\nIN MEETING\n"); return ESP_OK; } httpd_uri_t uri_red = { .uri = "/red", .method = HTTP_GET, .handler = red_handler, .user_ctx = NULL }; esp_err_t off_handler(httpd_req_t *req) { const char resp[] = "ok"; httpd_resp_send(req, resp, HTTPD_RESP_USE_STRLEN); M5.Lcd.fillScreen(BLACK); M5.Lcd.setTextColor(WHITE, BLACK); // TODO: actually turn off screen: https://forum.m5stack.com/topic/1025/m5stickc-turn-off-screen-completely/11 return ESP_OK; } httpd_uri_t uri_off = { .uri = "/off", .method = HTTP_GET, .handler = off_handler, .user_ctx = NULL }; httpd_handle_t start_webserver(void) { httpd_config_t config = HTTPD_DEFAULT_CONFIG(); httpd_handle_t server = NULL; if (httpd_start(&server, &config) == ESP_OK) { httpd_register_uri_handler(server, &uri_green); httpd_register_uri_handler(server, &uri_red); httpd_register_uri_handler(server, &uri_off); } return server; } httpd_handle_t server; WiFiMulti wifiMulti; bool wifi_connected_ran; void setup(){ M5.begin(); M5.Lcd.setRotation(3); M5.Lcd.setTextSize(3); wifiMulti.addAP("Station_slow", "..."); M5.Lcd.print("\nConnecting Wifi...\n"); } void showIP() { M5.Lcd.fillScreen(BLACK); M5.Lcd.setTextColor(WHITE, BLACK); M5.Lcd.setCursor(0, 0); if (wifi_connected_ran) { M5.Lcd.print(WiFi.localIP()); } else { M5.Lcd.print("no wifi (yet?)\n"); } M5.Lcd.print("\n"); } void loop() { M5.update(); if (M5.BtnA.wasReleased()) showIP(); if ((wifiMulti.run() == WL_CONNECTED)) { if (!wifi_connected_ran) { // is this the best way to do this? wifi_connected_ran = true; server = start_webserver(); showIP(); } } delay(1000); // should I do this? }