Compare commits
16 Commits
Author | SHA1 | Date | |
---|---|---|---|
fad84e12c8 | |||
696efc4d79 | |||
29868e7101 | |||
823db6157c | |||
83d14b32d1 | |||
2bf7c9fb7d | |||
07a919b6ba | |||
8618b90e33 | |||
57723b5354 | |||
d2be752175 | |||
97a050ace8 | |||
367e692c74 | |||
926a21249b | |||
2635c19667 | |||
6cc4efca0a | |||
1484a6b0da |
33
CHANGELOG.md
33
CHANGELOG.md
@ -1,5 +1,38 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## [1.4.10] - 2025-03-30
|
||||||
|
### Added
|
||||||
|
- add manual tare functionality for scale
|
||||||
|
- add debounce handling for TTP223 touch sensor
|
||||||
|
- add TTP223 touch sensor support and wiring configuration
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- update platformio.ini for version v1.4.10
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- update TTP223 pin configuration and adjust touch sensor logic
|
||||||
|
|
||||||
|
|
||||||
|
## [1.4.9] - 2025-03-29
|
||||||
|
### Changed
|
||||||
|
- update platformio.ini for version v1.4.9
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- enhance HTTP method handling in sendToApi function
|
||||||
|
|
||||||
|
|
||||||
|
## [1.4.8] - 2025-03-29
|
||||||
|
### Changed
|
||||||
|
- update platformio.ini for version v1.4.8
|
||||||
|
- Merge pull request #30 from janecker/main
|
||||||
|
- Merge branch 'testing' into main
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- improve HTTP client configuration and clear update documents after API calls
|
||||||
|
- Fixes memory leak in HTTPClient by disabling connection reuse
|
||||||
|
- update reload logic after removing and saving Bambu credentials for better cache handling
|
||||||
|
|
||||||
|
|
||||||
## [1.4.7] - 2025-03-27
|
## [1.4.7] - 2025-03-27
|
||||||
### Added
|
### Added
|
||||||
- add forced cache refresh after removing and saving Bambu credentials
|
- add forced cache refresh after removing and saving Bambu credentials
|
||||||
|
31
README.de.md
31
README.de.md
@ -55,19 +55,22 @@ Discord Server: [https://discord.gg/my7Gvaxj2v](https://discord.gg/my7Gvaxj2v)
|
|||||||
## Hardware-Anforderungen
|
## Hardware-Anforderungen
|
||||||
|
|
||||||
### Komponenten
|
### Komponenten
|
||||||
- **ESP32 Entwicklungsboard:** Jede ESP32-Variante.
|
- **ESP32 Development Board:** Any ESP32 variant.
|
||||||
[Amazon Link](https://amzn.eu/d/aXThslf)
|
[Amazon Link](https://amzn.to/3FHea6D)
|
||||||
- **HX711 5kg Wägezellen-Verstärker:** Für Gewichtsmessung.
|
- **HX711 5kg Load Cell Amplifier:** For weight measurement.
|
||||||
[Amazon Link](https://amzn.eu/d/06A0DLb)
|
[Amazon Link](https://amzn.to/4ja1KTe)
|
||||||
- **OLED 0.96 Zoll I2C weiß/gelb Display:** 128x64 SSD1306.
|
- **OLED 0.96 Zoll I2C white/yellow Display:** 128x64 SSD1306.
|
||||||
[Amazon Link](https://amzn.eu/d/0AuBp2c)
|
[Amazon Link](https://amzn.to/445aaa9)
|
||||||
- **PN532 NFC NXP RFID-Modul V3:** Für NFC-Tag-Operationen.
|
- **PN532 NFC NXP RFID-Modul V3:** For NFC tag operations.
|
||||||
[Amazon Link](https://amzn.eu/d/jfIuQXb)
|
[Amazon Link](https://amzn.to/4iO6CO4)
|
||||||
- **NFC Tags NTAG213 NTA215:** RFID Tag
|
- **NFC Tags NTAG213 NTAG215:** RFID Tag
|
||||||
[Amazon Link](https://amzn.eu/d/9Z6mXc1)
|
[Amazon Link](https://amzn.to/3E071xO)
|
||||||
|
- **TTP223 Touch Sensor (optional):** For reTARE per Button/Touch
|
||||||
|
[Amazon Link](https://amzn.to/4hTChMK)
|
||||||
|
|
||||||
### Pin-Konfiguration
|
|
||||||
| Komponente | ESP32 Pin |
|
### Pin Konfiguration
|
||||||
|
| Component | ESP32 Pin |
|
||||||
|-------------------|-----------|
|
|-------------------|-----------|
|
||||||
| HX711 DOUT | 16 |
|
| HX711 DOUT | 16 |
|
||||||
| HX711 SCK | 17 |
|
| HX711 SCK | 17 |
|
||||||
@ -77,8 +80,10 @@ Discord Server: [https://discord.gg/my7Gvaxj2v](https://discord.gg/my7Gvaxj2v)
|
|||||||
| PN532 RESET | 33 |
|
| PN532 RESET | 33 |
|
||||||
| PN532 SDA | 21 |
|
| PN532 SDA | 21 |
|
||||||
| PN532 SCL | 22 |
|
| PN532 SCL | 22 |
|
||||||
|
| TTP223 I/O | 25 |
|
||||||
|
|
||||||
**Achte darauf, dass am PN532 die DIP-Schalter auf I2C gestellt sind**
|
**!! Achte darauf, dass am PN532 die DIP-Schalter auf I2C gestellt sind**
|
||||||
|
**Nutze den 3V Pin vom ESP für den Touch Sensor**
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
16
README.md
16
README.md
@ -60,15 +60,17 @@ Discord Server: [https://discord.gg/my7Gvaxj2v](https://discord.gg/my7Gvaxj2v)
|
|||||||
|
|
||||||
### Components
|
### Components
|
||||||
- **ESP32 Development Board:** Any ESP32 variant.
|
- **ESP32 Development Board:** Any ESP32 variant.
|
||||||
[Amazon Link](https://amzn.eu/d/aXThslf)
|
[Amazon Link](https://amzn.to/3FHea6D)
|
||||||
- **HX711 5kg Load Cell Amplifier:** For weight measurement.
|
- **HX711 5kg Load Cell Amplifier:** For weight measurement.
|
||||||
[Amazon Link](https://amzn.eu/d/06A0DLb)
|
[Amazon Link](https://amzn.to/4ja1KTe)
|
||||||
- **OLED 0.96 Zoll I2C white/yellow Display:** 128x64 SSD1306.
|
- **OLED 0.96 Zoll I2C white/yellow Display:** 128x64 SSD1306.
|
||||||
[Amazon Link](https://amzn.eu/d/0AuBp2c)
|
[Amazon Link](https://amzn.to/445aaa9)
|
||||||
- **PN532 NFC NXP RFID-Modul V3:** For NFC tag operations.
|
- **PN532 NFC NXP RFID-Modul V3:** For NFC tag operations.
|
||||||
[Amazon Link](https://amzn.eu/d/jfIuQXb)
|
[Amazon Link](https://amzn.to/4iO6CO4)
|
||||||
- **NFC Tags NTAG213 NTAG215:** RFID Tag
|
- **NFC Tags NTAG213 NTAG215:** RFID Tag
|
||||||
[Amazon Link](https://amzn.eu/d/9Z6mXc1)
|
[Amazon Link](https://amzn.to/3E071xO)
|
||||||
|
- **TTP223 Touch Sensor (optional):** For reTARE per Button/Touch
|
||||||
|
[Amazon Link](https://amzn.to/4hTChMK)
|
||||||
|
|
||||||
|
|
||||||
### Pin Configuration
|
### Pin Configuration
|
||||||
@ -82,8 +84,10 @@ Discord Server: [https://discord.gg/my7Gvaxj2v](https://discord.gg/my7Gvaxj2v)
|
|||||||
| PN532 RESET | 33 |
|
| PN532 RESET | 33 |
|
||||||
| PN532 SDA | 21 |
|
| PN532 SDA | 21 |
|
||||||
| PN532 SCL | 22 |
|
| PN532 SCL | 22 |
|
||||||
|
| TTP223 I/O | 25 |
|
||||||
|
|
||||||
**Make sure that the DIP switches on the PN532 are set to I2C**
|
**!! Make sure that the DIP switches on the PN532 are set to I2C**
|
||||||
|
**Use the 3V pin from the ESP for the touch sensor**
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
|
@ -70,8 +70,8 @@
|
|||||||
document.getElementById('bambuStatusMessage').innerText = 'Bambu Credentials removed!';
|
document.getElementById('bambuStatusMessage').innerText = 'Bambu Credentials removed!';
|
||||||
// Reload with forced cache refresh after short delay
|
// Reload with forced cache refresh after short delay
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
window.location.replace('/');
|
window.location.reload(true);
|
||||||
location.reload(true);
|
window.location.href = '/';
|
||||||
}, 1500);
|
}, 1500);
|
||||||
} else {
|
} else {
|
||||||
document.getElementById('bambuStatusMessage').innerText = 'Error while removing Bambu Credentials.';
|
document.getElementById('bambuStatusMessage').innerText = 'Error while removing Bambu Credentials.';
|
||||||
@ -116,8 +116,8 @@
|
|||||||
document.getElementById('bambuStatusMessage').innerText = 'Bambu Credentials saved!';
|
document.getElementById('bambuStatusMessage').innerText = 'Bambu Credentials saved!';
|
||||||
// Reload with forced cache refresh after short delay
|
// Reload with forced cache refresh after short delay
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
window.location.replace('/');
|
window.location.reload(true);
|
||||||
location.reload(true);
|
window.location.href = '/';
|
||||||
}, 1500);
|
}, 1500);
|
||||||
} else {
|
} else {
|
||||||
document.getElementById('bambuStatusMessage').innerText = 'Error while saving Bambu Credentials.';
|
document.getElementById('bambuStatusMessage').innerText = 'Error while saving Bambu Credentials.';
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
; https://docs.platformio.org/page/projectconf.html
|
; https://docs.platformio.org/page/projectconf.html
|
||||||
|
|
||||||
[common]
|
[common]
|
||||||
version = "1.4.7"
|
version = "1.4.10"
|
||||||
to_old_version = "1.4.0"
|
to_old_version = "1.4.0"
|
||||||
|
|
||||||
##
|
##
|
||||||
|
14
src/api.cpp
14
src/api.cpp
@ -94,13 +94,16 @@ void sendToApi(void *parameter) {
|
|||||||
String octoToken = params->octoToken;
|
String octoToken = params->octoToken;
|
||||||
|
|
||||||
HTTPClient http;
|
HTTPClient http;
|
||||||
|
http.setReuse(false);
|
||||||
|
|
||||||
http.begin(spoolsUrl);
|
http.begin(spoolsUrl);
|
||||||
http.addHeader("Content-Type", "application/json");
|
http.addHeader("Content-Type", "application/json");
|
||||||
if (octoEnabled && octoToken != "") http.addHeader("X-Api-Key", octoToken);
|
if (octoEnabled && octoToken != "") http.addHeader("X-Api-Key", octoToken);
|
||||||
|
|
||||||
int httpCode = http.PUT(updatePayload);
|
int httpCode;
|
||||||
if (httpType == "PATCH") httpCode = http.PATCH(updatePayload);
|
if (httpType == "PATCH") httpCode = http.PATCH(updatePayload);
|
||||||
if (httpType == "POST") httpCode = http.POST(updatePayload);
|
else if (httpType == "POST") httpCode = http.POST(updatePayload);
|
||||||
|
else httpCode = http.PUT(updatePayload);
|
||||||
|
|
||||||
if (httpCode == HTTP_CODE_OK) {
|
if (httpCode == HTTP_CODE_OK) {
|
||||||
Serial.println("Spoolman erfolgreich aktualisiert");
|
Serial.println("Spoolman erfolgreich aktualisiert");
|
||||||
@ -111,6 +114,7 @@ void sendToApi(void *parameter) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
http.end();
|
http.end();
|
||||||
|
vTaskDelay(50 / portTICK_PERIOD_MS);
|
||||||
|
|
||||||
// Speicher freigeben
|
// Speicher freigeben
|
||||||
delete params;
|
delete params;
|
||||||
@ -165,6 +169,8 @@ bool updateSpoolTagId(String uidString, const char* payload) {
|
|||||||
NULL // Task-Handle (nicht benötigt)
|
NULL // Task-Handle (nicht benötigt)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
updateDoc.clear();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -201,6 +207,8 @@ uint8_t updateSpoolWeight(String spoolId, uint16_t weight) {
|
|||||||
NULL // Task-Handle (nicht benötigt)
|
NULL // Task-Handle (nicht benötigt)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
updateDoc.clear();
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -238,6 +246,8 @@ bool updateSpoolOcto(int spoolId) {
|
|||||||
NULL // Task-Handle (nicht benötigt)
|
NULL // Task-Handle (nicht benötigt)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
updateDoc.clear();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -19,6 +19,12 @@ const uint16_t SCALE_LEVEL_WEIGHT = 500;
|
|||||||
uint16_t defaultScaleCalibrationValue = 430;
|
uint16_t defaultScaleCalibrationValue = 430;
|
||||||
// ***** HX711
|
// ***** HX711
|
||||||
|
|
||||||
|
// ***** TTP223 (Touch Sensor)
|
||||||
|
// TTP223 circuit wiring
|
||||||
|
const uint8_t TTP223_PIN = 25;
|
||||||
|
// ***** TTP223
|
||||||
|
|
||||||
|
|
||||||
// ***** Display
|
// ***** Display
|
||||||
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
|
// Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
|
||||||
// On an ESP32: 21(SDA), 22(SCL)
|
// On an ESP32: 21(SDA), 22(SCL)
|
||||||
|
@ -11,6 +11,8 @@ extern const uint8_t LOADCELL_SCK_PIN;
|
|||||||
extern const uint8_t calVal_eepromAdress;
|
extern const uint8_t calVal_eepromAdress;
|
||||||
extern const uint16_t SCALE_LEVEL_WEIGHT;
|
extern const uint16_t SCALE_LEVEL_WEIGHT;
|
||||||
|
|
||||||
|
extern const uint8_t TTP223_PIN;
|
||||||
|
|
||||||
extern const int8_t OLED_RESET;
|
extern const int8_t OLED_RESET;
|
||||||
extern const uint8_t SCREEN_ADDRESS;
|
extern const uint8_t SCREEN_ADDRESS;
|
||||||
extern const uint8_t SCREEN_WIDTH;
|
extern const uint8_t SCREEN_WIDTH;
|
||||||
|
36
src/main.cpp
36
src/main.cpp
@ -39,7 +39,6 @@ void setup() {
|
|||||||
setupWebserver(server);
|
setupWebserver(server);
|
||||||
|
|
||||||
// Spoolman API
|
// Spoolman API
|
||||||
// api.cpp
|
|
||||||
initSpoolman();
|
initSpoolman();
|
||||||
|
|
||||||
// Bambu MQTT
|
// Bambu MQTT
|
||||||
@ -48,6 +47,7 @@ void setup() {
|
|||||||
// NFC Reader
|
// NFC Reader
|
||||||
startNfc();
|
startNfc();
|
||||||
|
|
||||||
|
// Scale
|
||||||
start_scale();
|
start_scale();
|
||||||
|
|
||||||
// WDT initialisieren mit 10 Sekunden Timeout
|
// WDT initialisieren mit 10 Sekunden Timeout
|
||||||
@ -56,6 +56,9 @@ void setup() {
|
|||||||
|
|
||||||
// Aktuellen Task (loopTask) zum Watchdog hinzufügen
|
// Aktuellen Task (loopTask) zum Watchdog hinzufügen
|
||||||
esp_task_wdt_add(NULL);
|
esp_task_wdt_add(NULL);
|
||||||
|
|
||||||
|
// Touch Sensor
|
||||||
|
pinMode(TTP223_PIN, INPUT_PULLUP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -84,13 +87,25 @@ uint8_t autoAmsCounter = 0;
|
|||||||
uint8_t weightSend = 0;
|
uint8_t weightSend = 0;
|
||||||
int16_t lastWeight = 0;
|
int16_t lastWeight = 0;
|
||||||
|
|
||||||
|
// WIFI check variables
|
||||||
unsigned long lastWifiCheckTime = 0;
|
unsigned long lastWifiCheckTime = 0;
|
||||||
const unsigned long wifiCheckInterval = 60000; // Überprüfe alle 60 Sekunden (60000 ms)
|
const unsigned long wifiCheckInterval = 60000; // Überprüfe alle 60 Sekunden (60000 ms)
|
||||||
|
|
||||||
|
// Button debounce variables
|
||||||
|
unsigned long lastButtonPress = 0;
|
||||||
|
const unsigned long debounceDelay = 500; // 500 ms debounce delay
|
||||||
|
|
||||||
// ##### PROGRAM START #####
|
// ##### PROGRAM START #####
|
||||||
void loop() {
|
void loop() {
|
||||||
unsigned long currentMillis = millis();
|
unsigned long currentMillis = millis();
|
||||||
|
|
||||||
|
// Überprüfe den Status des Touch Sensors
|
||||||
|
if (digitalRead(TTP223_PIN) == HIGH && currentMillis - lastButtonPress > debounceDelay)
|
||||||
|
{
|
||||||
|
lastButtonPress = currentMillis;
|
||||||
|
scaleTareRequest = true;
|
||||||
|
}
|
||||||
|
|
||||||
// Überprüfe regelmäßig die WLAN-Verbindung
|
// Überprüfe regelmäßig die WLAN-Verbindung
|
||||||
if (intervalElapsed(currentMillis, lastWifiCheckTime, wifiCheckInterval))
|
if (intervalElapsed(currentMillis, lastWifiCheckTime, wifiCheckInterval))
|
||||||
{
|
{
|
||||||
@ -158,25 +173,6 @@ void loop() {
|
|||||||
{
|
{
|
||||||
lastWeightReadTime = currentMillis;
|
lastWeightReadTime = currentMillis;
|
||||||
|
|
||||||
// Prüfen ob die Waage korrekt genullt ist
|
|
||||||
if ((weight > 0 && weight < 5) || weight < -1)
|
|
||||||
{
|
|
||||||
if(scaleTareCounter < 5)
|
|
||||||
{
|
|
||||||
scaleTareCounter++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
scaleTareRequest = true;
|
|
||||||
scaleTareCounter = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
scaleTareCounter = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prüfen ob das Gewicht gleich bleibt und dann senden
|
// Prüfen ob das Gewicht gleich bleibt und dann senden
|
||||||
if (weight == lastWeight && weight > 5)
|
if (weight == lastWeight && weight > 5)
|
||||||
{
|
{
|
||||||
|
@ -38,11 +38,15 @@ void scale_loop(void * parameter) {
|
|||||||
for(;;) {
|
for(;;) {
|
||||||
if (scale.is_ready())
|
if (scale.is_ready())
|
||||||
{
|
{
|
||||||
// Waage nochmal Taren, wenn zu lange Abweichung
|
// Waage manuell Taren
|
||||||
if (scaleTareRequest == true)
|
if (scaleTareRequest == true)
|
||||||
{
|
{
|
||||||
Serial.println("Re-Tare scale");
|
Serial.println("Re-Tare scale");
|
||||||
|
oledShowMessage("TARE Scale");
|
||||||
|
vTaskDelay(pdMS_TO_TICKS(1000));
|
||||||
scale.tare();
|
scale.tare();
|
||||||
|
vTaskDelay(pdMS_TO_TICKS(1000));
|
||||||
|
oledShowWeight(0);
|
||||||
scaleTareRequest = false;
|
scaleTareRequest = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user