Update esp32c3 support
This commit is contained in:
@ -26,9 +26,9 @@ SOFTWARE.
|
||||
|
||||
#if defined(ESP32) && !defined(ESP32S2)
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <NimBLEBeacon.h>
|
||||
#include <NimBLEDevice.h>
|
||||
#include <Arduino.h>
|
||||
|
||||
class BleSender {
|
||||
private:
|
||||
|
@ -143,7 +143,15 @@ class Config {
|
||||
String _mDNS = "";
|
||||
String _otaURL = "";
|
||||
char _tempFormat = 'C';
|
||||
#if defined(ESP8266)
|
||||
float _voltageFactor = 1.59;
|
||||
#elif defined(ESP32C3)
|
||||
float _voltageFactor = 1.3;
|
||||
#elif defined(ESP32S2)
|
||||
float _voltageFactor = 1.3;
|
||||
#else // ESP32
|
||||
float _voltageFactor = 1.3;
|
||||
#endif
|
||||
float _voltageConfig = 4.15;
|
||||
float _tempSensorAdjC = 0;
|
||||
int _sleepInterval = 900;
|
||||
|
@ -61,32 +61,67 @@ void checkResetReason() {
|
||||
writeErrorLog(&s[0]);
|
||||
}
|
||||
#else // defined (ESP32)
|
||||
RESET_REASON r = rtc_get_reset_reason(0); // We only check cpu0 since we dont use cpu1 on the esp32
|
||||
RESET_REASON r = rtc_get_reset_reason(
|
||||
0); // We only check cpu0 since we dont use cpu1 on the esp32
|
||||
String rStr;
|
||||
|
||||
switch (r) {
|
||||
case 0 : rStr = F("None"); break;
|
||||
case 1 : rStr = F("vbat power on reset"); break;
|
||||
case 3 : rStr = F("software reset digital core"); break;
|
||||
case 4 : rStr = F("legacy watch dog reset digital core"); break;
|
||||
case 5 : rStr = F("deep Sleep reset digital core"); break;
|
||||
case 6 : rStr = F("reset by SLC module, reset digital core"); break;
|
||||
case 7 : rStr = F("timer Group0 Watch dog reset digital core"); break;
|
||||
case 8 : rStr = F("timer Group1 Watch dog reset digital core"); break;
|
||||
case 9 : rStr = F("RTC Watch dog Reset digital core"); break;
|
||||
case 10 : rStr = F("instrusion tested to reset CPU"); break;
|
||||
case 11 : rStr = F("time Group reset CPU"); break;
|
||||
case 12 : rStr = F("software reset CPU"); break;
|
||||
case 13 : rStr = F("RTC Watch dog Reset CPU"); break;
|
||||
case 14 : rStr = F("for APP CPU, reseted by PRO CPU"); break;
|
||||
case 15 : rStr = F("reset when the vdd voltage is not stable"); break;
|
||||
case 16 : rStr = F("RTC Watch dog reset digital core and rtc module"); break;
|
||||
default : rStr = F("unknown reset reason"); break;
|
||||
case 0:
|
||||
rStr = F("None");
|
||||
break;
|
||||
case 1:
|
||||
rStr = F("vbat power on reset");
|
||||
break;
|
||||
case 3:
|
||||
rStr = F("software reset digital core");
|
||||
break;
|
||||
case 4:
|
||||
rStr = F("legacy watch dog reset digital core");
|
||||
break;
|
||||
case 5:
|
||||
rStr = F("deep Sleep reset digital core");
|
||||
break;
|
||||
case 6:
|
||||
rStr = F("reset by SLC module, reset digital core");
|
||||
break;
|
||||
case 7:
|
||||
rStr = F("timer Group0 Watch dog reset digital core");
|
||||
break;
|
||||
case 8:
|
||||
rStr = F("timer Group1 Watch dog reset digital core");
|
||||
break;
|
||||
case 9:
|
||||
rStr = F("RTC Watch dog Reset digital core");
|
||||
break;
|
||||
case 10:
|
||||
rStr = F("instrusion tested to reset CPU");
|
||||
break;
|
||||
case 11:
|
||||
rStr = F("time Group reset CPU");
|
||||
break;
|
||||
case 12:
|
||||
rStr = F("software reset CPU");
|
||||
break;
|
||||
case 13:
|
||||
rStr = F("RTC Watch dog Reset CPU");
|
||||
break;
|
||||
case 14:
|
||||
rStr = F("for APP CPU, reseted by PRO CPU");
|
||||
break;
|
||||
case 15:
|
||||
rStr = F("reset when the vdd voltage is not stable");
|
||||
break;
|
||||
case 16:
|
||||
rStr = F("RTC Watch dog reset digital core and rtc module");
|
||||
break;
|
||||
default:
|
||||
rStr = F("unknown reset reason");
|
||||
break;
|
||||
}
|
||||
|
||||
Log.notice(F("HELP: Last reset cause '%s' (%d)" CR), rStr.c_str(), r);
|
||||
|
||||
#warning "TODO: Implement logging of crashes for esp32"
|
||||
#warning "TODO: Implement logging of crashes for esp32"
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -216,6 +251,14 @@ void printTimestamp(Print* _logOutput, int _logLevel) {
|
||||
_logOutput->print(c);
|
||||
}
|
||||
|
||||
BatteryVoltage::BatteryVoltage() {
|
||||
#if defined(ESP8266)
|
||||
pinMode(PIN_A0, INPUT);
|
||||
#else
|
||||
pinMode(PIN_A0, INPUT_PULLDOWN);
|
||||
#endif
|
||||
}
|
||||
|
||||
void BatteryVoltage::read() {
|
||||
// The analog pin can only handle 3.3V maximum voltage so we need to reduce
|
||||
// the voltage (from max 5V)
|
||||
@ -363,7 +406,7 @@ void PerfLogging::pushInflux() {
|
||||
// Send HTTP POST request
|
||||
String auth = "Token " + String(myConfig.getInfluxDb2PushToken());
|
||||
http.addHeader(F("Authorization"), auth.c_str());
|
||||
http.setTimeout(myAdvancedConfig.getPushTimeout());
|
||||
http.setTimeout(myAdvancedConfig.getPushTimeout() * 1000);
|
||||
int httpResponseCode = http.POST(body);
|
||||
|
||||
if (httpResponseCode == 204) {
|
||||
|
@ -88,9 +88,10 @@ class FloatHistoryLog {
|
||||
|
||||
class BatteryVoltage {
|
||||
private:
|
||||
float _batteryLevel;
|
||||
float _batteryLevel = 0;
|
||||
|
||||
public:
|
||||
BatteryVoltage();
|
||||
void read();
|
||||
float getVoltage() { return _batteryLevel; }
|
||||
};
|
||||
|
10
src/main.cpp
10
src/main.cpp
@ -121,12 +121,8 @@ void checkSleepMode(float angle, float volt) {
|
||||
Log.notice(
|
||||
F("Main: Storage mode entered, going to sleep for maximum time." CR));
|
||||
#if defined(ESP8266)
|
||||
// ESP.deepSleep(ESP.deepSleepMax());
|
||||
ESP.deepSleep(0); // indefinite sleep
|
||||
#else
|
||||
#warning "Check and test the max deep sleep for esp32"
|
||||
// deepSleep(70 * 60); // quick search on internet suggest max time is 70
|
||||
// min
|
||||
ESP.deepSleep(0); // indefinite sleep
|
||||
#endif
|
||||
}
|
||||
@ -141,8 +137,8 @@ void setup() {
|
||||
// Add a delay so that serial is started.
|
||||
// delay(3000);
|
||||
#endif
|
||||
// Main startup
|
||||
|
||||
// Main startup
|
||||
#if defined(ESP8266)
|
||||
Log.notice(F("Main: Started setup for %s." CR),
|
||||
String(ESP.getChipId(), HEX).c_str());
|
||||
@ -161,7 +157,7 @@ void setup() {
|
||||
|
||||
LOG_PERF_START("main-config-load");
|
||||
myConfig.checkFileSystem();
|
||||
//checkResetReason();
|
||||
checkResetReason();
|
||||
myConfig.loadFile();
|
||||
myWifi.init();
|
||||
myAdvancedConfig.loadFile();
|
||||
@ -209,6 +205,8 @@ void setup() {
|
||||
|
||||
myBatteryVoltage.read();
|
||||
checkSleepMode(myGyro.getAngle(), myBatteryVoltage.getVoltage());
|
||||
Log.notice(F("Main: Battery %F V, Gyro=%F, Run-mode=%d." CR),
|
||||
myBatteryVoltage.getVoltage(), myGyro.getAngle(), runMode);
|
||||
|
||||
#if defined(ESP32)
|
||||
if (!myConfig.isWifiPushActive() && runMode == RunMode::gravityMode) {
|
||||
|
@ -48,6 +48,7 @@ extern RunMode runMode;
|
||||
#elif defined(ESP32C3)
|
||||
#include <FS.h>
|
||||
#include <LittleFS.h>
|
||||
|
||||
#include "esp32c3/rom/rtc.h"
|
||||
#define ESPhttpUpdate httpUpdate
|
||||
#define ESP_RESET ESP.restart
|
||||
@ -62,12 +63,14 @@ extern RunMode runMode;
|
||||
#endif
|
||||
#define PIN_DS A3
|
||||
#define PIN_A0 A0
|
||||
// This should be the LED_BUILTIN, but that is also connected SDA (Gyro) so we cannot use both. So we point LED to pin 8 which is not used.
|
||||
// This should be the LED_BUILTIN, but that is also connected SDA (Gyro) so we
|
||||
// cannot use both. So we point LED to pin 8 which is not used.
|
||||
#define PIN_LED 8
|
||||
/*
|
||||
#elif defined(ESP32S2)
|
||||
#include <FS.h>
|
||||
#include <LittleFS.h>
|
||||
|
||||
#include "esp32s2/rom/rtc.h"
|
||||
#define ESPhttpUpdate httpUpdate
|
||||
#define ESP_RESET ESP.restart
|
||||
@ -81,6 +84,7 @@ extern RunMode runMode;
|
||||
#else // defined (ESP32)
|
||||
#include <FS.h>
|
||||
#include <LittleFS.h>
|
||||
|
||||
#include "esp32/rom/rtc.h"
|
||||
#define ESPhttpUpdate httpUpdate
|
||||
#define ESP_RESET ESP.restart
|
||||
|
@ -24,6 +24,7 @@ SOFTWARE.
|
||||
#if defined(ESP8266)
|
||||
#define INCBIN_OUTPUT_SECTION ".irom.text"
|
||||
#include <incbin.h>
|
||||
|
||||
#include <resources.hpp>
|
||||
INCBIN(IndexHtm, "data/index.min.htm");
|
||||
INCBIN(ConfigHtm, "data/config.min.htm");
|
||||
|
@ -108,7 +108,6 @@ void WebServerHandler::webHandleConfig() {
|
||||
LOG_PERF_STOP("webserver-api-config");
|
||||
}
|
||||
|
||||
|
||||
void WebServerHandler::webHandleUploadFile() {
|
||||
LOG_PERF_START("webserver-api-upload-file");
|
||||
Log.verbose(F("WEB : webServer callback for /api/upload(post)." CR));
|
||||
@ -116,8 +115,8 @@ void WebServerHandler::webHandleUploadFile() {
|
||||
String f = upload.filename;
|
||||
|
||||
#if LOG_LEVEL == 6 && !defined(WEB_DISABLE_LOGGING)
|
||||
Log.verbose(
|
||||
F("WEB : webServer callback for /api/upload, receiving file %s, %d(%d)." CR),
|
||||
Log.verbose(F("WEB : webServer callback for /api/upload, receiving file %s, "
|
||||
"%d(%d)." CR),
|
||||
f.c_str(), upload.currentSize, upload.totalSize);
|
||||
#endif
|
||||
|
||||
@ -135,8 +134,8 @@ void WebServerHandler::webHandleUploadFile() {
|
||||
_uploadReturn = 500;
|
||||
}
|
||||
} else if (upload.status == UPLOAD_FILE_WRITE) {
|
||||
Log.notice(F("WEB : Writing firmware upload %d (%d)." CR),
|
||||
upload.totalSize, maxSketchSpace);
|
||||
Log.notice(F("WEB : Writing firmware upload %d (%d)." CR), upload.totalSize,
|
||||
maxSketchSpace);
|
||||
|
||||
if (upload.totalSize > maxSketchSpace) {
|
||||
Log.error(F("WEB : Firmware file is to large." CR));
|
||||
@ -1026,10 +1025,31 @@ void WebServerHandler::webHandlePageNotFound() {
|
||||
_server->send(404, "text/plain", F("URL not found"));
|
||||
}
|
||||
|
||||
int indexHtmLength = 0;
|
||||
int configHtmLength = 0;
|
||||
int calibrationHtmLength = 0;
|
||||
int formatHtmLength = 0;
|
||||
int testHtmLength = 0;
|
||||
int aboutHtmLength = 0;
|
||||
int firmwareHtmLength = 0;
|
||||
|
||||
bool WebServerHandler::setupWebServer() {
|
||||
Log.notice(F("WEB : Configuring web server." CR));
|
||||
|
||||
_server = new ESP8266WebServer();
|
||||
indexHtmLength = strlen(reinterpret_cast<const char*>(&indexHtmStart[0]));
|
||||
configHtmLength = strlen(reinterpret_cast<const char*>(&configHtmStart[0]));
|
||||
calibrationHtmLength =
|
||||
strlen(reinterpret_cast<const char*>(&calibrationHtmStart[0]));
|
||||
formatHtmLength = strlen(reinterpret_cast<const char*>(&formatHtmStart[0]));
|
||||
testHtmLength = strlen(reinterpret_cast<const char*>(&testHtmStart[0]));
|
||||
aboutHtmLength = strlen(reinterpret_cast<const char*>(&aboutHtmStart[0]));
|
||||
firmwareHtmLength =
|
||||
strlen(reinterpret_cast<const char*>(&firmwareHtmStart[0]));
|
||||
Log.notice(F("WEB : Embedded HTML size; index=%d, config=%d, calibration=%d, "
|
||||
"format=%d, test=%d, about=%d, firmware=%d." CR),
|
||||
indexHtmLength, configHtmLength, calibrationHtmLength,
|
||||
formatHtmLength, testHtmLength, aboutHtmLength, firmwareHtmLength);
|
||||
|
||||
MDNS.begin(myConfig.getMDNS());
|
||||
MDNS.addService("http", "tcp", 80);
|
||||
@ -1049,7 +1069,7 @@ bool WebServerHandler::setupWebServer() {
|
||||
LittleFS.remove(dir.fileName().c_str());
|
||||
}
|
||||
}
|
||||
#else
|
||||
#else // ESP32
|
||||
File root = LittleFS.open("/");
|
||||
File f = root.openNextFile();
|
||||
while (f) {
|
||||
|
@ -51,16 +51,26 @@ extern const uint8_t indexHtmStart[] asm("_binary_html_index_min_htm_start");
|
||||
extern const uint8_t indexHtmEnd[] asm("_binary_html_index_min_htm_end");
|
||||
extern const uint8_t configHtmStart[] asm("_binary_html_config_min_htm_start");
|
||||
extern const uint8_t configHtmEnd[] asm("_binary_html_config_min_htm_end");
|
||||
extern const uint8_t calibrationHtmStart[] asm("_binary_html_calibration_min_htm_start");
|
||||
extern const uint8_t calibrationHtmEnd[] asm("_binary_html_calibration_min_htm_end");
|
||||
extern const uint8_t calibrationHtmStart[] asm(
|
||||
"_binary_html_calibration_min_htm_start");
|
||||
extern const uint8_t calibrationHtmEnd[] asm(
|
||||
"_binary_html_calibration_min_htm_end");
|
||||
extern const uint8_t formatHtmStart[] asm("_binary_html_format_min_htm_start");
|
||||
extern const uint8_t formatHtmEnd[] asm("_binary_html_format_min_htm_end");
|
||||
extern const uint8_t testHtmStart[] asm("_binary_html_test_min_htm_start");
|
||||
extern const uint8_t testHtmEnd[] asm("_binary_html_test_min_htm_end");
|
||||
extern const uint8_t aboutHtmStart[] asm("_binary_html_about_min_htm_start");
|
||||
extern const uint8_t aboutHtmEnd[] asm("_binary_html_about_min_htm_end");
|
||||
extern const uint8_t firmwareHtmStart[] asm("_binary_html_firmware_min_htm_start");
|
||||
extern const uint8_t firmwareHtmStart[] asm(
|
||||
"_binary_html_firmware_min_htm_start");
|
||||
extern const uint8_t firmwareHtmEnd[] asm("_binary_html_firmware_min_htm_end");
|
||||
extern int indexHtmLength;
|
||||
extern int configHtmLength;
|
||||
extern int calibrationHtmLength;
|
||||
extern int formatHtmLength;
|
||||
extern int testHtmLength;
|
||||
extern int aboutHtmLength;
|
||||
extern int firmwareHtmLength;
|
||||
#endif
|
||||
|
||||
class WebServerHandler {
|
||||
@ -128,25 +138,31 @@ class WebServerHandler {
|
||||
}
|
||||
#else
|
||||
void webReturnIndexHtm() {
|
||||
_server->send_P(200, "text/html", (const char*)indexHtmStart, indexHtmEnd-indexHtmStart);
|
||||
_server->send_P(200, "text/html", (const char*)indexHtmStart,
|
||||
indexHtmLength);
|
||||
}
|
||||
void webReturnConfigHtm() {
|
||||
_server->send_P(200, "text/html", (const char*)configHtmStart, configHtmEnd-configHtmStart);
|
||||
_server->send_P(200, "text/html", (const char*)configHtmStart,
|
||||
configHtmLength);
|
||||
}
|
||||
void webReturnCalibrationHtm() {
|
||||
_server->send_P(200, "text/html", (const char*)calibrationHtmStart, calibrationHtmEnd-calibrationHtmStart);
|
||||
_server->send_P(200, "text/html", (const char*)calibrationHtmStart,
|
||||
calibrationHtmLength);
|
||||
}
|
||||
void webReturnFormatHtm() {
|
||||
_server->send_P(200, "text/html", (const char*)formatHtmStart, formatHtmEnd-formatHtmStart);
|
||||
_server->send_P(200, "text/html", (const char*)formatHtmStart,
|
||||
formatHtmLength);
|
||||
}
|
||||
void webReturnAboutHtm() {
|
||||
_server->send_P(200, "text/html", (const char*)aboutHtmStart, aboutHtmEnd-aboutHtmStart);
|
||||
_server->send_P(200, "text/html", (const char*)aboutHtmStart,
|
||||
aboutHtmLength);
|
||||
}
|
||||
void webReturnTestHtm() {
|
||||
_server->send_P(200, "text/html", (const char*)testHtmStart, testHtmEnd-testHtmStart);
|
||||
_server->send_P(200, "text/html", (const char*)testHtmStart, testHtmLength);
|
||||
}
|
||||
void webReturnFirmwareHtm() {
|
||||
_server->send_P(200, "text/html", (const char*)firmwareHtmStart, firmwareHtmEnd-firmwareHtmStart);
|
||||
_server->send_P(200, "text/html", (const char*)firmwareHtmStart,
|
||||
firmwareHtmLength);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
Reference in New Issue
Block a user