Wie spät ist es?Ich verwende seit mehreren Jahren alte Mobiltelefone als Uhren.
Android 2.2.2 - Froyo. This one still going, its sibling has failed. And more recent phones have failed.Android 2.2.2 - Froyo. This one still going, its sibling has failed. And more recent phones have failed.Android 2.2.2 - Froyo. This one still going, its sibling has failed. And more recent phones have failed.Android 2.2.2 - Froyo. This one still going, its sibling has failed. And more recent phones have failed.Android 2.2.2 – Froyo. Dieses läuft immer noch, sein Schwestermodell ist gescheitert. Und neuere Telefone sind ausgefallen.
Zwei sind gerade gescheitert. Das ist der letzte, der läuft...gute Hardware. Wirklich altes Betriebssystem, erhält aber immer noch die Zeit vom Netzwerk und aktualisiert sich immer noch, wenn wir auf Sommerzeit umstellen und zurück.
Also muss ich sie ersetzen, und ich fing an, über Arduinos und Himbeeren nachzudenken und stolperte über ESP32.
Quarter inch squares, this is about 25cm x 50cmQuarter inch squares, this is about 25cm x 50cmQuarter inch squares, this is about 25cm x 50cmQuarter inch squares, this is about 25cm x 50cmViertelzollquadrate, das sind etwa 25 cm x 50 cm
Das ist von Espresso und ich habe dieses bei Amazon gekauft, 3 für 17 $. Bisher habe ich damit gespielt, eine LED blinken zu lassen und die integrierte WLAN-Hardware zu verwenden. Ja, WIFI und Bluetooth und viele I/O-Pins, 4 MB ROM und 512 KB RAM (glaube ich. Ich habe noch nicht weit genug recherchiert, um es sicher zu wissen.) Dabei habe ich das NTP-Beispiel (Network Time Protocol) ausgeführt und begann mich zu fragen, wie NTP funktioniert.
Im Grunde ist NTP wirklich einfach. Ein Computer, der die Uhrzeit wissen möchte, sendet eine kurze Nachricht an einen anderen Computer, der einen NTP-Server hostet, und dieser Computer sendet eine kurze Nachricht zurück, die die GMT-Zeit enthält. Erledigt.
(Es ist viel komplizierter; anscheinend können die NTP-Server die Frage 1000 Mal pro Jahr beantworten zweite ! Und die Mechanismen zur Synchronisierung der Server nutzen Statistiken. Und David L. Mills erfand das NTP-Zeug um 1980 .)
Das Internet verwendet hauptsächlich TCP (Übertragungskontrollprotokoll) , ein robustes Protokoll, das auf IP aufbaut. TCP-Wiederholungsversuche usw., um sicherzustellen, dass die Daten in der richtigen Reihenfolge und intakt übermittelt werden. Es ist ein schweres Protokoll. NTP-Server verwenden ein leichtes Protokoll, UDP (auch zusätzlich zu IP), das nichts garantiert. Ihre Nachrichten gehen möglicherweise verloren, kommen nie an oder kommen in der falschen Reihenfolge an. Die Belastung des Servers ist jedoch minimal; Der Server muss keinen zusätzlichen Handshake durchführen, um sicherzustellen, dass Sie eine Antwort erhalten. Das U in UDP (User Datagram Protocol) bedeutet, dass der Benutzer für die Fehlerbehandlung verantwortlich ist.
Diese JSL erstellt einen Socket, um Port 123 (den NTP-Port) und das UDP-Protokoll zu verwenden, um eine Nachricht an einen Pool von NTP-Servern zu senden und die Antwort zu erhalten. Es funktioniert teilweise ganz einfach Statistiken Mathematik, die davon ausgeht, dass die Reisezeiten zum und vom Server gleich sind, sodass die Zeit des Servers besser mit dem lokalen Computer synchronisiert werden kann. Die Ergebnisse sind ziemlich gut! Hier ist ein etwas überdurchschnittliches Beispiel, bei dem ein Server im Pool auf halbem Weg um die Welt gefunden wurde:
pool.ntp.org(rn5.quickhost.hk)
Gesamtzeit = 0,143846988677979
Flugzeit = 0,143799781799316
Differenz = 0:00:00.01689
Angenommen, .hk befindet sich wirklich in Hongkong, dann sind das 8.000 Meilen von North Carolina entfernt. 16.000 Hin- und Rückfahrt. Die Flugzeit ist die Gesamtzeit abzüglich der Bearbeitungszeit in Hongkong, die vernachlässigbar war. Wenn ich richtig gerechnet habe, sind das mehr als 100.000 Meilen pro Sekunde, ein erheblicher Bruchteil der Lichtgeschwindigkeit.
Die letzte Zahl, Differenz, ist die Differenz zwischen meiner CPU-Uhr und der Uhr des NTP-Servers. Das ist weniger als 1/50 Sekunde. Und ich erhalte Ergebnisse von den meisten Servern innerhalb von 1/10 Sekunde, es sei denn, die Flugzeit ist groß. In diesem Fall ist sie asymmetrisch und die Korrekturtechnik versagt.
pool.ntp.org(LAX.CALTICK.NET)
Gesamtzeit = 0,101963043212891
Flugzeit = 0,101903915405273
Differenz = 0:00:00.08646
pool.ntp.org(ns2.nuso.cloud)
Gesamtzeit = 0,103617668151855
Flugzeit = 0,103596687316895
Differenz = 0:00:00.04034
pool.ntp.org(50-205-57-38-static.hfc.comcastbusiness.net)
Gesamtzeit = 0,0763883590698242
Flugzeit = 0,0763206481933594
Differenz = 0:00:00.00965
pool.ntp.org(13.86.101.172)
Gesamtzeit = 0,077089786529541
Flugzeit = 0,07708740234375
Differenz = 0:00:00.00663
// this snippet demonstrates a UDP (User Datagram Protocol) exchange with an NTP
// (Network Time Protocol) server using a JSL socket. NTP sends enough information
// from an NTP server to correct for some network delays and make a really good guess
// at the local time, possibly within 1/100 second, usually within 1/10 second (depending
// on how similar send and receive times are.) Using the OS time setting to sync your
// clock first (which uses NTP as well) will make the deltas near zero. Otherwise the
// deltas should be similar across several runs. Your computer clock will drift between
// the syncs (once a day?) that your computer automatically performs with an NTP server.
//
// idea from https://lettier.github.io/posts/2016-04-26-lets-make-a-ntp-client-in-c.html
timezone = -4; // (tz for my computer) Eastern Daylight Time is GMT-4.
// build the transmit packet to send to the NTP server
xPacket = Hex To Blob( "1b" || Repeat( "00", 47 ) );
// make the socket object
sock = Socket( DGRAM ); // not a normal STREAM socket, this is an unreliable UDP socket.
// choose a server (or server pool)
addr = "pool.ntp.org"; // a pool of servers. Don't ask too often, they have a heavy load.
// if nothing goes wrong, the bind and ioctl are optional, but
// if we never get a response (for various reasons) we'd rather not hang forever...
rc = sock << bind( addr, "123" ); // bind, maybe not required, but needed for NBIO...
If( rc[2] != "ok",
sock << close;
Throw( "bad bind" );
);
rc = sock << Ioctl( FIONBIO, 1 ); // NBIO: non blocking i/o. the unreliable UDP may never answer.
If( rc[2] != "ok",
sock << close;
Throw( "bad ioctl" );
);
// send our request to the server. <<SENDTO is="" for="" unreliable="" udp="" packets.=""></SENDTO>

Verwenden von UDP-Sockets, um Zeit von einem NTP-Server abzurufen.
Betreff: Wie spät ist es?Bevor ich Revision 2 der Platine bestelle, baue ich die beiden anderen Platinen der ersten Bestellung. Wie das erste, aber parallel dazu ein bisschen konstruieren und testen. Und ich habe etwas gelernt, was ich nicht erwartet hatte.
Die Build-Phasen sehen in etwa so aus:
- Platzieren Sie alle flachen, kleinen und kostengünstigen Komponenten auf der Platine. Sie sind später schwer zu erledigen.
- Fügen Sie die LED-Treiber und drei 16-Pin-ICs hinzu.
- Fügen Sie die Netzteilkomponenten hinzu und prüfen Sie, ob die Betriebsanzeige-LEDs aufleuchten.
- Fügen Sie die CPU hinzu und stellen Sie sicher, dass sie ein heruntergeladenes Programm akzeptiert.
- Fügen Sie die Ziffern auf der anderen Seite hinzu. Die Ziffern verbergen Dinge, also müssen sie an letzter Stelle stehen.
Some of these prototypes are not working correctly.Some of these prototypes are not working correctly.Some of these prototypes are not working correctly.Some of these prototypes are not working correctly.Einige dieser Prototypen funktionieren nicht richtig. Die Ziffern (vier davon) sind bescheiden teuer und etwas empfindlich. Ich habe etwas zufällig eine platziert (Stunden-Eins-Position) und einen kurzen Test durchgeführt. Nur einige der Segmente funktionierten. Zurück zur Werkbank, Sichtprüfung, Messgeräteprüfung, schließlich das Zielfernrohr herausziehen. An diesem Punkt gibt es ein halbes Dutzend Dinge, die falsch sein könnten; alles von der CPU über die Treiber-ICs bis hin zu den Ziffern. Es ist nicht das grundlegende Design; Ich habe zwei funktionierende Prototypen (einen auf einem Steckbrett, einen auf der ersten Platine).
Die Uhr ist ein Multiplex-Design; Jeder Treiberchip verfügt über vier Ausgänge. Einer der Treiber wählt eine Ziffer aus und die anderen beiden Treiber wählen sieben Segmente und einen Dezimalpunkt aus. Eine 4X8-Matrix aus 32 Elementen, adressiert durch 12 Bits. Es können bis zu acht Elemente gleichzeitig eingeschaltet sein (eine Ziffer). Glücklicherweise schaue ich mir eine Ziffer an, bei der die meisten Segmente vorhanden sein sollten, und sehe alle fehlenden Segmente, die zu einem Treiberchip gehören. Anhand des Oszilloskops auf diesem Chip sehe ich, dass die Eingänge das Einschalten der Segmente anfordern, aber die Ausgänge sind ... tot.
Der Austausch eines ICs ist mühsam. Ich nahm ein frisches aus der Tube, installierte es und ... Mist! Es ist besser, aber ein Segment wird immer noch nicht angezeigt! Habe ich eine Fehldiagnose gestellt? Bröckelt sonst noch etwas?
Warten. Ich baue zwei Karten parallel. Schauen wir uns das andere an. Nichts. Keine Segmente. Nach ein wenig Studieren ... Hmm. Dieses Mal ist das Problem nicht der Treiber für die Segmente, sondern der Treiber für eine andere Achse in der Matrix, die eine Ziffer auswählt. Habe ich eine ganze Röhre voller defekter ICs?
Dabei handelte es sich um eine unbenutzte Röhre mit ICs, die etwa 10 Jahre zuvor für ein anderes Projekt gekauft worden war. Ich muss einen Tester bauen. Hier zeigt der Tester vier grüne Lichter für einen Chip, den ich kürzlich von einem anderen Händler gekauft habe.
All 10 in the newer tube checked out good.All 10 in the newer tube checked out good.All 10 in the newer tube checked out good.All 10 in the newer tube checked out good.Alle 10 in der neueren Röhre haben sich als gut erwiesen.
Ich glaube derzeit, dass mindestens 5/10 der Chips in der anderen Röhre an einem oder mehreren Ausgängen defekt waren:
Crush the pins in (to prevent re-use) and roll them on their backs so they look like dead bugs. Even 3/4 OK is not good enough when all four outputs are needed!Crush the pins in (to prevent re-use) and roll them on their backs so they look like dead bugs. Even 3/4 OK is not good enough when all four outputs are needed!Crush the pins in (to prevent re-use) and roll them on their backs so they look like dead bugs. Even 3/4 OK is not good enough when all four outputs are needed!Crush the pins in (to prevent re-use) and roll them on their backs so they look like dead bugs. Even 3/4 OK is not good enough when all four outputs are needed!Zerdrücken Sie die Nadeln (um eine Wiederverwendung zu verhindern) und rollen Sie sie auf den Rücken, sodass sie wie tote Käfer aussehen. Selbst 3/4 OK ist nicht gut genug, wenn alle vier Ausgänge benötigt werden!
Was ich gelernt habe, betrifft vielleicht das Testen der Chips vor der Installation, aber ich glaube nicht, dass das wirklich nötig ist. Aber ich werde das Oszilloskop verwenden, um einen Test durchzuführen, wobei ich wahrscheinlich die Elemente 2 und 3 in der Baugruppe vertauschen werde, damit ich etwas besser testen kann, bevor ich eine Ziffer anfüge. Wählen Sie dann für die Platzierung der ersten Ziffer eine aus, die die Stromversorgung blockiert, nicht einen Treiberchip. Im Moment muss ich eine Ziffer entfernen, damit ich einen Treiber-IC entfernen kann.
Betreff: Wie spät ist es?Prototyp gebaut und funktionsfähig.
It's hard for me to call this the back; it was the front in KiCad.It's hard for me to call this the back; it was the front in KiCad.It's hard for me to call this the back; it was the front in KiCad.It's hard for me to call this the back; it was the front in KiCad.Es fällt mir schwer, das als „Rückseite“ zu bezeichnen; Es war die Vorderseite in KiCad.
The flash makes the white balance show the red digits as red.The flash makes the white balance show the red digits as red.The flash makes the white balance show the red digits as red.The flash makes the white balance show the red digits as red.Durch den Blitz werden beim Weißabgleich die roten Ziffern rot angezeigt.
With no flash, the white balance messes up the colors, but this is closer to what it really looks like otherwise.With no flash, the white balance messes up the colors, but this is closer to what it really looks like otherwise.With no flash, the white balance messes up the colors, but this is closer to what it really looks like otherwise.With no flash, the white balance messes up the colors, but this is closer to what it really looks like otherwise.Ohne Blitz verfälscht der Weißabgleich die Farben, aber so sieht es sonst eher aus.
Die Linearregler laufen sehr heiß; Der 5-V-Regler liefert etwa 1/4 Ampere, aber das bedeutet, dass der 16-V-Eingang 11 Volt * 1/4 Ampere = fast 3 Watt in diesen winzigen Kühlkörper abgibt. Zeit, sich einen Drop-in-Ersatz-Schaltregler anzusehen. Anscheinend die gleiche Packungsgröße, aber 90 % effizient.
Betreff: Wie spät ist es?Platinen sind da! Entworfen mit KiCad , Hergestellt von ArbeitsschutzPark , 20 Tage, davon 11 Tage Herstellung und 8 Tage kostenloser Versand (sparen, wo ich kann!) Ich sollte diese wahrscheinlich erst zeigen, wenn ich weiß, dass sie funktionieren ... Prototypen ...
This is my first board that will have components front and back.This is my first board that will have components front and back.This is my first board that will have components front and back.This is my first board that will have components front and back.Dies ist mein erstes Board mit Komponenten auf der Vorder- und Rückseite.
An den rauen Stellen an den Kanten wurden meine Bretter aus einer größeren Platte herausgebrochen; Ich werde sie bald aufräumen, sie sind spitz! Die Bretter sind etwa 3 x 9 Zoll groß. Ich verwende die Through-Hole-Technologie. Alle oberflächenmontierten Bits befinden sich auf vorgefertigten Karten (GPS, BME und ESP32). Ich habe mich für die AfterDark-Boards entschieden, obwohl die Zeit etwas länger war. Mir gefällt der Look! Eine vorläufige Testanpassung ergab, dass die Teile, für die ich Fußabdrücke entworfen habe, funktionieren werden. Yay!
Betreff: Wie spät ist es?Update ... das blaue Licht ganz rechts ist das ESP32. Es ist 16:05 Uhr.
It's really hard to get the light right to take a picture of an LED display.It's really hard to get the light right to take a picture of an LED display.It's really hard to get the light right to take a picture of an LED display.It's really hard to get the light right to take a picture of an LED display.Es ist wirklich schwierig, das richtige Licht für die Aufnahme eines LED-Displays zu finden.
Die 2 1/4 Zoll hohen Ziffern benötigen 8 Volt, nicht die 2 Volt, die im alten Datenblatt empfohlen wurden. Das heißt, ich benötige das zusätzliche Netzteil oben rechts, das aus Junk-Box-Teilen besteht, und die 4 Treiberchips stammen aus derselben Box. Unten rechts befindet sich auch ein 12-Dollar-GPS. Die Uhrzeit kann über das GPS eingestellt werden, wenn es einige Satelliten erkennt, oder über das WLAN, wenn das Passwort nicht geändert wurde.
Ich bin mir noch nicht sicher, wo JMP da reinpasst, aber ich habe einen Druck-/Temperatur-/Feuchtigkeitssensor, den ich hinzufügen möchte. Möglicherweise führt es eine Datenprotokollierung durch und betreibt einen Webserver. Oder vielleicht füge ich eine kleine Anzeige für das Wetter hinzu. Sobald die Details geklärt sind, werde ich eine Leiterplatte herstellen. Diese Drähte funktionieren nicht an der Wand.