ESP-NOW 최적화 코드

ESP32-C3에서 ESP-NOW Long-Range(LR) 모드를 설정하려면 Wi-Fi 물리 계층(PHY) 설정을 직접 제어해야 합니다. 이 모드는 데이터 전송 속도를 낮추는 대신, 수신 감도를 대폭 높여 장애물 통과 능력과 통신 거리를 약 2~3배가량 늘려줍니다.

MicroPython 환경에서 사용할 수 있는 최적화된 설정 예제를 정리해 드립니다.


💡 ESP-NOW Long-Range 설정 핵심 코드 (MicroPython)

이 코드는 송신기와 수신기 양쪽 보드 모두에 동일하게 적용되어야 통신이 가능합니다.

Python

import network
import espnow
import struct

# 1. Wi-Fi 인터페이스 설정
sta = network.WLAN(network.STA_IF)
sta.active(True)
sta.disconnect() # 다른 공유기 연결 시도 방지

# 2. Long-Range 모드 활성화 (가장 중요한 부분)
# 0x08은 'LR' 모드를 의미하는 내부 상수입니다.
try:
    # 802.11b/g/n 대신 LR(Long Range) 프로토콜 강제 지정
    sta.config(protocol=network.MODE_LR) 
    print("Long-Range 모드가 활성화되었습니다.")
except Exception as e:
    print("설정 오류:", e)

# 3. ESP-NOW 초기화
e = espnow.ESPNow()
e.active(True)

# 4. 상대방 보드의 MAC 주소 등록 (예시 주소)
peer = b'\x44\x17\x93\x12\x34\x56' # 실제 상대방 MAC 주소로 수정 필요
e.add_peer(peer)

# 5. 데이터 송신 테스트
def send_control(x, y):
    data = struct.pack('ii', x, y) # 정수 2개 패킹
    e.send(peer, data)

print("준비 완료. 통신을 시작합니다.")

🛠️ 왜 이 코드가 더 멀리 가나요?

  1. network.MODE_LR: 이 명령은 Wi-Fi 칩셋이 낮은 비트레이트를 사용하여 신호를 더 길게 쏘도록 만듭니다. 일반 Wi-Fi 신호가 닿지 않는 “데드존”에서도 통신이 유지됩니다.
  2. sta.disconnect(): 로봇카가 이동 중에 주변 와이파이 공유기(AP)를 찾으려고 시도하면 통신이 튀거나 지연이 발생할 수 있는데, 이를 사전에 차단합니다.
  3. 고정 채널 (추가 팁): 주변 환경에 따라 sta.config(channel=6) 처럼 채널을 명시적으로 지정하면 간섭을 더 효과적으로 피할 수 있습니다.

⚠️ 주의사항 (꼭 읽어보세요!)

  • 양방향 필수: 송신기는 LR 모드인데 수신기가 일반 모드라면 데이터를 받지 못합니다. 반드시 조종기로봇카 둘 다 설정하세요.
  • 속도 저하: 전송 거리가 늘어나는 대신 대역폭이 줄어듭니다. 하지만 조종기 데이터(몇 바이트 수준)를 보내는 데는 전혀 지장이 없습니다.
  • 전력 소모: 신호를 더 강하고 길게 유지하므로 배터리 소모가 일반 모드보다 약간 더 빠를 수 있습니다.

코멘트

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다