kopia lustrzana https://github.com/pjalocha/esp32-ogn-tracker
Add GPS and battery status
rodzic
4daf095bf5
commit
56714aeb7d
172
main/http.cpp
172
main/http.cpp
|
@ -14,7 +14,7 @@
|
||||||
// #include "fifo.h"
|
// #include "fifo.h"
|
||||||
// #include "socket.h"
|
// #include "socket.h"
|
||||||
#include "proc.h"
|
#include "proc.h"
|
||||||
// #include "wifi.h"
|
#include "gps.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "http.h"
|
#include "http.h"
|
||||||
|
|
||||||
|
@ -166,6 +166,158 @@ static void ParmForm_AP(httpd_req_t *Req) // Wi-Fi access point parameters { cha
|
||||||
httpd_resp_sendstr_chunk(Req, "</table></form>\n"); }
|
httpd_resp_sendstr_chunk(Req, "</table></form>\n"); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// ============================================================================================================
|
||||||
|
|
||||||
|
static void Table_GPS(httpd_req_t *Req)
|
||||||
|
{ char Line[32]; int Len;
|
||||||
|
uint32_t Time=TimeSync_Time();
|
||||||
|
uint32_t Sec = (Time-1)%60;
|
||||||
|
GPS_Position *GPS = GPS_getPosition(Sec); if(GPS==0) return;
|
||||||
|
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\">\n");
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<tr><th><b>GPS</th><td>");
|
||||||
|
Len=Format_UnsDec(Line, GPS->Year+2000 , 4); Line[Len++]='.';
|
||||||
|
Len+=Format_UnsDec(Line+Len, GPS->Month, 2); Line[Len++]='.';
|
||||||
|
Len+=Format_UnsDec(Line+Len, GPS->Day , 2); Line[Len++]=' ';
|
||||||
|
Len+=Format_UnsDec(Line+Len, GPS->Hour , 2); Line[Len++]=':';
|
||||||
|
Len+=Format_UnsDec(Line+Len, GPS->Min , 2); Line[Len++]=':';
|
||||||
|
Len+=Format_UnsDec(Line+Len, GPS->Sec , 2); Line[Len++]='.';
|
||||||
|
Len+=Format_UnsDec(Line+Len, GPS->FracSec, 2);
|
||||||
|
httpd_resp_send_chunk(Req, Line, Len);
|
||||||
|
httpd_resp_sendstr_chunk(Req, "</td></tr>\n");
|
||||||
|
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<td>Lock</td><td align=\"right\">");
|
||||||
|
if(GPS->FixMode>=2) { strcpy(Line, "0-D "); Line[0]='0'+GPS->FixMode; Len=4; }
|
||||||
|
else { strcpy(Line, "--- "); Len=4; }
|
||||||
|
Len+=Format_UnsDec(Line+Len, GPS->Satellites);
|
||||||
|
Len+=Format_String(Line+Len, "sat Hdop");
|
||||||
|
Len+=Format_UnsDec(Line+Len, GPS->HDOP, 2, 1);
|
||||||
|
httpd_resp_send_chunk(Req, Line, Len);
|
||||||
|
httpd_resp_sendstr_chunk(Req, "</td></tr>\n");
|
||||||
|
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<td>Latitude</td><td align=\"right\">");
|
||||||
|
Len=Format_SignDec(Line, GPS->Latitude/6, 7, 5);
|
||||||
|
httpd_resp_send_chunk(Req, Line, Len);
|
||||||
|
httpd_resp_sendstr_chunk(Req, "°</td></tr>\n");
|
||||||
|
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<td>Longitude</td><td align=\"right\">");
|
||||||
|
Len=Format_SignDec(Line, GPS->Longitude/6, 8, 5);
|
||||||
|
httpd_resp_send_chunk(Req, Line, Len);
|
||||||
|
httpd_resp_sendstr_chunk(Req, "°</td></tr>\n");
|
||||||
|
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<td>Altitude</td><td align=\"right\">");
|
||||||
|
Len=Format_SignDec(Line, GPS->Altitude, 2, 1);
|
||||||
|
httpd_resp_send_chunk(Req, Line, Len);
|
||||||
|
httpd_resp_sendstr_chunk(Req, " m</td></tr>\n");
|
||||||
|
|
||||||
|
if(GPS->hasBaro)
|
||||||
|
{ httpd_resp_sendstr_chunk(Req, "<td>Pressure</td><td align=\"right\">");
|
||||||
|
Len=Format_SignDec(Line, (GPS->Pressure+2)/4, 3, 2);
|
||||||
|
httpd_resp_send_chunk(Req, Line, Len);
|
||||||
|
httpd_resp_sendstr_chunk(Req, " hPa</td></tr>\n");
|
||||||
|
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<td>Pressure Alt.</td><td align=\"right\">");
|
||||||
|
Len=Format_SignDec(Line, GPS->StdAltitude, 2, 1);
|
||||||
|
httpd_resp_send_chunk(Req, Line, Len);
|
||||||
|
httpd_resp_sendstr_chunk(Req, " m</td></tr>\n");
|
||||||
|
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<td>Temperature</td><td align=\"right\">");
|
||||||
|
Len=Format_SignDec(Line, GPS->Temperature, 2, 1);
|
||||||
|
httpd_resp_send_chunk(Req, Line, Len);
|
||||||
|
httpd_resp_sendstr_chunk(Req, " ℃</td></tr>\n"); }
|
||||||
|
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<td>Climb rate</td><td align=\"right\">");
|
||||||
|
Len=Format_SignDec(Line, GPS->ClimbRate, 2, 1);
|
||||||
|
httpd_resp_send_chunk(Req, Line, Len);
|
||||||
|
httpd_resp_sendstr_chunk(Req, " m/s</td></tr>\n");
|
||||||
|
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<td>Hor. speed</td><td align=\"right\">");
|
||||||
|
Len=Format_UnsDec(Line, GPS->Speed, 2, 1);
|
||||||
|
httpd_resp_send_chunk(Req, Line, Len);
|
||||||
|
httpd_resp_sendstr_chunk(Req, " m/s</td></tr>\n");
|
||||||
|
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<td>Hor. track</td><td align=\"right\">");
|
||||||
|
Len=Format_UnsDec(Line, GPS->Heading, 4, 1);
|
||||||
|
httpd_resp_send_chunk(Req, Line, Len);
|
||||||
|
httpd_resp_sendstr_chunk(Req, "°</td></tr>\n");
|
||||||
|
|
||||||
|
httpd_resp_sendstr_chunk(Req, "</table>\n"); }
|
||||||
|
|
||||||
|
static uint8_t BattCapacity(uint16_t mVolt)
|
||||||
|
{ if(mVolt>=4100) return 100;
|
||||||
|
if(mVolt<=3600) return 0;
|
||||||
|
return (mVolt-3600+2)/5; }
|
||||||
|
|
||||||
|
static void Table_Batt(httpd_req_t *Req)
|
||||||
|
{ char Line[16]; int Len;
|
||||||
|
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\">\n");
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<tr><th><b>Battery</th><td></td></tr>\n");
|
||||||
|
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<td>Voltage</td><td align=\"right\">");
|
||||||
|
#ifdef WITH_MAVLINK
|
||||||
|
Len=Format_UnsDec(Line, MAVLINK_BattVolt, 4, 3);
|
||||||
|
#else
|
||||||
|
Len=Format_UnsDec(Line, BatteryVoltage>>8, 4, 3); // print the battery voltage readout
|
||||||
|
#endif
|
||||||
|
httpd_resp_send_chunk(Req, Line, Len);
|
||||||
|
httpd_resp_sendstr_chunk(Req, " V</td></tr>\n");
|
||||||
|
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<tr><td>Capacity</td><td align=\"right\">");
|
||||||
|
#ifdef WITH_MAVLINK
|
||||||
|
uint8_t Cap=MAVLINK_BattCap; // [%] from the drone's telemetry
|
||||||
|
#else
|
||||||
|
uint8_t Cap=BattCapacity(BatteryVoltage>>8); // [%] est. battery capacity based on the voltage readout
|
||||||
|
#endif
|
||||||
|
Len=Format_UnsDec(Line, (uint16_t)Cap);
|
||||||
|
httpd_resp_send_chunk(Req, Line, Len);
|
||||||
|
httpd_resp_sendstr_chunk(Req, " %</td></tr>\n");
|
||||||
|
|
||||||
|
#ifdef WITH_BQ
|
||||||
|
uint8_t Status = BQ.readStatus(); // read status register
|
||||||
|
uint8_t State = (Status>>4)&0x03; // charging status
|
||||||
|
const char *StateName[4] = { "Charge OFF" , "Pre-charge", "Charging", "Full" } ;
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<tr><td>State</td><td align=\"right\">");
|
||||||
|
httpd_resp_sendstr_chunk(Req, StateName[State]);
|
||||||
|
httpd_resp_sendstr_chunk(Req, "</td></tr>\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef WITH_AXP
|
||||||
|
uint16_t InpCurr=AXP.readBatteryInpCurrent(); // [mA]
|
||||||
|
uint16_t OutCurr=AXP.readBatteryOutCurrent(); // [mA]
|
||||||
|
uint16_t Vbus=AXP.readVbusVoltage(); // [mV]
|
||||||
|
uint16_t VbusCurr=AXP.readVbusCurrent(); // [mA]
|
||||||
|
int16_t Temp=AXP.readTemperature(); // [0.1degC]
|
||||||
|
uint32_t InpCharge=AXP.readBatteryInpCharge();
|
||||||
|
uint32_t OutCharge=AXP.readBatteryOutCharge();
|
||||||
|
|
||||||
|
int16_t Current = InpCurr-OutCurr;
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<tr><td>Current</td><td align=\"right\">");
|
||||||
|
Len=Format_SignDec(Line, Current, 3);
|
||||||
|
httpd_resp_send_chunk(Req, Line, Len);
|
||||||
|
httpd_resp_sendstr_chunk(Req, " mA</td></tr>\n");
|
||||||
|
|
||||||
|
int32_t Charge = InpCharge-OutCharge;
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<tr><td>Charge</td><td align=\"right\">");
|
||||||
|
Len=Format_UnsDec(Line, (((int64_t)Charge<<12)+562)/1125, 2, 1);
|
||||||
|
httpd_resp_send_chunk(Req, Line, Len);
|
||||||
|
httpd_resp_sendstr_chunk(Req, " mAh</td></tr>\n");
|
||||||
|
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<tr><td>USB volt.</td><td align=\"right\">");
|
||||||
|
Len=Format_UnsDec(Line, Vbus, 4, 3);
|
||||||
|
httpd_resp_send_chunk(Req, Line, Len);
|
||||||
|
httpd_resp_sendstr_chunk(Req, " V</td></tr>\n");
|
||||||
|
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<tr><td>USB curr.</td><td align=\"right\">");
|
||||||
|
Len=Format_UnsDec(Line, VbusCurr, 4, 3);
|
||||||
|
httpd_resp_send_chunk(Req, Line, Len);
|
||||||
|
httpd_resp_sendstr_chunk(Req, " A</td></tr>\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
httpd_resp_sendstr_chunk(Req, "</table>\n"); }
|
||||||
|
|
||||||
|
// ============================================================================================================
|
||||||
|
|
||||||
static esp_err_t parm_get_handler(httpd_req_t *Req)
|
static esp_err_t parm_get_handler(httpd_req_t *Req)
|
||||||
{ char Line[32]; int Len;
|
{ char Line[32]; int Len;
|
||||||
uint16_t URLlen=httpd_req_get_url_query_len(Req);
|
uint16_t URLlen=httpd_req_get_url_query_len(Req);
|
||||||
|
@ -234,22 +386,26 @@ static esp_err_t parm_get_handler(httpd_req_t *Req)
|
||||||
|
|
||||||
static esp_err_t top_get_handler(httpd_req_t *Req)
|
static esp_err_t top_get_handler(httpd_req_t *Req)
|
||||||
{
|
{
|
||||||
httpd_resp_set_status(Req, "307 Temporary Redirect");
|
// httpd_resp_set_status(Req, "307 Temporary Redirect");
|
||||||
httpd_resp_set_hdr(Req, "Location", "/parm.html");
|
// httpd_resp_set_hdr(Req, "Location", "/parm.html");
|
||||||
httpd_resp_send(Req, 0, 0);
|
// httpd_resp_send(Req, 0, 0);
|
||||||
/*
|
|
||||||
httpd_resp_sendstr_chunk(Req, "\
|
httpd_resp_sendstr_chunk(Req, "\
|
||||||
<!DOCTYPE html>\n\
|
<!DOCTYPE html>\n\
|
||||||
<html><body>\n\
|
<html><body>\n\
|
||||||
<title>OGN-Tracker status</title>\n\
|
<title>OGN-Tracker status</title>\n\
|
||||||
");
|
");
|
||||||
|
|
||||||
httpd_resp_sendstr_chunk(Req, "<h1>OGN-Tracker</h1>\n");
|
httpd_resp_sendstr_chunk(Req, "<h2>OGN-Tracker</h2>\n");
|
||||||
httpd_resp_sendstr_chunk(Req, "<a href=\"parm.html\">Configuration page</a>\n");
|
httpd_resp_sendstr_chunk(Req, "<a href=\"parm.html\"><h3>Configuration</h3></a>\n");
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<a href=\"log.html\"><h3>Log files</h3></a>\n<br />\n");
|
||||||
|
|
||||||
|
Table_GPS(Req);
|
||||||
|
httpd_resp_sendstr_chunk(Req, "<br />\n");
|
||||||
|
Table_Batt(Req);
|
||||||
|
|
||||||
httpd_resp_sendstr_chunk(Req, "</body></html>\n");
|
httpd_resp_sendstr_chunk(Req, "</body></html>\n");
|
||||||
httpd_resp_sendstr_chunk(Req, 0);
|
httpd_resp_sendstr_chunk(Req, 0);
|
||||||
*/
|
|
||||||
return ESP_OK; }
|
return ESP_OK; }
|
||||||
|
|
||||||
static int Format_DateTime(char *Out, time_t Time)
|
static int Format_DateTime(char *Out, time_t Time)
|
||||||
|
|
Ładowanie…
Reference in New Issue