성공과 실패: 다음 단계
ESP32-S3와 관련한 두 가지 이야기.
성공 — Cold boot fails
패턴플로우가 다음 단계로 나아가는 걸 가로막던 치명적인 문제 하나가 해결되었다. Cold boot fails 문제였다. ESP32와 LED 매트릭스가 연결된 PCB에 처음 전원을 공급하면 정상적으로 켜지지 않았다. ESP32의 리셋 버튼을 눌러주거나, 전원을 잠깐 끊었다 다시 연결해야만 켜지곤 했다. 패턴플로우의 극 초반부터 함께해 온 문제였고, UX에 있어 매우 치명적이었기에 항상 골머리를 앓게 했다.
전기 관련 하드웨어 작업은 대부분 처음이었기에 무엇이 문제인지조차 알 수 없었다. AI에게 모든 상황을 설명하고 답변에 따라 여러 시도를 해 보았지만 전부 효과가 없었다. 아무래도 내 영역은 아니라 판단해, 전자전기 쪽을 공부하는 도윤이에게 부탁했다. 깃허브 레포지토리에 컨트리뷰터로 등록해 주기 위한 좋은 명분이기도 했다. 동시에 상황을 정리해 r/AskElectronics 서브레딧에 도움 글을 올렸다.
사실 올리지 않았어도 조금만 기다렸다면 도윤이가 해결했을 것 같다. 정확한 해결책이 담긴 깃허브 이슈 코멘트를 내가 대강 읽고 지나쳐 버렸었다. 어찌 되었건 레딧 글에 답글들이 달리기 시작했다. 하나하나 시도해 보았지만 별다른 차이가 없었고, 또 실패인가 싶어 허탈했다. 그러다 아무런 설명 없이 "IO0번에 풀업 저항을 달아라" 라는 답글이 달렸고, 마지막으로 시도해 보았다.
그게 정답이었다. GPIO0은 ESP32의 부팅 모드를 결정하는 스트래핑 핀인데, 그게 플로팅 상태였다. 전원을 처음 공급할 때 LOW로 읽혀, 다운로드 모드로 부팅되고 있었던 거다. 풀업저항으로 HIGH 상태에 묶어 정상 부팅 모드로 고정시켜 주니 해결되었다. 여기서 의문이 하나 남기는 한다. 왜 플로팅 상태였을까? 해결책을 알려준 사람도, 도윤이도, 정품 ESP32라면 문제가 없었을 수도 있다고 한다. 알리에서 구매한 게 문제였던 걸까. 어쨌든 잘 해결되었으니 다행이다. 가장 스트레스였던 문제가 해결되었고, 곧 웹사이트 디테일 수정에 들어갈 생각이다.

추가로, 전원 공급을 안정적으로 하기 위해 넣어 두었던 1000uF 커패시터도 빼기로 결정했다. 전자전기 쪽은 뭣도 모르기에 AI의 말만 믿고 당연히 있어야 하는 줄 알았다. AI를 맹신했던 거다. 하지만 레딧 답글들을 시도하는 과정에서 완전히 제거해 보았고, 아무런 문제도 생기지 않았다. 하드웨어나 로우레벨 영역은 AI가 완전히 대체하기는 어려울 것 같다. 구체적인 내용은 GitHub Issue #16과 거기 링크된 레딧 글에서 확인할 수 있다.
실패 — 원격 송출
실패 역시 ESP32와 관련되어 있다.
패턴플로우의 전체 로드맵에는 원격 송출 기능이 있었다. ESP32-S3의 연산 능력으로는 버거운, 무거운 연산이 필요한 패턴을 원격으로 쏴 주려 했다. ESP32에서 웹서버를 열고, 클라이언트 사이드에서 연산을 수행한 뒤, 결과값만 ESP32로 보내주는 구조였다. 웹에서 UDP로 쏘는 건 불가능하기에 WebSocket으로 시도해 보았다. 렉이 너무 많이 걸렸다. 다른 라이브러리를 활용해 보고, 테스트용으로 일부 데이터만 전송하게도 해 보았다. 어림도 없다. 계속 뚝뚝 끊기고, 도저히 해결될 기미가 보이지 않았다.
일단은 보류하기로 했다. 있으면 좋은 기능이지만 필수는 아니기에, 여유가 생겼을 때 다시 시도하려 한다. 컴퓨터의 아주 기초적인 내용부터 공부하게 될 것 같다. 혹은, ESP32가 아니라 라즈베리 파이로 바꾸면 될 거다. 그러려면 PCB나 코드를 전부 바꿔야 하기에 솔직히 모르겠다. 나중에 필요하면 하겠지 뭐. 이건 이제 피곤하다. 자세한 내용은 GitHub Issue #45에 남겨 두었다.