Die Idee stammt aus dem Projekt. ESP8266 Wetteranzeige.
Ich beschloss, mich daran zu erinnern.
Folgende Aufgaben wurden gestellt:
- Aktualisieren Sie den nutzungsbezogenen Code neue Version Bibliotheken ArduinoJson.h.
- Schreiben Sie den Code mit der Funktion millis () anstelle der Funktion delay () neu. Es ist klar, dass es mit der Verzögerung zum Einstellen einer Pause zwischen dem Ändern von Informationen auf dem Display unmöglich ist, Tastensteuerungen zu implementieren.
- Machen Sie Skizzen über Wifi herunterladen;
- Entfliehen Sie dem sperrigen Wemos D1 R2 auf dem Wemos D1 mini.
- Nach Möglichkeit Anzeige russifizieren;
- Verwenden Sie ein fertiges Gehäuse mit Knopflöchern für Geräte, die auf LCD1602 basieren.
- Verwenden Sie Standard-6x6-Tasten, die an das Steckbrett gelötet sind. Fügen Sie Steuerungsschaltflächen für die Hintergrundbeleuchtung, eine Karusselltaste zum Ändern der angezeigten Daten und eine Schaltfläche zum Erzwingen von Datenaktualisierungen vom Server hinzu.
Folgende Komponenten wurden verwendet:
- Das Gehäuse besteht aus ABS-Kunststoff mit einem Satz Abdeckungen für die Tasten.
- Nylonstreben 6 + 5 mm männlich M3 schwarz, 4 Stk;
- M3 Nylonmuttern schwarz, 4 Stück;
- Nylonpfosten 6 + 5 mm männlich M2 weiß, 3 Stück;
- Nylonständer 6 mm mutterweiß, 1 Stck;
- Nylonständer 8 mm mutterweiß, 1 Stk.;
- Nylongestelle 10mm mutterweiß, 2 Stk;
- LCD 1602 (I2C), gelb;
- Wemos d1 mini;
- Wemos d1 DC-Power Shield;
- Brett Steckbrett 3x7;
- Knöpfe 6x6, Höhe 7 mm, 3 Stück;
- Dupont Drähte 10cm Mutter-Mutter, 4 Stück;
- 24 AWG Drähte schwarz und rot;
- Silikondrähte 20 AWG blau und weiß;
- Widerstände 5 kOhm - 2 Stk., 10 kOhm - 1 Stk. (Die zur Hand kamen);
- Netzteil 9V 1A;
- Zweikomponenten-Epoxidklebstoff.
Der verwendete Fall hat mehrere Vorteile. Erstens passt neben dem Display auch die Standard-3x7-Standard-Entkopplungsplatte mit beidseitig installierten Komponenten perfekt in die Höhe. Zweitens hat es an zwei Enden rechteckige Öffnungen zum Kühlen. Es stellte sich heraus, dass die Jumper zwischen diesen Löchern durch Minifeilen 3 und 4 mm perfekt geschnitten sind. Wenn Sie ein paar Jumper schneiden und ein kleines rechteckiges Loch in das Gehäuse schneiden, passt der DC-005-Stromanschluss perfekt in das Loch mit der komplexen Geometrie. Auch die Rückseite dieses Gehäuses hat ein großes quadratisches Loch, in das anscheinend Batterien eingelegt werden sollten.Dadurch ist es bequem, etwas im Inneren anzuschließen, ohne das Gehäuse zu zerlegen. Anschließend kann es einfach mit Glas oder Kunststoff verschlossen werden.
Fortschritt aufbauen:
Zunächst wurde ein Prototyp auf einem Steckbrett hergestellt.
Dann wird der Fall mit einer Datei abgeschlossen.
Danach werden die Hauptkomponenten verlötet und die Montage durchgeführt. Die Beine wurden speziell gebogen, damit die abnehmbaren Gelenke in die Höhe passen. Ein paar Nylongestelle mussten abgelegt werden, damit sich alle Knöpfe auf gleicher Höhe befanden.
Infolgedessen ist die Vorderseite der Platine mit Knöpfen, Widerständen und Drähten wie folgt:
Infolgedessen sehen die Innenseiten des Geräts folgendermaßen aus:
Im zusammengebauten Zustand sieht das Gerät folgendermaßen aus:
Schwierigkeiten überwinden:
- Lange Zeit konnte ich nicht verstehen, warum die Tasten nicht funktionierten, obwohl das Multimeter beim Drücken der Tasten deutlich 0 und beim Drücken von 4,6 - 5,0 V (abhängig von der Stromversorgung) deutlich zeigte. Es stellte sich heraus, dass bei Wemos / Lolin-Geräten GPIO-Nummern in der Skizze als PIN-Nummern angegeben werden müssen. Zum Beispiel ist D5 GPIO14. Das ist also der 14. Pin.
const int buttonPin = 14;
- Um das Wetter zu zeigen, ist die Bedingung notwendig:
currentMillis - previousMillis == weatherTime
Strenge Korrespondenz, weil sie einmal gemacht werden muss.
Um eine Anfrage an den Server zu stellen, ist die Bedingung erforderlich:currentMillis - previousMillis> = getDataTime
Lose Konformität, da sie ausgeführt wird, bis das Flag "Daten empfangen" gesetzt ist.
Tatsächlich ist dies nicht offensichtlich, und um dies zu verstehen, hat es ziemlich lange gedauert. - Ich musste mich auch mit der Antwort des Servers quälen:
String weather = root ["Wetter"] [0] ["Haupt"]; String description = root ["Wetter"] [0] ["Beschreibung"];
Zero war völlig offensichtlich. Es stellt sich heraus, dass es in Moskau zwei Wetterstationen gibt, von denen die zweite nicht immer funktioniert (um Daten von ihr zu erhalten, müssen Sie [1] angeben, wenn sie aktiv sind).
Das Repository mit Code und Bibliotheken befindet sich hier.