웹사이트 검색

이 10달러짜리 조립 덕분에 '내 문제야 아니면 인터넷 문제야?'라고 물어볼 필요가 전혀 없어졌어요


인터넷 연결이 나쁘면 온라인에서 하는 어떤 일이든 가장 빨리 방해받습니다. 게임이든 사무 작업이든, 인터넷이 몇 분마다 끊긴다면 아무것도 제대로 할 수 없습니다. 버퍼링보다 더 문제는 불확실성입니다. 화상 통화가 끊기면, 라우터인지, ISP인지, 아니면 교체하려고 했던 이더넷 케이블 때문인지 고민하게 됩니다.

ISP를 탓하기 전에 수정해야 할 몇 가지 라우터 기본 설정이 있지만, 이는 최신 장애가 ISP 탓인지 스스로 유발한 것인지 추측해야 하는 것은 막아주지 않습니다. 저는 예전에는 이렇게 해결하곤 했습니다: 라우터까지 걸어가서 확인하는 방식으로 — 그래서 책상에서 모든 것을 보여주는 10달러짜리 장치를 만들어 문제를 해결하기로 했습니다.

테이크아웃보다 저렴한 네트워크 모니터

놀라울 정도로 유용한 기기의 간단한 하드웨어






와이파이 기능이 있는 마이크로컨트롤러와, 오디오 신호가 필요하다면 LED나 버저만 있으면 충분합니다. 일반적인 ESP32는 이 용도에 충분히 능력이 있기 때문에 잘못된 ESP32 보드를 선택할 위험은 없습니다. 더 저렴한 대안을 원한다면 ESP32 C3 슈퍼미니에서도 가능하고요. 저는 결국 고전적인 ESP32의 성능이 강화된 형제 모델인 ESP32-S3를 선택했습니다. 이 모델은 내장 RGB LED가 있어서, 인터넷이 끊겼을 때 한밤중에 버저가 울리는 불상사를 피하고 싶었기 때문입니다.

RGB LED는 내가 같은 (그리고 꽤 밝은) LED를 사용해서 다른 상태를 표시할 수 있기 때문에 도움이 됩니다. 파란색 깜빡이는 빛은 보드가 내 Wi-Fi에 연결 중임을 의미하고, 녹색 불이 켜져 있으면 인터넷이 작동 중임을 의미하며, 빨간불이 켜져 있으면 오프라인 상태이고, 빨간색이 깜빡이면 Wi-Fi 네트워크 자체를 사용할 수 없음을 의미합니다. 또한 SSID, 로컬 IP 주소, Wi-Fi 신호 강도와 상황에 따라 실시간 가동 시간 또는 중단 시간 카운터와 같은 정보를 표시하기 위해 1.3인치 SH1106 OLED 디스플레이도 추가했습니다.

내 ESP32-S3 보드의 RGB LED 덕분에 연결해야 할 것은 단 네 개뿐입니다. SH1106은 GPIO 18의 SDA와 GPIO 18의 SCL을 통해 I2C로 연결되며, 전원은 ESP32의 3.3v 핀에, 접지는 보드의 접지에 연결됩니다.

인터넷 모니터링은 들리는 것보다 쉽다

몇 번의 핑만으로도 무엇인가 고장 났는지 알 수 있다






빌드의 소프트웨어 측면은 놀라울 정도로 간단합니다. 당신이 하는 것은 오프라인이 될 가능성이 낮은 것으로 아는 IP 주소에 핑을 보내는 것뿐입니다. 예를 들어 구글의 8.8.8.8이나 클라우드플레어의 1.1.1.1 같은 주소입니다. 보드는 해당 IP 주소에 핑을 보내고, 응답을 기다리며, 인터넷 연결이 존재하는지 확인합니다. 연속된 세 번의 핑이 실패하는 순간, 장애가 발생했다고 선언하고, 보드의 RGB LED를 빨간색으로 켜며, 디스플레이를 업데이트합니다.

연결 확인 기간과 핑 명령 실패 임계값은 다양한 네트워크에 맞게 수정할 수 있습니다. 예를 들어, 인터넷 연결이 대부분 안정적이고 가끔만 실패하는 경우, 단절을 더 빨리 감지하기 위해 연결 확인을 줄일 수 있습니다. 반대로 연결이 불안정한 경우에는 잘못된 긍정을 방지하기 위해 핑 명령 실패 임계값을 높이는 것이 좋습니다.

보드가 TNP를 통해 연결되고 시간을 동기화하면, OLED는 장식용이 아니라 유용하게 사용됩니다. 온라인 화면에는 실시간 가동 시간 카운터, 현재 로컬 IP 주소, 현재 신호 강도(RSSI) dBm, 그리고 시간이 표시됩니다. 정전이 발생하면 화면이 경고 화면으로 전환되어 정전이 감지된 정확한 시간과 경과 시간을 보여줍니다. 또한 경고 배너가 0.5초마다 깜박이며, LED 색상과 결합하면 장치가 직접 시야에 있지 않아도 정전을 놓치기 매우 어렵습니다.

빌드는 빠르게 완성된다

부품에서 오후 동안 작동하는 모니터까지

연결이 완료되면, 보드를 컴퓨터에 연결하고, Arduino IDE를 실행한 후, 일반 ESP32 보드에 스케치를 업로드하듯이 스케치를 업로드하면 됩니다. 진행하기 전에 프로그램에서 올바른 ESP32 보드와 포트를 선택했는지 확인하세요.

저는 또한 Arduino 라이브러리 관리자를 통해 두 개의 라이브러리인 Adafruit SH110X와 marian-craciunescu의 ESP32Ping을 사용했습니다. 장치가 제 네트워크를 벗어나지 않기 때문에 스케치 자체에 2.4GHz Wi-Fi 네트워크의 자격 증명을 하드코딩했습니다. ESP32-S3는 5GHz 네트워크에 연결할 수 없지만, 인터넷 연결 목적으로 라우터와의 연결 매체는 중요하지 않습니다.

첫 부팅 시, OLED는 네트워크 이름과 함께 연결 화면을 표시하고, RGB LED는 파란색으로 깜빡입니다. 보드가 IP를 받고 시계를 동기화하면 모니터링 모드로 전환됩니다. 일반적인 가정용 네트워크에서는 전체 부팅 시퀀스가 몇 초 밖에 걸리지 않습니다.

당신의 라우터는 모든 이야기를 말해주지 않습니다

Wi-Fi, 인터넷, ISP 문제의 차이

라우터 상태 표시등은 라우터에 전원이 켜져 있는지와 WAN 연결이 있다고 생각하는지 여부만 보여줍니다. 이것은 실제 인터넷 접속과는 다릅니다. 라우터가 모든 것이 정상이라고 표시할 수 있지만, ISP의 DNS 서버가 문제가 생기거나, PPPoE 세션이 끊어지고 다시 연결되지 않았을 수 있으며, 인터넷 연결을 방해할 수 있는 다른 많은 문제들이 있을 수 있습니다.

모니터는 모든 것을 우회하고 클라이언트의 관점에서 네트워크를 테스트합니다. 이는 휴대폰이나 컴퓨터와 같은 대우를 받는다는 것을 의미합니다. 인터넷이 끊겼다고 말할 때, 실제로 끊긴 것이며, 어떤 장치도 온라인에 접속할 수 없습니다.

장치가 계속 핑을 보내므로 인터넷이 끊겼다가 다시 연결된 시점을 기록하도록 설정할 수도 있습니다. 이렇게 중단 시간을 기록하면 패턴을 파악하는 데 도움이 되고 ISP에 더 명확한 보고를 제공할 수 있습니다.

관련기사