Compare commits
	
		
			49 Commits
		
	
	
		
			v1.3.79
			...
			5c5846c52c
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 5c5846c52c | |||
| 517fa37a3d | |||
| aaa7a6ee9c | |||
| a0b8639488 | |||
| a16c05287e | |||
| ecb35a97bd | |||
| ba968611ec | |||
| 6bd11ddce3 | |||
| 3eb313e61a | |||
| aad35dc296 | |||
| 85ac636b1e | |||
| 6f1804c3fe | |||
| 89716920dc | |||
| 78b5078651 | |||
| 6098c3b052 | |||
| e7537f94d4 | |||
| 37717392d0 | |||
| c6da28ad6f | |||
| d6e38a4e73 | |||
| 4e0d9353c8 | |||
| 7059826659 | |||
| 41faa8bb1c | |||
| b38e3fa5ef | |||
| 5280d7e341 | |||
| 2f95c66d39 | |||
| df1b87465c | |||
| 84f1420999 | |||
| b14dd5475d | |||
| 975845421b | |||
| 044ddbe0eb | |||
| c385544d67 | |||
| c6cfd85687 | |||
| 84632322e2 | |||
| 86e55a8696 | |||
| d2b40daaca | |||
| 9d58cbc31c | |||
| d09aeaf47c | |||
| 9fb82fe51e | |||
| 5e0e2c5f6b | |||
| a8460503ff | |||
| 6700a1761f | |||
| 7207f36e06 | |||
| e79bee3381 | |||
| c3918f075b | |||
| 0c384219c5 | |||
| 42b9daf4be | |||
| 13a771682f | |||
| f79f87bf09 | |||
| 9fe3f6c0ff | 
							
								
								
									
										29
									
								
								.github/workflows/gitea-release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										29
									
								
								.github/workflows/gitea-release.yml
									
									
									
									
										vendored
									
									
								
							| @@ -6,16 +6,17 @@ on: | |||||||
|       GITEA_TOKEN: |       GITEA_TOKEN: | ||||||
|         description: 'Token für Gitea API-Zugriff' |         description: 'Token für Gitea API-Zugriff' | ||||||
|         required: true |         required: true | ||||||
|       FTP_PASSWORD: |  | ||||||
|         description: 'FTP Password for firmware upload' |     outputs: | ||||||
|         required: true |       version: | ||||||
|       FTP_USER: |         description: 'The version that was released' | ||||||
|         description: 'FTP User for firmware upload' |         value: ${{ jobs.create-release.outputs.version }} | ||||||
|         required: true |  | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   create-release: |   create-release: | ||||||
|     runs-on: ubuntu-latest |     runs-on: ubuntu-latest | ||||||
|  |     outputs: | ||||||
|  |       version: ${{ steps.get_version.outputs.VERSION }} | ||||||
|     steps: |     steps: | ||||||
|     - uses: actions/checkout@v4 |     - uses: actions/checkout@v4 | ||||||
|       with: |       with: | ||||||
| @@ -205,19 +206,3 @@ jobs: | |||||||
|             fi |             fi | ||||||
|           fi |           fi | ||||||
|         done |         done | ||||||
|  |  | ||||||
|     - name: Install lftp |  | ||||||
|       run: sudo apt-get install -y lftp |  | ||||||
|        |  | ||||||
|     - name: Upload Firmware via FTP |  | ||||||
|       if: success() |  | ||||||
|       run: | |  | ||||||
|         VERSION=$(grep '^version = ' platformio.ini | cut -d'"' -f2) |  | ||||||
|         cd .pio/build/esp32dev |  | ||||||
|         lftp -c "set ssl:verify-certificate no; \ |  | ||||||
|                  set ftp:ssl-protect-data true; \ |  | ||||||
|                  set ftp:ssl-force true; \ |  | ||||||
|                  set ssl:check-hostname false; \ |  | ||||||
|                  set ftp:ssl-auth TLS; \ |  | ||||||
|                  open -u ${{ secrets.FTP_USER }},${{ secrets.FTP_PASSWORD }} ftp://filaman.app:21; \ |  | ||||||
|                  put -O / filaman_full_${VERSION}.bin -o filaman_full.bin" |  | ||||||
							
								
								
									
										33
									
								
								.github/workflows/github-release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								.github/workflows/github-release.yml
									
									
									
									
										vendored
									
									
								
							| @@ -150,3 +150,36 @@ jobs: | |||||||
|           echo "Error: No files found to upload" |           echo "Error: No files found to upload" | ||||||
|           exit 1 |           exit 1 | ||||||
|         fi |         fi | ||||||
|  |  | ||||||
|  |     - name: Install lftp | ||||||
|  |       run: sudo apt-get install -y lftp | ||||||
|  |          | ||||||
|  |     - name: Upload Firmware via FTP | ||||||
|  |       if: success() | ||||||
|  |       env: | ||||||
|  |         FTP_PASSWORD: ${{ vars.FTP_PASSWORD }} | ||||||
|  |         FTP_USER: ${{ vars.FTP_USER }} | ||||||
|  |         FTP_HOST: ${{ vars.FTP_HOST }} | ||||||
|  |         VERSION: ${{ steps.get_version.outputs.VERSION }} | ||||||
|  |       run: | | ||||||
|  |         echo "Environment variables:" | ||||||
|  |         env | grep -E '^FTP_' | while read -r line; do | ||||||
|  |           var_name=$(echo "$line" | cut -d= -f1) | ||||||
|  |           var_value=$(echo "$line" | cut -d= -f2-) | ||||||
|  |           echo "$var_name is $(if [ -n "$var_value" ]; then echo "set"; else echo "empty"; fi)" | ||||||
|  |         done | ||||||
|  |          | ||||||
|  |         cd .pio/build/esp32dev | ||||||
|  |         if [ -n "$FTP_USER" ] && [ -n "$FTP_PASSWORD" ] && [ -n "$FTP_HOST" ]; then | ||||||
|  |           echo "All FTP credentials are present, attempting upload..." | ||||||
|  |           lftp -c "set ssl:verify-certificate no; \ | ||||||
|  |                     set ftp:ssl-protect-data true; \ | ||||||
|  |                     set ftp:ssl-force true; \ | ||||||
|  |                     set ssl:check-hostname false; \ | ||||||
|  |                     set ftp:ssl-auth TLS; \ | ||||||
|  |                     open -u $FTP_USER,$FTP_PASSWORD $FTP_HOST; \ | ||||||
|  |                     put -O / filaman_full_${VERSION}.bin -o filaman_full.bin" | ||||||
|  |         else | ||||||
|  |           echo "Error: Some FTP credentials are missing" | ||||||
|  |           exit 1 | ||||||
|  |         fi | ||||||
							
								
								
									
										116
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										116
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -1,5 +1,121 @@ | |||||||
| # Changelog | # Changelog | ||||||
|  |  | ||||||
|  | ## [1.3.92] - 2025-02-24 | ||||||
|  | ### Changed | ||||||
|  | - update webpages for version v1.3.92 | ||||||
|  | - remove commented-out code in setBambuSpool function | ||||||
|  | - update installation instructions and formatting in README files | ||||||
|  |  | ||||||
|  | ### Fixed | ||||||
|  | - configure CPU frequency settings in setup function only for testing | ||||||
|  | - update comment to clarify NVS reading process | ||||||
|  | - adjust weight display logic to handle cases for weight less than 2 | ||||||
|  | - update weight display logic to handle negative and specific weight cases | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## [1.3.91] - 2025-02-23 | ||||||
|  | ### Added | ||||||
|  | - update GitHub Actions workflow for FTP firmware upload with improved credential checks | ||||||
|  |  | ||||||
|  | ### Changed | ||||||
|  | - update webpages for version v1.3.91 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## [1.3.90] - 2025-02-23 | ||||||
|  | ### Added | ||||||
|  | - update index.html for improved content structure and additional links | ||||||
|  | - improve UI for Spoolman and Bambu Lab printer credentials, enhancing layout and styling | ||||||
|  | - update README files with HSPI default PINs and add ESP32 pin diagram | ||||||
|  | - implement scale calibration checks and update start_scale function to return calibration status | ||||||
|  | - add FTP upload functionality to GitHub release workflow and update installation instructions in README | ||||||
|  |  | ||||||
|  | ### Changed | ||||||
|  | - update webpages for version v1.3.90 | ||||||
|  |  | ||||||
|  | ### Fixed | ||||||
|  | - remove debug secrets check from Gitea release workflow | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## [1.3.89] - 2025-02-23 | ||||||
|  | ### Changed | ||||||
|  | - update webpages for version v1.3.89 | ||||||
|  |  | ||||||
|  | ### Fixed | ||||||
|  | - update Gitea release workflow to use vars for FTP credentials | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## [1.3.88] - 2025-02-23 | ||||||
|  | ### Changed | ||||||
|  | - update webpages for version v1.3.88 | ||||||
|  |  | ||||||
|  | ### Fixed | ||||||
|  | - update Gitea release workflow to use secrets for FTP credentials | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## [1.3.87] - 2025-02-23 | ||||||
|  | ### Changed | ||||||
|  | - update webpages for version v1.3.87 | ||||||
|  |  | ||||||
|  | ### Fixed | ||||||
|  | - enhance FTP upload workflow with credential checks and version output | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## [1.3.86] - 2025-02-23 | ||||||
|  | ### Changed | ||||||
|  | - update webpages for version v1.3.86 | ||||||
|  |  | ||||||
|  | ### Fixed | ||||||
|  | - streamline FTP credentials usage in Gitea release workflow | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## [1.3.85] - 2025-02-23 | ||||||
|  | ### Added | ||||||
|  | - add FTP_USER variable for Gitea release workflow | ||||||
|  |  | ||||||
|  | ### Changed | ||||||
|  | - update webpages for version v1.3.85 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## [1.3.84] - 2025-02-23 | ||||||
|  | ### Added | ||||||
|  | - add FTP_HOST variable for firmware upload in Gitea release workflow | ||||||
|  |  | ||||||
|  | ### Changed | ||||||
|  | - update webpages for version v1.3.84 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## [1.3.83] - 2025-02-23 | ||||||
|  | ### Changed | ||||||
|  | - update webpages for version v1.3.83 | ||||||
|  |  | ||||||
|  | ### Fixed | ||||||
|  | - correct variable interpolation for FTP credentials in Gitea release workflow | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## [1.3.82] - 2025-02-23 | ||||||
|  | ### Added | ||||||
|  | - update Gitea release workflow to use variable interpolation for FTP credentials | ||||||
|  |  | ||||||
|  | ### Changed | ||||||
|  | - update webpages for version v1.3.82 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## [1.3.81] - 2025-02-23 | ||||||
|  | ### Added | ||||||
|  | - update Gitea release workflow to use environment variables for FTP credentials and version | ||||||
|  |  | ||||||
|  | ### Changed | ||||||
|  | - update webpages for version v1.3.81 | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## [1.3.80] - 2025-02-23 | ||||||
|  | ### Added | ||||||
|  | - add FTP_USER and FTP_PASSWORD secrets for firmware upload in Gitea release workflow | ||||||
|  |  | ||||||
|  | ### Changed | ||||||
|  | - update webpages for version v1.3.80 | ||||||
|  |  | ||||||
|  |  | ||||||
| ## [1.3.79] - 2025-02-23 | ## [1.3.79] - 2025-02-23 | ||||||
| ### Added | ### Added | ||||||
| - add FTP_USER input for firmware upload in Gitea release workflow | - add FTP_USER input for firmware upload in Gitea release workflow | ||||||
|   | |||||||
							
								
								
									
										19
									
								
								README.de.md
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								README.de.md
									
									
									
									
									
								
							| @@ -76,6 +76,10 @@ Deutsches Erklärvideo: [Youtube](https://youtu.be/uNDe2wh9SS8?si=b-jYx4I1w62zaO | |||||||
| | PN532 MISO        | 12        | | | PN532 MISO        | 12        | | ||||||
| | PN532 CS/SS       | 15        | | | PN532 CS/SS       | 15        | | ||||||
|  |  | ||||||
|  | Ich nutze die HSPI default PINs + IRQ und RESET am PN532 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Software-Abhängigkeiten | ## Software-Abhängigkeiten | ||||||
|  |  | ||||||
| ### ESP32-Bibliotheken | ### ESP32-Bibliotheken | ||||||
| @@ -101,7 +105,20 @@ Deutsches Erklärvideo: [Youtube](https://youtu.be/uNDe2wh9SS8?si=b-jYx4I1w62zaO | |||||||
|   - PN532 NFC Modul |   - PN532 NFC Modul | ||||||
|   - Verbindungskabel |   - Verbindungskabel | ||||||
|  |  | ||||||
| ### Schritt-für-Schritt Installation | ## Schritt-für-Schritt Installation | ||||||
|  | ### Einfache Installation | ||||||
|  | 1. **Gehe auf [FilaMan Installer](https://www.filaman.app/installer.html)** | ||||||
|  |  | ||||||
|  | 2. **Stecke dein ESP an den Rechner und klicke Connect** | ||||||
|  |  | ||||||
|  | 3. **Wähle dein Device Port und klicke Intall** | ||||||
|  |  | ||||||
|  | 4. **Ersteinrichtung:** | ||||||
|  |     - Mit dem "FilaMan" WLAN-Zugangspunkt verbinden. | ||||||
|  |     - WLAN-Einstellungen über das Konfigurationsportal vornehmen. | ||||||
|  |     - Weboberfläche unter `http://filaman.local` oder der IP-Adresse aufrufen. | ||||||
|  |  | ||||||
|  | ### Compile by yourself | ||||||
| 1. **Repository klonen:** | 1. **Repository klonen:** | ||||||
|     ```bash |     ```bash | ||||||
|     git clone https://github.com/ManuelW77/Filaman.git |     git clone https://github.com/ManuelW77/Filaman.git | ||||||
|   | |||||||
							
								
								
									
										42
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								README.md
									
									
									
									
									
								
							| @@ -80,6 +80,10 @@ german explanatory video: [Youtube](https://youtu.be/uNDe2wh9SS8?si=b-jYx4I1w62z | |||||||
| | PN532 MISO       	| 12        | | | PN532 MISO       	| 12        | | ||||||
| | PN532 CS/SS       | 15        | | | PN532 CS/SS       | 15        | | ||||||
|  |  | ||||||
|  | I use the HSPI default PINs + IRQ and RESET at the PN532 | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Software Dependencies | ## Software Dependencies | ||||||
|  |  | ||||||
| ### ESP32 Libraries | ### ESP32 Libraries | ||||||
| @@ -91,9 +95,9 @@ german explanatory video: [Youtube](https://youtu.be/uNDe2wh9SS8?si=b-jYx4I1w62z | |||||||
| - `Adafruit_SSD1306`: OLED display control | - `Adafruit_SSD1306`: OLED display control | ||||||
| - `HX711`: Load cell communication | - `HX711`: Load cell communication | ||||||
|  |  | ||||||
| ## Installation | ### Installation | ||||||
|  |  | ||||||
| ### Prerequisites | ## Prerequisites | ||||||
| - **Software:** | - **Software:** | ||||||
|   - [PlatformIO](https://platformio.org/) in VS Code |   - [PlatformIO](https://platformio.org/) in VS Code | ||||||
|   - [Spoolman](https://github.com/Donkie/Spoolman) instance |   - [Spoolman](https://github.com/Donkie/Spoolman) instance | ||||||
| @@ -105,7 +109,20 @@ german explanatory video: [Youtube](https://youtu.be/uNDe2wh9SS8?si=b-jYx4I1w62z | |||||||
|   - PN532 NFC Module |   - PN532 NFC Module | ||||||
|   - Connecting wires |   - Connecting wires | ||||||
|  |  | ||||||
| ### Step-by-Step Installation | ## Step-by-Step Installation | ||||||
|  | ### Easy Installation | ||||||
|  | 1. **Go to [FilaMan Installer](https://www.filaman.app/installer.html)** | ||||||
|  |  | ||||||
|  | 2. **Plug you device in and push Connect button** | ||||||
|  |  | ||||||
|  | 3. **Select your Device Port and push Intall** | ||||||
|  |  | ||||||
|  | 4. **Initial Setup:** | ||||||
|  |     - Connect to the "FilaMan" WiFi access point. | ||||||
|  |     - Configure WiFi settings through the captive portal. | ||||||
|  |     - Access the web interface at `http://filaman.local` or the IP address. | ||||||
|  |  | ||||||
|  | ### Compile by yourself | ||||||
| 1. **Clone the Repository:** | 1. **Clone the Repository:** | ||||||
|     ```bash |     ```bash | ||||||
|     git clone https://github.com/ManuelW77/Filaman.git |     git clone https://github.com/ManuelW77/Filaman.git | ||||||
| @@ -124,25 +141,6 @@ german explanatory video: [Youtube](https://youtu.be/uNDe2wh9SS8?si=b-jYx4I1w62z | |||||||
|     - Configure WiFi settings through the captive portal. |     - Configure WiFi settings through the captive portal. | ||||||
|     - Access the web interface at `http://filaman.local` or the IP address. |     - Access the web interface at `http://filaman.local` or the IP address. | ||||||
|  |  | ||||||
| ## GitHub Actions Configuration |  | ||||||
|  |  | ||||||
| ### Required Secrets for Gitea Releases |  | ||||||
|  |  | ||||||
| When using Gitea as your repository host, you need to configure the following secrets in your repository: |  | ||||||
|  |  | ||||||
| - `GITEA_API_URL`: The base URL of your Gitea instance, including protocol (e.g., `https://git.example.com`) |  | ||||||
| - `GITEA_TOKEN`: Your Gitea access token with permissions to create releases |  | ||||||
| - `GITEA_REPOSITORY`: The repository name in format `owner/repo` (e.g., `username/filaman`) |  | ||||||
|  |  | ||||||
| Example values: |  | ||||||
| ``` |  | ||||||
| GITEA_API_URL=https://git.example.com |  | ||||||
| GITEA_TOKEN=abcdef1234567890 |  | ||||||
| GITEA_REPOSITORY=username/filaman |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| Make sure to set these secrets in your repository settings under Settings > Secrets and Variables > Actions. |  | ||||||
|  |  | ||||||
| ## Documentation | ## Documentation | ||||||
|  |  | ||||||
| ### Relevant Links | ### Relevant Links | ||||||
|   | |||||||
| @@ -47,7 +47,7 @@ | |||||||
|  |  | ||||||
| <!-- head --> | <!-- head --> | ||||||
|  |  | ||||||
|     <div class="container"> |     <div class="content"> | ||||||
|         <h1>FilaMan</h1> |         <h1>FilaMan</h1> | ||||||
|         <p>Filament Management Tool</p> |         <p>Filament Management Tool</p> | ||||||
|         <p>Your smart solution for <strong>Filament Management</strong> in 3D printing.</p> |         <p>Your smart solution for <strong>Filament Management</strong> in 3D printing.</p> | ||||||
| @@ -55,10 +55,11 @@ | |||||||
|         <h2>About FilaMan</h2> |         <h2>About FilaMan</h2> | ||||||
|         <p> |         <p> | ||||||
|             FilaMan is a tool designed to simplify filament spool management. It allows you to identify and weigh filament spools,  |             FilaMan is a tool designed to simplify filament spool management. It allows you to identify and weigh filament spools,  | ||||||
|             automatically sync data with the self-hosted <a href="https://github.com/Donkie/Spoolman" target="_blank">Spoolman</a> platform,  |             automatically sync data with the self-hosted <a href="https://github.com/Donkie/Spoolman" target="_blank">Spoolman</a> platform. | ||||||
|             and ensure compatibility with <a href="https://github.com/spuder/OpenSpool" target="_blank">OpenSpool</a> for Bambu printers. |  | ||||||
|         </p> |         </p> | ||||||
|  |  | ||||||
|  |         <p>Get more information at <a href="https://www.filaman.app" target="_blank">https://www.filaman.app</a> and <a href="https://github.com/ManuelW77/Filaman" target="_blank">https://github.com/ManuelW77/Filaman</a>.</p> | ||||||
|  |  | ||||||
|         <div class="features"> |         <div class="features"> | ||||||
|             <div class="feature"> |             <div class="feature"> | ||||||
|                 <h3>Spool Identification</h3> |                 <h3>Spool Identification</h3> | ||||||
| @@ -73,12 +74,6 @@ | |||||||
|                 <p>Works with OpenSpool to recognize and activate spools on Bambu printers.</p> |                 <p>Works with OpenSpool to recognize and activate spools on Bambu printers.</p> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|  |  | ||||||
|         <h2>Future Plans</h2> |  | ||||||
|         <p> |  | ||||||
|             We are working on expanding compatibility to support smaller NFC tags like NTag213  |  | ||||||
|             and developing custom software to enhance the OpenSpool experience. |  | ||||||
|         </p> |  | ||||||
|     </div> |     </div> | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
|   | |||||||
| @@ -95,12 +95,19 @@ | |||||||
|      |      | ||||||
|     <div class="content"> |     <div class="content"> | ||||||
|         <h1>Spoolman API URL / Bambu Credentials</h1> |         <h1>Spoolman API URL / Bambu Credentials</h1> | ||||||
|         <label for="spoolmanUrl">Set URL/IP to your Spoolman-Instanz:</label> |  | ||||||
|  |         <div class="card"> | ||||||
|  |             <div class="card-body"> | ||||||
|  |                 <h5 class="card-title">Set URL/IP to your Spoolman-Instanz</h5> | ||||||
|                 <input type="text" id="spoolmanUrl" placeholder="http://ip-or-url-of-your-spoolman-instanz:port"> |                 <input type="text" id="spoolmanUrl" placeholder="http://ip-or-url-of-your-spoolman-instanz:port"> | ||||||
|                 <button onclick="checkSpoolmanInstance()">Save Spoolman URL</button> |                 <button onclick="checkSpoolmanInstance()">Save Spoolman URL</button> | ||||||
|                 <p id="statusMessage"></p> |                 <p id="statusMessage"></p> | ||||||
|  |             </div> | ||||||
|  |         </div> | ||||||
|  |  | ||||||
|         <h2>Bambu Lab Printer Credentials</h2> |         <div class="card"> | ||||||
|  |             <div class="card-body"> | ||||||
|  |                 <h5 class="card-title">Bambu Lab Printer Credentials</h5> | ||||||
|                 <div class="bambu-settings"> |                 <div class="bambu-settings"> | ||||||
|                     <div class="input-group"> |                     <div class="input-group"> | ||||||
|                         <label for="bambuIp">Bambu Drucker IP-Adresse:</label> |                         <label for="bambuIp">Bambu Drucker IP-Adresse:</label> | ||||||
| @@ -118,5 +125,7 @@ | |||||||
|                     <p id="bambuStatusMessage"></p> |                     <p id="bambuStatusMessage"></p> | ||||||
|                 </div> |                 </div> | ||||||
|             </div> |             </div> | ||||||
|  |         </div> | ||||||
|  |     </div> | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
|   | |||||||
| @@ -279,9 +279,10 @@ a:hover { | |||||||
|  |  | ||||||
| /* Karten-Stil für optische Trennung */ | /* Karten-Stil für optische Trennung */ | ||||||
| .card { | .card { | ||||||
|     background: #f9f9f9; |     background: var(--primary-color); | ||||||
|  |     width: 500px; | ||||||
|     padding: 15px; |     padding: 15px; | ||||||
|     margin: 20px 0; |     margin: 20px auto; | ||||||
|     border-radius: 8px; |     border-radius: 8px; | ||||||
|     box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); |     box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); | ||||||
| } | } | ||||||
| @@ -959,7 +960,6 @@ input[type="submit"]:disabled, | |||||||
|  |  | ||||||
| /* Bambu Settings Erweiterung */ | /* Bambu Settings Erweiterung */ | ||||||
| .bambu-settings { | .bambu-settings { | ||||||
|     background: white; |  | ||||||
|     padding: 20px; |     padding: 20px; | ||||||
|     border-radius: 8px; |     border-radius: 8px; | ||||||
|     box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); |     box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								img/ESP32-SPI-Pins.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								img/ESP32-SPI-Pins.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 143 KiB | 
| @@ -9,7 +9,7 @@ | |||||||
| ; https://docs.platformio.org/page/projectconf.html | ; https://docs.platformio.org/page/projectconf.html | ||||||
|  |  | ||||||
| [common] | [common] | ||||||
| version = "1.3.79" | version = "1.3.92" | ||||||
| ## | ## | ||||||
| [env:esp32dev] | [env:esp32dev] | ||||||
| platform = espressif32 | platform = espressif32 | ||||||
|   | |||||||
| @@ -218,37 +218,6 @@ bool setBambuSpool(String payload) { | |||||||
|         doc.clear(); |         doc.clear(); | ||||||
|         yield(); |         yield(); | ||||||
|     } |     } | ||||||
| /* |  | ||||||
|     if (setting_id != "") { |  | ||||||
|         yield(); |  | ||||||
|         doc["print"]["sequence_id"] = 0; |  | ||||||
|         doc["print"]["command"] = "ams_filament_setting"; |  | ||||||
|         doc["print"]["nozzle_temp_min"] = minTemp; |  | ||||||
|         doc["print"]["nozzle_temp_max"] = maxTemp; |  | ||||||
|         doc["print"]["setting_id"] = setting_id; |  | ||||||
|         doc["print"]["tray_color"] = color.length() == 8 ? color : color+"FF"; |  | ||||||
|         doc["print"]["ams_id"] = amsId < 200 ? amsId : 255; |  | ||||||
|         doc["print"]["tray_id"] = trayId < 200 ? trayId : 254; |  | ||||||
|         doc["print"]["tray_info_idx"] = tray_info_idx; |  | ||||||
|         doc["print"]["tray_type"] = type; |  | ||||||
|  |  | ||||||
|         // Serialize the JSON |  | ||||||
|         String output; |  | ||||||
|         serializeJson(doc, output); |  | ||||||
|  |  | ||||||
|         if (sendMqttMessage(output)) { |  | ||||||
|             Serial.println("Filament Setting successfully set"); |  | ||||||
|         } |  | ||||||
|         else |  | ||||||
|         { |  | ||||||
|             Serial.println("Failed to set Filament setting"); |  | ||||||
|             return false; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         doc.clear(); |  | ||||||
|         yield(); |  | ||||||
|     } |  | ||||||
| */ |  | ||||||
|  |  | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										54
									
								
								src/main.cpp
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								src/main.cpp
									
									
									
									
									
								
							| @@ -15,10 +15,17 @@ | |||||||
| #include "esp_task_wdt.h" | #include "esp_task_wdt.h" | ||||||
| #include "commonFS.h" | #include "commonFS.h" | ||||||
|  |  | ||||||
|  | #include "soc/rtc.h" | ||||||
|  |  | ||||||
| // ##### SETUP ##### | // ##### SETUP ##### | ||||||
| void setup() { | void setup() { | ||||||
|   Serial.begin(115200); |   Serial.begin(115200); | ||||||
|  |  | ||||||
|  |   rtc_cpu_freq_config_t config; | ||||||
|  |   rtc_clk_cpu_freq_get_config(&config); | ||||||
|  |   rtc_clk_cpu_freq_to_config(RTC_CPU_FREQ_80M, &config); | ||||||
|  |   rtc_clk_cpu_freq_set_config_fast(&config); | ||||||
|  |  | ||||||
|   uint64_t chipid; |   uint64_t chipid; | ||||||
|  |  | ||||||
|   chipid = ESP.getEfuseMac(); //The chip ID is essentially its MAC address(length: 6 bytes). |   chipid = ESP.getEfuseMac(); //The chip ID is essentially its MAC address(length: 6 bytes). | ||||||
| @@ -58,7 +65,22 @@ void setup() { | |||||||
|    |    | ||||||
|   startNfc(); |   startNfc(); | ||||||
|  |  | ||||||
|   start_scale(); |   uint8_t scaleCalibrated = start_scale(); | ||||||
|  |   if (scaleCalibrated == 3) { | ||||||
|  |     oledShowMessage("Scale not calibrated!"); | ||||||
|  |     for (uint16_t i = 0; i < 50000; i++) { | ||||||
|  |       yield(); | ||||||
|  |       vTaskDelay(pdMS_TO_TICKS(1)); | ||||||
|  |       esp_task_wdt_reset(); | ||||||
|  |     } | ||||||
|  |   } else if (scaleCalibrated == 0) { | ||||||
|  |     oledShowMessage("HX711 not found"); | ||||||
|  |     for (uint16_t i = 0; i < 50000; i++) { | ||||||
|  |       yield(); | ||||||
|  |       vTaskDelay(pdMS_TO_TICKS(1)); | ||||||
|  |       esp_task_wdt_reset(); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|    |    | ||||||
|   // WDT initialisieren mit 10 Sekunden Timeout |   // WDT initialisieren mit 10 Sekunden Timeout | ||||||
|   bool panic = true; // Wenn true, löst ein WDT-Timeout einen System-Panik aus |   bool panic = true; // Wenn true, löst ein WDT-Timeout einen System-Panik aus | ||||||
| @@ -84,33 +106,33 @@ uint8_t wifiErrorCounter = 0; | |||||||
|  |  | ||||||
| // ##### PROGRAM START ##### | // ##### PROGRAM START ##### | ||||||
| void loop() { | void loop() { | ||||||
|  |  | ||||||
|   /* |  | ||||||
|   // Überprüfe den WLAN-Status |  | ||||||
|   if (WiFi.status() != WL_CONNECTED) { |  | ||||||
|     wifiErrorCounter++; |  | ||||||
|     wifiOn = false; |  | ||||||
|   } else { |  | ||||||
|     wifiErrorCounter = 0; |  | ||||||
|     wifiOn = true; |  | ||||||
|   } |  | ||||||
|   if (wifiErrorCounter > 20) ESP.restart(); |  | ||||||
|   */ |  | ||||||
|   |  | ||||||
|   unsigned long currentMillis = millis(); |   unsigned long currentMillis = millis(); | ||||||
|  |  | ||||||
|   // Send AMS Data min every Minute |   // Send AMS Data min every Minute | ||||||
|   if (currentMillis - lastAmsSendTime >= amsSendInterval) { |   if (currentMillis - lastAmsSendTime >= amsSendInterval)  | ||||||
|  |   { | ||||||
|     lastAmsSendTime = currentMillis; |     lastAmsSendTime = currentMillis; | ||||||
|     sendAmsData(nullptr); |     sendAmsData(nullptr); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   // Wenn Waage nicht Kalibriert | ||||||
|  |   if (scaleCalibrated == 3)  | ||||||
|  |   { | ||||||
|  |     oledShowMessage("Scale not calibrated!"); | ||||||
|  |     vTaskDelay(5000 / portTICK_PERIOD_MS); | ||||||
|  |     yield(); | ||||||
|  |     esp_task_wdt_reset(); | ||||||
|  |      | ||||||
|  |     return; | ||||||
|  |   }  | ||||||
|  |  | ||||||
|   // Ausgabe der Waage auf Display |   // Ausgabe der Waage auf Display | ||||||
|   if (pauseMainTask == 0 && weight != lastWeight && hasReadRfidTag == 0) |   if (pauseMainTask == 0 && weight != lastWeight && hasReadRfidTag == 0) | ||||||
|   { |   { | ||||||
|     (weight < 0) ? oledShowMessage("!! -1") : oledShowWeight(weight); |     (weight < 2) ? oledShowMessage("0") : oledShowWeight(weight); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |  | ||||||
|   // Wenn Timer abgelaufen und nicht gerade ein RFID-Tag geschrieben wird |   // Wenn Timer abgelaufen und nicht gerade ein RFID-Tag geschrieben wird | ||||||
|   if (currentMillis - lastWeightReadTime >= weightReadInterval && hasReadRfidTag < 3) |   if (currentMillis - lastWeightReadTime >= weightReadInterval && hasReadRfidTag < 3) | ||||||
|   { |   { | ||||||
|   | |||||||
| @@ -16,6 +16,7 @@ int16_t weight = 0; | |||||||
| uint8_t weigthCouterToApi = 0; | uint8_t weigthCouterToApi = 0; | ||||||
| uint8_t scale_tare_counter = 0; | uint8_t scale_tare_counter = 0; | ||||||
| uint8_t pauseMainTask = 0; | uint8_t pauseMainTask = 0; | ||||||
|  | uint8_t scaleCalibrated = 1; | ||||||
|  |  | ||||||
| Preferences preferences; | Preferences preferences; | ||||||
| const char* NVS_NAMESPACE = "scale"; | const char* NVS_NAMESPACE = "scale"; | ||||||
| @@ -50,11 +51,11 @@ void scale_loop(void * parameter) { | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| void start_scale() { | uint8_t start_scale() { | ||||||
|   Serial.println("Prüfe Calibration Value"); |   Serial.println("Prüfe Calibration Value"); | ||||||
|   long calibrationValue; |   long calibrationValue; | ||||||
|  |  | ||||||
|   // NVS |   // NVS lesen | ||||||
|   preferences.begin(NVS_NAMESPACE, true); // true = readonly |   preferences.begin(NVS_NAMESPACE, true); // true = readonly | ||||||
|   calibrationValue = preferences.getLong(NVS_KEY_CALIBRATION, defaultScaleCalibrationValue); |   calibrationValue = preferences.getLong(NVS_KEY_CALIBRATION, defaultScaleCalibrationValue); | ||||||
|   preferences.end(); |   preferences.end(); | ||||||
| @@ -64,7 +65,10 @@ void start_scale() { | |||||||
|  |  | ||||||
|   scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN); |   scale.begin(LOADCELL_DOUT_PIN, LOADCELL_SCK_PIN); | ||||||
|  |  | ||||||
|   if (isnan(calibrationValue) || calibrationValue < 1) calibrationValue = defaultScaleCalibrationValue; |   if (isnan(calibrationValue) || calibrationValue < 1) { | ||||||
|  |     calibrationValue = defaultScaleCalibrationValue; | ||||||
|  |     scaleCalibrated = 0; | ||||||
|  |   } | ||||||
|  |  | ||||||
|   oledShowMessage("Scale Tare Please remove all"); |   oledShowMessage("Scale Tare Please remove all"); | ||||||
|   for (uint16_t i = 0; i < 2000; i++) { |   for (uint16_t i = 0; i < 2000; i++) { | ||||||
| @@ -97,6 +101,8 @@ void start_scale() { | |||||||
|   } else { |   } else { | ||||||
|       Serial.println("ScaleLoop-Task erfolgreich erstellt"); |       Serial.println("ScaleLoop-Task erfolgreich erstellt"); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   return (scaleCalibrated == 1) ? 1 : 3; | ||||||
| } | } | ||||||
|  |  | ||||||
| uint8_t calibrate_scale() { | uint8_t calibrate_scale() { | ||||||
|   | |||||||
| @@ -5,7 +5,7 @@ | |||||||
| #include "HX711.h" | #include "HX711.h" | ||||||
|  |  | ||||||
|  |  | ||||||
| void start_scale(); | uint8_t start_scale(); | ||||||
| uint8_t calibrate_scale(); | uint8_t calibrate_scale(); | ||||||
| uint8_t tareScale(); | uint8_t tareScale(); | ||||||
|  |  | ||||||
| @@ -14,6 +14,7 @@ extern int16_t weight; | |||||||
| extern uint8_t weigthCouterToApi; | extern uint8_t weigthCouterToApi; | ||||||
| extern uint8_t scale_tare_counter; | extern uint8_t scale_tare_counter; | ||||||
| extern uint8_t pauseMainTask; | extern uint8_t pauseMainTask; | ||||||
|  | extern uint8_t scaleCalibrated; | ||||||
|  |  | ||||||
| extern TaskHandle_t ScaleTask; | extern TaskHandle_t ScaleTask; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -384,7 +384,8 @@ void setupWebserver(AsyncWebServer &server) { | |||||||
|         html.replace("{{spoolmanUrl}}", spoolmanUrl); |         html.replace("{{spoolmanUrl}}", spoolmanUrl); | ||||||
|  |  | ||||||
|         JsonDocument doc; |         JsonDocument doc; | ||||||
|         if (loadJsonValue("/bambu_credentials.json", doc) && doc["bambu_ip"].is<String>()) { |         if (loadJsonValue("/bambu_credentials.json", doc) && doc["bambu_ip"].is<String>())  | ||||||
|  |         { | ||||||
|             String bambuIp = doc["bambu_ip"].as<String>(); |             String bambuIp = doc["bambu_ip"].as<String>(); | ||||||
|             String bambuSerial = doc["bambu_serialnr"].as<String>(); |             String bambuSerial = doc["bambu_serialnr"].as<String>(); | ||||||
|             String bambuCode = doc["bambu_accesscode"].as<String>(); |             String bambuCode = doc["bambu_accesscode"].as<String>(); | ||||||
| @@ -396,6 +397,12 @@ void setupWebserver(AsyncWebServer &server) { | |||||||
|             html.replace("{{bambuSerial}}", bambuSerial ? bambuSerial : ""); |             html.replace("{{bambuSerial}}", bambuSerial ? bambuSerial : ""); | ||||||
|             html.replace("{{bambuCode}}", bambuCode ? bambuCode : ""); |             html.replace("{{bambuCode}}", bambuCode ? bambuCode : ""); | ||||||
|         } |         } | ||||||
|  |         else | ||||||
|  |         { | ||||||
|  |             html.replace("{{bambuIp}}", ""); | ||||||
|  |             html.replace("{{bambuSerial}}", ""); | ||||||
|  |             html.replace("{{bambuCode}}", ""); | ||||||
|  |         } | ||||||
|  |  | ||||||
|         request->send(200, "text/html", html); |         request->send(200, "text/html", html); | ||||||
|     }); |     }); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user