mirror of
https://github.com/suchmememanyskill/CYD-Klipper.git
synced 2026-03-20 21:23:25 +00:00
Fetch data via HTTP
This commit is contained in:
@@ -519,7 +519,7 @@
|
||||
|
||||
#define LV_USE_SPINNER 0
|
||||
|
||||
#define LV_USE_TABVIEW 1
|
||||
#define LV_USE_TABVIEW 0
|
||||
|
||||
#define LV_USE_TILEVIEW 0
|
||||
|
||||
|
||||
@@ -100,7 +100,7 @@ void screen_timer_sleep(lv_timer_t *timer)
|
||||
|
||||
void screen_timer_setup()
|
||||
{
|
||||
screenSleepTimer = lv_timer_create(screen_timer_sleep, 1 * 1000 * 60, NULL);
|
||||
screenSleepTimer = lv_timer_create(screen_timer_sleep, 5 * 1000 * 60, NULL);
|
||||
lv_timer_pause(screenSleepTimer);
|
||||
}
|
||||
|
||||
|
||||
105
CYD-Klipper-Display/src/core/data_setup.cpp
Normal file
105
CYD-Klipper-Display/src/core/data_setup.cpp
Normal file
@@ -0,0 +1,105 @@
|
||||
|
||||
#include "data_setup.h"
|
||||
#include "lvgl.h"
|
||||
#include "../conf/global_config.h"
|
||||
#include <HTTPClient.h>
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
const char * printer_state_messages[] = {
|
||||
"Error",
|
||||
"Idle",
|
||||
"Printing"
|
||||
};
|
||||
|
||||
Printer printer = {0};
|
||||
|
||||
void fetch_printer_state(){
|
||||
char buff[91] = {};
|
||||
sprintf(buff, "http://%s:%d/printer/info", global_config.klipperHost, global_config.klipperPort);
|
||||
HTTPClient client;
|
||||
client.begin(buff);
|
||||
int httpCode = client.GET();
|
||||
if (httpCode == 200) {
|
||||
String payload = client.getString();
|
||||
Serial.println(payload);
|
||||
DynamicJsonDocument doc(1024);
|
||||
deserializeJson(doc, payload);
|
||||
auto result = doc["result"];
|
||||
|
||||
bool update = false;
|
||||
const char* state = result["state"];
|
||||
|
||||
if (strcmp(state, "ready") == 0 && printer.state == PRINTER_STATE_ERROR){
|
||||
printer.state = PRINTER_STATE_IDLE;
|
||||
update = true;
|
||||
}
|
||||
else if (strcmp(state, "shutdown") == 0 && printer.state != PRINTER_STATE_ERROR) {
|
||||
printer.state = PRINTER_STATE_ERROR;
|
||||
update = true;
|
||||
}
|
||||
|
||||
const char* message = result["state_message"];
|
||||
if (printer.state_message == NULL || strcmp(printer.state_message, message)) {
|
||||
if (printer.state_message != NULL){
|
||||
free(printer.state_message);
|
||||
}
|
||||
|
||||
printer.state_message = (char*)malloc(strlen(message) + 1);
|
||||
strcpy(printer.state_message, message);
|
||||
update = true;
|
||||
}
|
||||
|
||||
if (update)
|
||||
lv_msg_send(DATA_PRINTER_STATE, &printer);
|
||||
}
|
||||
else {
|
||||
Serial.printf("Failed to fetch printer state: %d\n", httpCode);
|
||||
}
|
||||
}
|
||||
|
||||
void fetch_printer_data(){
|
||||
char buff[256] = {};
|
||||
sprintf(buff, "http://%s:%d/printer/objects/query?extruder&heater_bed&toolhead", global_config.klipperHost, global_config.klipperPort);
|
||||
HTTPClient client;
|
||||
client.begin(buff);
|
||||
int httpCode = client.GET();
|
||||
if (httpCode == 200) {
|
||||
String payload = client.getString();
|
||||
Serial.println(payload);
|
||||
DynamicJsonDocument doc(2048);
|
||||
deserializeJson(doc, payload);
|
||||
auto status = doc["result"]["status"];
|
||||
if (status.containsKey("extruder")){
|
||||
printer.extruder_temp = status["extruder"]["temperature"];
|
||||
printer.extruder_target_temp = status["extruder"]["target"];
|
||||
}
|
||||
|
||||
if (status.containsKey("heater_bed")){
|
||||
printer.bed_temp = status["heater_bed"]["temperature"];
|
||||
printer.bed_target_temp = status["heater_bed"]["target"];
|
||||
}
|
||||
|
||||
if (status.containsKey("toolhead")){
|
||||
printer.position[0] = status["toolhead"]["position"][0];
|
||||
printer.position[1] = status["toolhead"]["position"][1];
|
||||
printer.position[2] = status["toolhead"]["position"][2];
|
||||
}
|
||||
|
||||
lv_msg_send(DATA_PRINTER_DATA, &printer);
|
||||
}
|
||||
else {
|
||||
Serial.printf("Failed to fetch printer data: %d\n", httpCode);
|
||||
}
|
||||
}
|
||||
|
||||
void data_loop(){
|
||||
// TODO: slow down requests
|
||||
fetch_printer_state();
|
||||
if (printer.state != PRINTER_STATE_ERROR)
|
||||
fetch_printer_data();
|
||||
}
|
||||
|
||||
void data_setup(){
|
||||
fetch_printer_state();
|
||||
fetch_printer_data();
|
||||
}
|
||||
27
CYD-Klipper-Display/src/core/data_setup.h
Normal file
27
CYD-Klipper-Display/src/core/data_setup.h
Normal file
@@ -0,0 +1,27 @@
|
||||
#pragma once
|
||||
|
||||
enum {
|
||||
PRINTER_STATE_ERROR = 0,
|
||||
PRINTER_STATE_IDLE = 1,
|
||||
PRINTER_SATE_PRINTING = 2,
|
||||
};
|
||||
|
||||
extern const char* printer_state_messages[];
|
||||
|
||||
typedef struct Printer {
|
||||
unsigned char state;
|
||||
char* state_message;
|
||||
float extruder_temp;
|
||||
float extruder_target_temp;
|
||||
float bed_temp;
|
||||
float bed_target_temp;
|
||||
float position[3];
|
||||
} _Printer;
|
||||
|
||||
extern Printer printer;
|
||||
|
||||
#define DATA_PRINTER_STATE 1
|
||||
#define DATA_PRINTER_DATA 2
|
||||
|
||||
void data_loop();
|
||||
void data_setup();
|
||||
@@ -4,6 +4,8 @@
|
||||
#include "ui/ip_setup.h"
|
||||
#include "core/websocket_setup.h"
|
||||
#include "lvgl.h"
|
||||
#include "core/data_setup.h"
|
||||
#include "ui/main_ui.h"
|
||||
|
||||
static void event_handler(lv_event_t * e){
|
||||
lv_event_code_t code = lv_event_get_code(e);
|
||||
@@ -26,9 +28,14 @@ void setup() {
|
||||
wifi_init();
|
||||
ip_setup();
|
||||
websocket_setup();
|
||||
data_setup();
|
||||
main_ui_setup();
|
||||
|
||||
|
||||
|
||||
/*
|
||||
lv_obj_clean(lv_scr_act());
|
||||
|
||||
|
||||
lv_obj_t * label;
|
||||
|
||||
lv_obj_t * btn1 = lv_btn_create(lv_scr_act());
|
||||
@@ -44,11 +51,12 @@ void setup() {
|
||||
lv_obj_align(slider, LV_ALIGN_CENTER, 0, 40);
|
||||
lv_slider_set_range(slider, 0, 100);
|
||||
lv_slider_set_value(slider, 50, LV_ANIM_OFF);
|
||||
*/
|
||||
}
|
||||
|
||||
void loop(){
|
||||
wifi_ok();
|
||||
websocket_process();
|
||||
data_loop();
|
||||
lv_timer_handler();
|
||||
lv_task_handler();
|
||||
}
|
||||
@@ -66,7 +66,7 @@ void ip_setup_inner(){
|
||||
|
||||
ipEntry = lv_textarea_create(lv_scr_act());
|
||||
lv_textarea_set_one_line(ipEntry, true);
|
||||
lv_textarea_set_max_length(ipEntry, 57);
|
||||
lv_textarea_set_max_length(ipEntry, 63);
|
||||
lv_textarea_set_text(ipEntry, "");
|
||||
lv_obj_align(ipEntry, LV_ALIGN_TOP_LEFT, 10, 40);
|
||||
lv_obj_add_event_cb(ipEntry, ta_event_cb, LV_EVENT_ALL, keyboard);
|
||||
|
||||
83
CYD-Klipper-Display/src/ui/main_ui.cpp
Normal file
83
CYD-Klipper-Display/src/ui/main_ui.cpp
Normal file
@@ -0,0 +1,83 @@
|
||||
#include "main_ui.h"
|
||||
#include "../core/data_setup.h"
|
||||
#include "lvgl.h"
|
||||
#include <ArduinoJson.h>
|
||||
|
||||
char extruder_temp_buff[20];
|
||||
char bed_temp_buff[20];
|
||||
char position_buff[20];
|
||||
|
||||
static void update_printer_state(lv_event_t * e){
|
||||
lv_obj_t * label = lv_event_get_target(e);
|
||||
|
||||
lv_label_set_text(label, printer_state_messages[printer.state]);
|
||||
}
|
||||
|
||||
static void update_printer_state_message(lv_event_t * e) {
|
||||
lv_obj_t * label = lv_event_get_target(e);
|
||||
|
||||
lv_label_set_text(label, printer.state_message);
|
||||
}
|
||||
|
||||
static void update_printer_data_extruder_temp(lv_event_t * e) {
|
||||
lv_obj_t * label = lv_event_get_target(e);
|
||||
|
||||
sprintf(extruder_temp_buff, "E: %.1f/%.1f", printer.extruder_temp, printer.extruder_target_temp);
|
||||
lv_label_set_text(label, extruder_temp_buff);
|
||||
}
|
||||
|
||||
static void update_printer_data_bed_temp(lv_event_t * e) {
|
||||
lv_obj_t * label = lv_event_get_target(e);
|
||||
|
||||
sprintf(bed_temp_buff, "B: %.1f/%.1f", printer.bed_temp, printer.bed_target_temp);
|
||||
lv_label_set_text(label, bed_temp_buff);
|
||||
}
|
||||
|
||||
static void update_printer_data_position(lv_event_t * e) {
|
||||
lv_obj_t * label = lv_event_get_target(e);
|
||||
|
||||
sprintf(position_buff, "P: %.0f/%.0f/%.0f", printer.position[0], printer.position[1], printer.position[2]);
|
||||
lv_label_set_text(label, position_buff);
|
||||
}
|
||||
|
||||
void main_ui(){
|
||||
lv_obj_clean(lv_scr_act());
|
||||
|
||||
lv_obj_t * label;
|
||||
label = lv_label_create(lv_scr_act());
|
||||
lv_label_set_text(label, "Waiting for update...");
|
||||
lv_obj_align(label, LV_ALIGN_TOP_LEFT, 0, 0);
|
||||
lv_obj_add_event_cb(label, update_printer_state, LV_EVENT_MSG_RECEIVED, NULL);
|
||||
lv_msg_subsribe_obj(DATA_PRINTER_STATE, label, NULL);
|
||||
|
||||
label = lv_label_create(lv_scr_act());
|
||||
lv_label_set_text(label, "Waiting for update...");
|
||||
lv_obj_align(label, LV_ALIGN_TOP_LEFT, 0, 30);
|
||||
lv_obj_add_event_cb(label, update_printer_state_message, LV_EVENT_MSG_RECEIVED, NULL);
|
||||
lv_msg_subsribe_obj(DATA_PRINTER_STATE, label, NULL);
|
||||
|
||||
label = lv_label_create(lv_scr_act());
|
||||
lv_label_set_text(label, "Waiting for update...");
|
||||
lv_obj_align(label, LV_ALIGN_BOTTOM_LEFT, 0, 0);
|
||||
lv_obj_add_event_cb(label, update_printer_data_extruder_temp, LV_EVENT_MSG_RECEIVED, NULL);
|
||||
lv_msg_subsribe_obj(DATA_PRINTER_DATA, label, NULL);
|
||||
|
||||
label = lv_label_create(lv_scr_act());
|
||||
lv_label_set_text(label, "Waiting for update...");
|
||||
lv_obj_align(label, LV_ALIGN_BOTTOM_LEFT, 100, 0);
|
||||
lv_obj_add_event_cb(label, update_printer_data_bed_temp, LV_EVENT_MSG_RECEIVED, NULL);
|
||||
lv_msg_subsribe_obj(DATA_PRINTER_DATA, label, NULL);
|
||||
|
||||
label = lv_label_create(lv_scr_act());
|
||||
lv_label_set_text(label, "Waiting for update...");
|
||||
lv_obj_align(label, LV_ALIGN_BOTTOM_LEFT, 200, 0);
|
||||
lv_obj_add_event_cb(label, update_printer_data_position, LV_EVENT_MSG_RECEIVED, NULL);
|
||||
lv_msg_subsribe_obj(DATA_PRINTER_DATA, label, NULL);
|
||||
}
|
||||
|
||||
void main_ui_setup(){
|
||||
// TODO: Subscribe to events
|
||||
main_ui();
|
||||
lv_msg_send(DATA_PRINTER_STATE, &printer);
|
||||
lv_msg_send(DATA_PRINTER_DATA, &printer);
|
||||
}
|
||||
2
CYD-Klipper-Display/src/ui/main_ui.h
Normal file
2
CYD-Klipper-Display/src/ui/main_ui.h
Normal file
@@ -0,0 +1,2 @@
|
||||
void main_ui();
|
||||
void main_ui_setup();
|
||||
Reference in New Issue
Block a user