Hat von euch schon jemand sich eine Blockclock selber gebaut?
Habe hier einen ESP8266 und ein TM1637 6-stelliges LED-Display.
Müsste doch eigentlich möglich sein?
Bin kein Programmier Freak. ChatGPT hat gut geholfen, aber leider bekomme ich, egal was ich kompiliere, immer komische Fehler angezeigt.
Komme nicht weiter.
Gibts hier Leute die das schon gemacht habe, oder Lust haben zu helfen?
Hey, ich hab vor ein paar Tagen nach dem gleichen gesucht und nur diesen Thread hier gefunden
Daher hab ich mal selber was aufgesetzt und gerade auf GitHub gestellt:
Ich bin nicht ganz sicher, aber die LedController Bibliothek die ich verwende müsste auch für die TM1637 Anzeige gehen. In der config.hpp müsstest du noch die Sachen anpassen so dass sie für dich passen.
Wenn das nicht geht kannst dich ja trotzdem mal melden, vielleicht kann ich dir ja mit deinem code helfen…
So sieht das ganze bei mir aus (hab mir noch ein Gehäuse dafür aus Holz gebaut…):
Hey du! Ja sehr geil! wusste ich doch, dass es irgendwie geht :-D bin wahrscheinlich nur zu doof für sowas ;-) Aber man muss ja auch nicht ALLES perfekt können richtig? ;-)
Cool dann werde ich mir die github Seite mal anschauen sobald es geht. Werde mich, so wie ich mich kenne, ganz bestimmt bei dir melden!
Das Gehäuse sieht ja mal richtig edel aus!
Update :-)
gerade mal rein geschaut bei github. Ich bin echt zu doof für Github.
Wo finde ich da nun Informationen, was ich genau machen muss um es nachzubauen?
Hm, wo genau hapert es?
Du lädst erstmal den Code runter, öffnest das .ino File in der Arduino IDE, und kompilierst es für deinen Controller. Dabei wird ihm dann vermutlich die LEDController Bibliothek fehlen, die musst du noch installieren.
Wenn das kompilieren klappt, passt du noch in der config.hpp deine Sachen an. Also an welchen Pins das Display angeschlossen ist, und die WLAN Informationen vor allem. Und ich hab noch die Anzahl der Stellen konfigurierbar gemacht. Bei mir sind 8, du schriebst oben du hast ein 6-stelliges Display… dann kannst mal schauen ob es läuft. Vermutlich wird die letzte Stelle bei dir nicht angezeigt, weil ich hab die erste Stelle immer frei gelassen, damit die aktuell 6-stellige Blockzeit mittig bei mir im Display steht. Da müsste man dann noch mal ran an den Code…
Wenns irgendwo nicht klappt, musst mal genauer beschreiben wo du hängst bzw. was passiert…
ah ok. das mit der .ino Datei hatte ich übersehen
wenn ich mir den Code so anschaue, muss ich aber doch irgendwo auch mein Wlan und das Passwort eingeben. Aber wo? Sieht irgendwie anders aus bei dir, als bei anderen codes die ich bisher probiert hatte.
oh man vor lauter lauter zu viel überlesen sorry.
hab mir by the way mal die gleiche Hardware bestellt wie du sie hast. dauert noch etwas.
Versuche es trotzdem mit dem was ich hier liegen haben.
wenn ich die blockclock.ino öffne, erscheint ein Feld wo steht:
Die Datei „blockclock.ino“ muss sich in einen Sketch Ordner „blockclock“ befinden. Ordner erstellen, Datei verschieben und fortfahren?
ich bin etwas weiter.
ich Depp hab die ganze Zeit die falschen Bibliotheken probiert.
ist halt alles auch noch recht neu für mich.
dachte auch: komm installier einfach 4-5. kann ja nix schaden
Jetzt schaffe ich es endlich mal was am Display anzuzeigen.
Aktuell bekomme ich beim Kompilieren diesen Fehler:
Compilation error: ‚SPI_MOSI‘ was not declared in this scope; did you mean ‚SPIUMOSI‘?
liegt an den Anschlüssen. Mein Display hat nur:
VCC, GND, DIO und CLK
Kann dir leider nicht folgen
SPI_MOSI klingt nach einer Definition aus meinem Sketch, aber jetzt verwendest du eine andere Bibliothek?
Dann müsstest du wenigstens deinen Code posten.
würde ja am liebsten auf Telegram oder Discord rüber switchen ;-)
naja ich habe deinen code genommen und ihn bei perplexity eingegeben, da er ja nicht zu meiner Hardware passte.
Dort gesagt, welche Bibliothek ich verwende für mein Display. (siehe oben)
Nun sieht der Code so aus: edit. siehe paar Beiträge weiter unten
und hier noch die config.hpp (warum braucht man die überhaupt? warum schreibt man nicht alles in den normalen Code rein?
Status:
Einen Fehler beim Kompilieren oder Hochladen bekomme ich nicht, doch ich bekomme in dem 6stelligen Display nur eine Null ganz rechts angezeigt.
Scheint er empfängt keine Daten die er anzeigen kann?
Hey, ich hab mir auch eine Blockclock aus einem ESP32 und TM1637 gebaut. Das sollte deiner Hardware sehr nahe kommen. Kann dir den Code mal morgen zur Verfügung stellen.
Also die Funktion getBitcoinBlockHeight() sieht ziemlich zweifelhaft aus, ich bin mir fast sicher dass das so nicht funktioniert
Um es zu verifizieren, ersetze doch einfach mal in der loop() Funktion die erste Zeile durch die hier: long blockHeight = 123456;
Dann auf den Controller laden, und wenn dein Display dann 123456 anzeigt, dann weißt du schon mal dass alles richtig verkabelt ist und das Display prinzipiell geht. Dann kann man weiter schauen.
ich hab keine Ahnung wo das getBitcoinBlockHeight her kommt Hab eigentlich nur perplexity gesagt, es soll deinen code anpassen mit meiner Bibliothke :-D
wenn ich den Versuch mit dem 123456 mache, bekomme ich direkt diese Meldung:
Compilation error: expression cannot be used as a function
hättest du evtl die Möglichkeit deinen Code für mich zu ändern? Sprich die oben von mir genannte Bibliotheke rein schreiben und meinen esp8266 nodemcu v4?
dann müsste es ja gehen.
weil so kommen wir glaub ich nicht weiter :-)
würde mich sehr freuen und wenn es klappt auch gerne erkenntlich zeigen
Sorry für die späte Antwort. Hier ist mein Code. Sicherlich nicht der schönste Code aber funktioniert bei mir Kannst du ja mal testen und dich melden, falls etwas nicht funktioniert.
edit: ach ups ich hatte ja gar nicht erwähnt, dass ich mir den aktuellen Bitcoin Kurs ausgeben lasse. Das müsstest du dementsprechend noch ändern.
#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <TM1637TinyDisplay6.h> // Include 6-Digit Display Class Header
// Define Digital Pins
#define CLK 22
#define DIO 21
TM1637TinyDisplay6 display(CLK, DIO); // 6-Digit Display Class
// WLAN-Zugangsdaten
const char* ssid = "****";
const char* password = "****";
// API-URL für den Bitcoin-Kurs in Euro
const char* apiURL = "https://api.coingecko.com/api/v3/simple/price?ids=bitcoin&vs_currencies=eur";
void setup() {
Serial.begin(115200); // Initialisiere die serielle Kommunikation
// Initialisiere das Display
display.begin();
display.setBrightness(7); // Setze die Helligkeit auf den maximalen Wert (7)
// Stelle eine Verbindung zum WLAN her
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to WiFi");
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(apiURL); // Starte die Verbindung zur API
int httpCode = http.GET(); // Sende die GET-Anfrage
if (httpCode == 200) { // Wenn die Anfrage erfolgreich war
String payload = http.getString(); // Hole die Antwort als String
Serial.println("Received payload: " + payload); // Debug-Ausgabe
int BitcoinRate = parseBitcoinRate(payload); // Parste den Bitcoin-Kurs
if (BitcoinRate >= 0) { // Überprüfe, ob der Kurs gültig ist
display.showNumberDec(BitcoinRate, 0b00100000, false); // Zeige die ganzzahlige Zahl an
} else {
Serial.println("Invalid Bitcoin rate");
}
} else {
Serial.println("Error on HTTP request, code: " + String(httpCode));
}
http.end(); // Schließe die Verbindung
} else {
Serial.println("WiFi Disconnected");
}
delay(10000); // Warte 10 Sekunden, bevor der nächste Kurs abgerufen wird
}
// Funktion zum Parsen des Bitcoin-Kurses aus dem API-Antwort-String
int parseBitcoinRate(const String& payload) {
int startIndex = payload.indexOf("\"eur\":") + 6;
int endIndex = payload.indexOf("}", startIndex);
if (startIndex > 0 && endIndex > startIndex) {
String rateString = payload.substring(startIndex, endIndex);
return rateString.toInt();
}
return -1; // Rückgabewert im Fehlerfall
}