지금 몇 시지?나는 몇 년 동안 오래된 휴대폰을 시계로 용도를 변경해 왔습니다.
Android 2.2.2 - Froyo. This one still going, its sibling has failed. And more recent phones have failed.안드로이드 2.2.2 - 프로요. 이것은 여전히 진행 중이며 형제는 실패했습니다. 그리고 더 최근의 전화는 실패했습니다.
두 개는 방금 실패했습니다. 그것이 마지막으로 실행되는 것입니다 ... 좋은 하드웨어입니다. 정말 오래된 OS이지만 여전히 네트워크에서 시간을 가져오고 일광 절약 시간으로 전환하거나 다시 전환할 때 여전히 업데이트됩니다.
그래서 그것들을 교체해야 하고 Arduinos와 Raspberries에 대해 생각하기 시작했고 우연히 ESP32에 빠져들었습니다.
Quarter inch squares, this is about 25cm x 50cm1/4 인치 정사각형, 이것은 약 25cm x 50cm입니다.
이것은 에스프레소 아마존에서 17달러에 3개 샀습니다. 지금까지 LED를 깜박이고 내장된 WIFI 하드웨어를 사용하여 플레이했습니다. 예, WIFI 및 블루투스, 많은 I/O 핀, 4M ROM 및 512K 램(확실히 알 수 있을 만큼 충분히 탐색하지 않은 것 같습니다.) 그 과정에서 NTP(Network Time Protocol) 예제를 실행했습니다. NTP가 어떻게 작동하는지 궁금해하기 시작했습니다.
맨 아래에서 NTP는 정말 간단합니다. 시간을 알고자 하는 컴퓨터는 NTP 서버를 호스팅하는 다른 컴퓨터에 짧은 메시지를 보내고 해당 컴퓨터는 GMT 시간이 포함된 짧은 메시지를 다시 보냅니다. 완료.
(훨씬 더 복잡합니다. 분명히 NTP 서버는 질문에 1000번 대답할 수 있습니다. 두번째 ! 그리고 서버 동기화 메커니즘은 통계를 사용합니다. 그리고 David L Mills는 1980년경에 NTP를 발명했습니다. .)
인터넷은 주로 TCP를 사용합니다. (전송 제어 프로토콜) , IP 위에 구축된 강력한 프로토콜입니다. TCP 재시도 등을 통해 데이터가 순서대로 온전하게 전달되었는지 확인합니다. 무거운 프로토콜입니다. NTP 서버는 아무 것도 보장하지 않는 가벼운 프로토콜인 UDP(또한 IP 위에 있음)를 사용합니다. 메시지가 손실되거나 도착하지 않거나 순서 없이 도착할 수 있습니다. 그러나 서버의 로드는 최소화됩니다. 서버는 응답을 받기 위해 추가로 손을 흔들 필요가 없습니다. UDP의 U (User Datagram Protocol)은 사용자가 오류를 처리할 책임이 있음을 의미합니다.
이 JSL은 포트 123(NTP 포트)과 UDP 프로토콜을 사용하여 NTP 서버 풀에 메시지를 보내고 응답을 받는 소켓을 만듭니다. 정말 간단합니다. 통계 서버를 오가는 이동 시간이 같다고 가정하여 서버의 시간이 로컬 컴퓨터와 더 잘 동기화될 수 있다고 가정하는 수학입니다. 결과는 꽤 좋습니다! 다음은 지구 반대편 풀에서 서버를 찾은 평균보다 약간 나은 예입니다.
pool.ntp.org(rn5.quickhost.hk)
총 시간 = 0.143846988677979
FlightTime = 0.143799781799316
차이 = 0:00:00.01689
.hk가 실제로 홍콩에 있다고 가정하면 노스캐롤라이나에서 8,000마일 떨어져 있습니다. 왕복 16,000원. 비행 시간은 무시할 수 있는 홍콩에서의 처리 시간을 뺀 총 시간입니다. 내가 수학을 제대로 했다면 그것은 초당 100,000마일 이상이며, 빛의 속도의 상당 부분입니다.
마지막 숫자 차이는 내 CPU 시계와 NTP 서버 시계의 차이입니다. 1/50초 미만입니다. 그리고 대부분의 서버에서 1/10초 이내에 결과를 얻습니다. 비행 시간이 큰 경우가 아니라면 비대칭이고 보정 기술이 고장납니다.
pool.ntp.org(LAX.CALTICK.NET)
총 시간 = 0.101963043212891
FlightTime = 0.101903915405273
차이 = 0:00:00.08646
pool.ntp.org(ns2.nuso.cloud)
총 시간 = 0.103617668151855
FlightTime = 0.103596687316895
차이 = 0:00:00.04034
pool.ntp.org(50-205-57-38-static.hfc.comcastbusiness.net)
총 시간 = 0.0763883590698242
FlightTime = 0.0763206481933594
차이 = 0:00:00.00965
pool.ntp.org(13.86.101.172)
총 시간 = 0.077089786529541
FlightTime = 0.07708740234375
차이 = 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>

UDP 소켓을 사용하여 NTP 서버에서 시간을 얻습니다.
Re: 몇 시입니까?PCB 개정판 2를 주문하기 전에 첫 번째 주문에서 다른 두 개의 보드를 만들고 있습니다. 첫 번째와 비슷하지만 병렬로 비트를 구성하고 테스트합니다. 그리고 예상하지 못한 사실을 알게 되었습니다.
빌드 단계는 다음과 같습니다.
- 모든 로우 프로파일, 소형, 저렴한 구성 요소를 보드에 배치합니다. 그들은 나중에하기가 어렵습니다.
- LED 드라이버, 3개의 16핀 IC를 추가합니다.
- 전원 공급 장치 구성 요소를 추가하고 전원 표시등 LED가 켜지는지 확인합니다.
- CPU를 추가하고 다운로드한 프로그램을 수락하는지 확인하십시오.
- 다른쪽에 숫자를 추가하십시오. 숫자는 내용을 숨기므로 마지막이어야 합니다.
Some of these prototypes are not working correctly.이러한 프로토타입 중 일부는 제대로 작동하지 않습니다. 숫자(4개)는 약간 비싸고 다소 섬세합니다. 나는 다소 무작위로 하나(1시간 위치)를 배치하고 빠른 테스트를 수행했습니다. 일부 세그먼트만 작동했습니다. 작업대로 돌아가 육안 확인, 미터 확인, 마지막으로 스코프를 꺼냅니다. 이 시점에서 잘못될 수 있는 일이 대여섯 가지 있습니다. CPU에서 드라이버 IC, 숫자에 이르기까지 모든 것. 기본 디자인이 아닙니다. 작동하는 프로토타입이 두 개 있습니다(브레드보드에 하나, 첫 번째 PCB에 하나).
시계는 다중화 설계입니다. 각 드라이버 칩에는 4개의 출력이 있습니다. 드라이버 중 하나는 숫자를 선택하고 다른 두 드라이버는 7개의 세그먼트와 소수점을 선택합니다. 12비트로 주소 지정되는 32개 요소의 4X8 매트릭스. 한 번에 최대 8개의 요소를 켤 수 있습니다(한 자릿수). 운 좋게도 대부분의 세그먼트가 켜져 있어야 하는 숫자를 보고 있고 하나의 드라이버 칩에 속하는 모든 누락된 세그먼트를 보고 있습니다. 해당 칩의 범위를 사용하여 입력이 세그먼트를 켜도록 요청하고 있지만 출력은...죽은 것을 볼 수 있습니다.
IC 교체는 고통입니다. 나는 튜브에서 새 것을 꺼내서 설치했고...안타깝게! 더 좋지만 한 세그먼트가 여전히 표시되지 않습니다! 제가 잘못 진단했나요? 무너지는 다른 것이 있습니까?
기다리다. 두 장의 카드를 병렬로 만들고 있습니다. 다른 것을 봅시다. 아무것도 아님. 세그먼트가 없습니다. 약간의 공부 후...흠. 이번에는 문제가 세그먼트의 드라이버가 아니라 매트릭스의 다른 축(숫자를 선택하는 축)의 드라이버입니다. 불량 IC 튜브 전체가 있습니까?
이것은 약 10년 전에 다른 프로젝트를 위해 구입한 미사용 IC 튜브였습니다. 테스터를 만들어야 합니다. 다음은 제가 최근에 다른 유통업체로부터 받은 칩에 대해 4개의 녹색 표시등을 보여주는 테스터입니다.
All 10 in the newer tube checked out good.최신 튜브의 10개 모두 양호한 것으로 확인되었습니다.
나는 현재 다른 튜브에 있는 칩의 적어도 5/10이 하나 이상의 출력에서 불량이라고 생각합니다.
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!(재사용 방지를 위해) 핀을 으깨고 죽은 벌레처럼 보이도록 핀을 등 뒤로 굴립니다. 4개의 출력이 모두 필요할 때 3/4 OK도 충분하지 않습니다!
내가 배운 것은 설치하기 전에 칩을 테스트하는 것에 관한 것일 수 있지만 그것이 실제로 필요하다고 생각하지 않습니다. 그러나 내가 할 일은 스코프를 사용하여 테스트를 수행하는 것입니다. 아마도 어셈블리에서 항목 2와 3을 뒤집을 것이므로 숫자를 첨부하기 전에 조금 더 잘 테스트할 수 있습니다. 그런 다음 첫 번째 숫자를 배치하려면 드라이버 칩이 아닌 전원 공급 장치를 차단하는 것을 선택하십시오. 바로 지금 드라이버 IC를 제거할 수 있도록 숫자를 제거해야 합니다.
Re: 몇 시입니까?프로토타입 제작 및 작동.
It's hard for me to call this the back; it was the front in KiCad.이것을 백이라고 부르기가 어렵습니다. KiCad의 전면이었습니다.
The flash makes the white balance show the red digits as red.플래시는 화이트 밸런스에서 빨간색 숫자를 빨간색으로 표시합니다.
With no flash, the white balance messes up the colors, but this is closer to what it really looks like otherwise.플래시를 사용하지 않으면 화이트 밸런스가 색상을 엉망으로 만들지만 실제 모습에 더 가깝습니다.
선형 레귤레이터는 매우 뜨겁습니다. 5V 레귤레이터는 약 1/4암페어를 전달하지만 이는 16V 입력이 11볼트 * 1/4암페어 = 거의 3와트를 작은 방열판으로 떨어뜨린다는 것을 의미합니다. 드롭인 교체 스위치 모드 조정기를 살펴볼 시간입니다. 분명히 같은 패키지 크기이지만 90% 효율입니다.
Re: 몇 시입니까?회로 기판이 들어 있습니다! 설계 키캐드 , 제조 OSH파크 , 11일 제조 및 8일 무료 배송을 포함하여 20일(할 수 있는 한 절약!) 아마도 작동한다는 것을 알기 전까지는 보여주지 말아야 할 것입니다...프로토타입...
This is my first board that will have components front and back.이것은 앞면과 뒷면에 구성 요소가 있는 첫 번째 보드입니다.
가장자리 주변의 거친 지점은 내 보드가 더 큰 패널에서 분리된 곳입니다. 곧 청소하겠습니다. 뾰족합니다! 보드는 약 3x9인치입니다. 저는 스루홀 기술을 사용하고 있습니다. 모든 표면 실장 비트는 사전 제작된 카드(GPS, BME 및 ESP32)에 있습니다. 시간이 조금 더 길었지만 AfterDark 보드를 사용했습니다. 외모가 마음에 든다! 예비 테스트 핏에서는 제가 설계한 풋프린트가 제대로 작동할 것이라고 말합니다. 예이!
Re: 몇 시입니까?업데이트... 맨 오른쪽의 파란색 표시등은 esp32입니다. 오후 4시 5분입니다.
It's really hard to get the light right to take a picture of an LED display.LED 디스플레이의 사진을 찍기 위해 빛을 제대로 얻는 것은 정말 어렵습니다.
2 1/4인치 높이 숫자에는 이전 데이터 시트에서 제안한 2볼트가 아니라 8볼트가 필요합니다. 즉, 정크 박스 부품으로 만든 오른쪽 상단의 추가 전원 공급 장치가 필요하고 4개의 드라이버 칩이 같은 상자에서 나왔습니다. 오른쪽 하단에도 12달러짜리 GPS가 있습니다. 일부 위성을 볼 수 있는 경우 GPS에서, 비밀번호가 변경되지 않은 경우 Wi-Fi에서 시간을 설정할 수 있습니다.
JMP가 여기에 적합한지는 아직 확실하지 않지만 추가하고 싶은 압력/온도/습도 센서가 있습니다. 데이터 로깅을 수행하고 웹 서버를 실행할 수도 있습니다. 아니면 날씨에 대한 작은 디스플레이를 추가할 수도 있습니다. 세부 사항이 해결되면 PCB를 만들 것입니다. 그 전선은 벽에서 작동하지 않습니다.