mirror of
https://codeberg.org/mclemens/hr50-remote-display.git
synced 2024-06-19 22:25:25 +00:00
PRG button now sends command to API
This commit is contained in:
parent
f2a002a83f
commit
ecf516dd4b
|
@ -5,23 +5,77 @@
|
||||||
#include <ArduinoJson.h>
|
#include <ArduinoJson.h>
|
||||||
#include "hr50_fonts.h"
|
#include "hr50_fonts.h"
|
||||||
|
|
||||||
|
#define ESP_INTR_FLAG_DEFAULT 0
|
||||||
|
#define PRG_BUTTON 0
|
||||||
|
|
||||||
|
|
||||||
const char* ssid = "<WIFI-SSID>";
|
const char* ssid = "<WIFI-SSID>";
|
||||||
const char* password = "<WIFI-PASSWORD>";
|
const char* password = "<WIFI-PASSWORD>";
|
||||||
String api_url = "http://<IP_OF_HR50_API>:5000/status";
|
String api_base_url = "http://<IP_OF_HR50_API>:5000";
|
||||||
|
//String api_button_url = api_base_url + "/?cmd=hrtu1";
|
||||||
|
String api_button_url = api_base_url + "/exec";
|
||||||
|
String api_status_url = api_base_url + "/status";
|
||||||
int first_row = 0;
|
int first_row = 0;
|
||||||
int second_row = 24;
|
int second_row = 24;
|
||||||
int third_row = 48;
|
int third_row = 48;
|
||||||
int left = 0;
|
int left = 0;
|
||||||
int right = 128;
|
int right = 128;
|
||||||
|
String cmd_status = "";
|
||||||
|
|
||||||
|
SemaphoreHandle_t semaphore = nullptr;
|
||||||
|
|
||||||
|
void IRAM_ATTR handler(void* arg) {
|
||||||
|
xSemaphoreGiveFromISR(semaphore, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void button_task(void* arg) {
|
||||||
|
for (;;) {
|
||||||
|
if (xSemaphoreTake(semaphore, portMAX_DELAY) == pdTRUE) {
|
||||||
|
cmd_status = send_http_request(api_button_url);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String send_http_request(String url) {
|
||||||
|
HTTPClient http;
|
||||||
|
String response = "";
|
||||||
|
http.begin(url.c_str());
|
||||||
|
// Send HTTP GET request
|
||||||
|
int httpResponseCode = http.GET();
|
||||||
|
if (httpResponseCode > 0) {
|
||||||
|
response = http.getString();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
printError("HTTPError: " + (String)httpResponseCode);
|
||||||
|
}
|
||||||
|
http.end();
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void setup() {
|
void setup() {
|
||||||
Heltec.begin(true /*DisplayEnable Enable*/, false /*LoRa Disable*/, false /*Serial Enable*/);
|
Heltec.begin(true /*DisplayEnable Enable*/, false /*LoRa Disable*/, false /*Serial Enable*/);
|
||||||
Heltec.display->flipScreenVertically();
|
Heltec.display->flipScreenVertically();
|
||||||
Heltec.display->setFont(DialogInput_plain_16);
|
Heltec.display->setFont(DialogInput_plain_16);
|
||||||
|
|
||||||
WiFi.begin(ssid, password);
|
WiFi.begin(ssid, password);
|
||||||
delay(4000);
|
delay(4000);
|
||||||
|
|
||||||
|
// Configure PRG button of the Heltec
|
||||||
|
semaphore = xSemaphoreCreateBinary();
|
||||||
|
// Setup the button GPIO pin
|
||||||
|
gpio_pad_select_gpio(PRG_BUTTON );
|
||||||
|
// Quite obvious, a button is a input
|
||||||
|
gpio_set_direction(GPIO_NUM_0, GPIO_MODE_INPUT);
|
||||||
|
// Trigger the interrupt when going from HIGH -> LOW ( == pushing button)
|
||||||
|
gpio_set_intr_type(GPIO_NUM_0, GPIO_INTR_NEGEDGE);
|
||||||
|
// Associate button_task method as a callback
|
||||||
|
xTaskCreate(button_task, "prg_button_task", 4096, NULL, 10, NULL);
|
||||||
|
// Install ISR service
|
||||||
|
gpio_install_isr_service(ESP_INTR_FLAG_DEFAULT);
|
||||||
|
// Add button handler to the ISR
|
||||||
|
gpio_isr_handler_add(GPIO_NUM_0, handler, NULL);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void printError(String err) {
|
void printError(String err) {
|
||||||
|
@ -31,38 +85,18 @@ void printError(String err) {
|
||||||
Heltec.display->display();
|
Heltec.display->display();
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop() {
|
|
||||||
//Check WiFi connection status
|
|
||||||
if (WiFi.status() == WL_CONNECTED) {
|
|
||||||
HTTPClient http;
|
|
||||||
String payload = "";
|
|
||||||
http.begin(api_url.c_str());
|
|
||||||
|
|
||||||
// Send HTTP GET request
|
void print_status_screen(JsonObject status_json) {
|
||||||
int httpResponseCode = http.GET();
|
|
||||||
|
|
||||||
if (httpResponseCode > 0) {
|
if ( status_json != NULL and status_json["PTT"].as<String>() != "ERR") {
|
||||||
payload = http.getString();
|
String band = status_json["BND"].as<String>();
|
||||||
}
|
String pep = status_json["PEP"].as<String>();
|
||||||
else {
|
String avg = status_json["AVG"].as<String>();
|
||||||
printError("HTTPError: " + (String)httpResponseCode);
|
String swr = status_json["SWR"].as<String>();
|
||||||
}
|
String voltage = status_json["VLT"].as<String>();
|
||||||
// Free resources
|
|
||||||
http.end();
|
|
||||||
|
|
||||||
StaticJsonDocument<200> doc;
|
|
||||||
deserializeJson(doc, payload);
|
|
||||||
JsonObject obj = doc.as<JsonObject>();
|
|
||||||
|
|
||||||
if ( obj != NULL and obj["PTT"].as<String>() != "ERR") {
|
|
||||||
String band = obj["BND"].as<String>();
|
|
||||||
String pep = obj["PEP"].as<String>();
|
|
||||||
String avg = obj["AVG"].as<String>();
|
|
||||||
String swr = obj["SWR"].as<String>();
|
|
||||||
String voltage = obj["VLT"].as<String>();
|
|
||||||
String power = pep + "W/" + avg + "W";
|
String power = pep + "W/" + avg + "W";
|
||||||
String ptt = obj["PTT"].as<String>();
|
String ptt = status_json["PTT"].as<String>();
|
||||||
String temp = obj["TMP"].as<String>();
|
String temp = status_json["TMP"].as<String>();
|
||||||
|
|
||||||
// clear the display
|
// clear the display
|
||||||
Heltec.display->clear();
|
Heltec.display->clear();
|
||||||
|
@ -70,7 +104,11 @@ void loop() {
|
||||||
Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
|
Heltec.display->setTextAlignment(TEXT_ALIGN_LEFT);
|
||||||
Heltec.display->drawString(left, first_row, band );
|
Heltec.display->drawString(left, first_row, band );
|
||||||
Heltec.display->drawString(left, second_row, power );
|
Heltec.display->drawString(left, second_row, power );
|
||||||
Heltec.display->drawString(left, third_row, voltage );
|
if ( cmd_status == "" ) {
|
||||||
|
Heltec.display->drawString(left, third_row, voltage );
|
||||||
|
} else {
|
||||||
|
Heltec.display->drawString(left, third_row, cmd_status );
|
||||||
|
}
|
||||||
// print right column
|
// print right column
|
||||||
Heltec.display->setTextAlignment(TEXT_ALIGN_RIGHT);
|
Heltec.display->setTextAlignment(TEXT_ALIGN_RIGHT);
|
||||||
Heltec.display->drawString(right, first_row, swr );
|
Heltec.display->drawString(right, first_row, swr );
|
||||||
|
@ -87,6 +125,18 @@ void loop() {
|
||||||
Heltec.display->drawString(58, third_row, "(!)" );
|
Heltec.display->drawString(58, third_row, "(!)" );
|
||||||
Heltec.display->display();
|
Heltec.display->display();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
//Check WiFi connection status
|
||||||
|
if (WiFi.status() == WL_CONNECTED) {
|
||||||
|
String response = send_http_request(api_status_url);
|
||||||
|
StaticJsonDocument<200> doc;
|
||||||
|
deserializeJson(doc, response);
|
||||||
|
JsonObject obj = doc.as<JsonObject>();
|
||||||
|
print_status_screen(obj);
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
printError("No WiFi!");
|
printError("No WiFi!");
|
||||||
|
|
Loading…
Reference in New Issue
Block a user