lora — LoRa 모뎀 드라이버¶
lora 모듈은 Arduino Portenta Vision Shield에 탑재된 Murata CMWX1ZZABZ LoRa 모뎀용 드라이버를 제공합니다. 이 모듈은 모뎀 펌웨어(Arduino MKRWAN ARD-078 펌웨어 포함)에서 사용하는 AT 명령 집합을 래핑한 고수준 Lora 클래스를 노출하므로, 애플리케이션이 LoRaWAN 네트워크에 조인하고 패킷을 송수신할 수 있습니다.
예시:
import lora
modem = lora.Lora(band=lora.BAND_EU868, debug=True)
print("Device EUI:", modem.get_device_eui())
if modem.join_OTAA("0000000000000000", "00000000000000000000000000000000"):
modem.send_data(b"hello", confirmed=True)
상수¶
활성화 모드¶
RF 출력 모드¶
대역¶
장치 클래스¶
예외¶
- exception lora.LoraError¶
모뎀이나 드라이버에서 반환된 모든 오류에 대해 발생하는 기본 예외.
- exception lora.LoraErrorTimeout¶
구성된 타임아웃 내에 모뎀이 응답하지 않을 때(수신 버퍼가 비어 있을 때) 발생합니다.
- exception lora.LoraErrorParam¶
유효하지 않은 매개변수로 AT 명령이 실행되어
+ERR_PARAM응답이 반환될 때 발생합니다.
- exception lora.LoraErrorBusy¶
모뎀이 이전 명령을 처리하느라 바빠서
+ERR_BUSY응답이 반환될 때 발생합니다.
- exception lora.LoraErrorOverflow¶
매개변수가 허용 최대 길이를 초과하여
+ERR_PARAM_OVERFLOW응답이 반환될 때 발생합니다.
- exception lora.LoraErrorNoNetwork¶
모뎀이 네트워크에 조인하지 않은 상태에서
+ERR_NO_NETWORK응답이 반환될 때 발생합니다.
- exception lora.LoraErrorRX¶
다운링크를 수신하는 중 오류가 발생하여
+ERR_RX응답이 반환될 때 발생합니다.
- exception lora.LoraErrorUnknown¶
+ERR_UNKNOWN응답이 반환되거나 모뎀이 문서화되지 않은 오류를 보고할 때 발생합니다.
클래스¶
- class lora.Lora(uart: machine.UART | None = None, rst_pin: machine.Pin | None = None, boot_pin: machine.Pin | None = None, band: int = BAND_EU868, poll_ms: int = 300000, debug: bool = False)¶
새 모뎀 드라이버를 생성합니다. 생성자는 UART와 리셋/부트 핀을 초기화(또는 자동 생성)하고, 모듈을 하드웨어 리셋하며, 오토보드 동기화를 수행하고, 모듈을 재부팅하며, 펌웨어 버전을 조회한 다음 요청된 지역
band를 구성합니다.- 매개변수:
uart – 모뎀과 통신하는 데 사용되는 사전 구성된
machine.UART인스턴스입니다.None이면 드라이버가 8N2 프레이밍으로UART(8, 19200)을 엽니다(Portenta Vision Shield 기본값).rst_pin – 모뎀의 리셋 라인을 구동하는
machine.Pin입니다.None이면"PC6"이 푸시풀 출력으로 구성됩니다.boot_pin – 모뎀의 부트 선택 라인을 구동하는
machine.Pin입니다.None이면"PG7"이 로우로 풀다운된 푸시풀 출력으로 구성됩니다.band – 구성할 지역 대역입니다.
BAND_*상수 중 하나입니다.poll_ms – 다운링크 윈도우를 열어두기 위해
poll()이 트리거하는 자동 빈 업링크 사이의 간격(밀리초)입니다.debug –
True이면 모든 UART 트래픽이print()를 통해 출력됩니다.
- LoraErrors: dict¶
모뎀 오류 응답 문자열(예:
"+ERR_BUSY")을 해당 예외 클래스로 매핑합니다.handle_error()에서 내부적으로 사용됩니다.
- init_modem() None¶
self.uart,self.rst_pin,self.boot_pin이 아직 설정되지 않은 경우 이들을 Portenta Vision Shield 기본값으로 지연 초기화합니다. 생성자에서 호출되며, 일반적으로 사용자 코드에서 직접 호출하지 않습니다.
- is_arduino_firmware() bool¶
모뎀이 Arduino MKRWAN
ARD-078펌웨어를 실행 중이면(캐시된fw_version문자열로 감지)True를 반환합니다.
- configure_band(band: int) bool¶
지역 대역을 구성하고,
BAND_EU868을 사용하는 Arduino 펌웨어에서는 ETSI 듀티 사이클 제한기를 활성화합니다. 성공하면True를 반환합니다.- 매개변수:
band –
BAND_*상수 중 하나입니다.
- set_autobaud(timeout: int = 10000) bool¶
모뎀이
+OK로 응답하거나timeout밀리초가 경과할 때까지 빈AT명령을 전송합니다. 동기화에 성공하면True를 반환합니다.- 매개변수:
timeout – 시도에 소비할 최대 시간(밀리초)입니다.
- restart() None¶
보드 레이트를 재동기화하고, 모뎀을 재부팅하며, 펌웨어 버전을 다시 읽고, 구성된 지역 대역을 다시 적용합니다. 실패하면
LoraError를 발생시킵니다.
- set_rf_power(mode: int, power: int) None¶
모뎀 RF 출력 단을 구성합니다(
AT+RFPOWER).- 매개변수:
mode –
RF_MODE_RFO,RF_MODE_PABOOST중 하나입니다.power – 펌웨어별 단위의 출력 전력 인덱스입니다.
- set_port(port: int) None¶
이후의
send_data()호출에 사용되는 LoRaWAN 애플리케이션 포트(1..223)를 구성합니다.- 매개변수:
port – LoRaWAN FPort입니다.
- set_public_network(enable: bool) None¶
공용 네트워크 동기화 워드를 활성화하거나 비활성화합니다.
- 매개변수:
enable – 공용 LoRaWAN 동기화 워드의 경우
True, 개인용의 경우False입니다.
- format(hexMode: bool) None¶
페이로드 바이트에 대해 UART를 통해 사용되는 데이터 형식을 선택합니다.
- 매개변수:
hexMode – ASCII-16진수 페이로드 형식의 경우
True, 원시 바이너리의 경우False입니다.
- set_adr(adr: bool) None¶
적응형 데이터 레이트(Adaptive Data Rate)를 활성화하거나 비활성화합니다.
- 매개변수:
adr – ADR을 활성화하려면
True, 비활성화하려면False입니다.
- join(timeout_ms: int) bool¶
AT+JOIN을 실행하고 조인 수락 이벤트를 기다립니다. 모뎀이timeout_ms내에+EVENT=1,1(조인 성공)을 보고하면True를 반환합니다.- 매개변수:
timeout_ms –
+ACK와 후속 조인 이벤트를 모두 기다리는 최대 시간(밀리초)입니다.
- poll() None¶
마지막 호출 이후
poll_ms밀리초 이상 경과한 경우, 대기 중인 다운링크를 플러시하기 위해 빈 확인 업링크를 전송합니다. 애플리케이션의 메인 루프에서 자주 호출하도록 설계되었습니다.
- send_data(buff: bytes, confirmed: bool = True) bool¶
LoRaWAN 업링크를 전송합니다.
buff가get_max_size()보다 크면LoraError를 발생시킵니다.- 매개변수:
buff – 전송할 페이로드 바이트입니다.
confirmed –
True이면 확인 업링크(+CTX)를 전송하고 네트워크 서버의+ACK를 기다립니다.False이면 비확인 업링크(+UTX)를 전송합니다.
- 반환:
모뎀이 패킷을 수락하면(그리고 확인 업링크의 경우 네트워크가 확인 응답하면)
True, 그렇지 않으면False입니다.
- receive_data(timeout: int = 1000) dict | None¶
다운링크를 기다립니다.
timeout밀리초 내에+RECV이벤트가 수신되지 않으면None을 반환하고, 그렇지 않으면 FPort와 페이로드 바이트를 포함하는 딕셔너리{"port": str, "data": str}를 반환합니다.- 매개변수:
timeout – 기다리는 최대 시간(밀리초)입니다.
- receive(delimiter: str | list | None = None, max_bytes: int | None = None, timeout: int = 1000) str¶
저수준 UART 읽기입니다. 구분 기호가 일치하거나,
max_bytes개의 문자를 읽었거나,timeout밀리초가 경과할 때까지 모뎀에서 문자를 읽은 다음, 후행\r이 제거된 누적 문자열을 반환합니다.- 매개변수:
delimiter – 버퍼 끝에서 일치시킬 단일 문자, 트리밍된 전체 버퍼와 비교할 다중 문자 문자열, 또는 그러한 문자열의 리스트 중 하나입니다.
max_bytes – 설정된 경우, 정확히 이 바이트 수를 읽는 즉시 반환합니다.
timeout – 전체 읽기 타임아웃(밀리초)입니다.
- join_OTAA(appEui: str, appKey: str, devEui: str = None, timeout: int = 60000) bool¶
모뎀을 OTAA 모드로 전환하고, 제공된 키와 EUI를 프로그래밍한 다음, 네트워크 조인을 시도합니다. 조인에 성공하면
True를 반환합니다.- 매개변수:
appEui – 64비트 Application/Join EUI(16진수 문자열)입니다.
appKey – 128비트 Application Key(16진수 문자열)입니다.
devEui – 선택적 64비트 Device EUI(16진수 문자열)입니다.
None이면 공장에서 프로그래밍된 Device EUI가 사용됩니다.timeout – 조인 타임아웃(밀리초)입니다.
- join_ABP(nwkId: int, devAddr: str, nwkSKey: str, appSKey: str, timeout: int = 60000) bool¶
모뎀을 ABP 모드로 전환하고, 제공된 주소와 키를 프로그래밍한 다음, 조인을 시도합니다.
get_join_status()의 결과를 반환합니다.- 매개변수:
nwkId – 네트워크 식별자입니다(현재 펌웨어에서 무시됨).
devAddr – 32비트 Device Address(16진수 문자열)입니다.
nwkSKey – 128비트 Network Session Key(16진수 문자열)입니다.
appSKey – 128비트 Application Session Key(16진수 문자열)입니다.
timeout – 조인 타임아웃(밀리초)입니다.
- handle_error(command: str, data: str) None¶
모뎀 응답을 검사하고, 오류를 나타내는 경우 일치하는
LoraError하위 클래스를 발생시킵니다. 오류가 아닌 응답에 대해서는 아무 작업도 하지 않습니다.- 매개변수:
command –
data를 생성한 AT 명령(AT접두사 제외)입니다.data – 모뎀이 반환한 응답 문자열입니다.
- send_command(cmd: str, *args, delimiter: str = '\\r', data: bytes = None, timeout: int = 1000, raise_error: bool = True) str¶
cmd와args로 AT 명령을 만들고, 선택적으로 원시data페이로드를 추가하여 전송한 다음, 모뎀의 응답을 반환합니다.?로 끝나는 쿼리 명령의 경우, 값 부분(=뒤의 부분 문자열)만 반환됩니다.- 매개변수:
cmd – AT 명령 접미사(예:
"+JOIN","+DR=")입니다."AT"접두사와 후행\r은 자동으로 추가됩니다.args – 문자열 변환 후
cmd에 연결되는 추가 인수입니다.delimiter –
receive()로 전달되는 구분 기호입니다.data – AT 명령 직후에 기록되는 선택적 원시 바이트입니다(바이너리 업링크 페이로드에 사용됨).
timeout – 응답 타임아웃(밀리초)입니다.
raise_error –
True이면 오류 응답이LoraError예외로 변환되고,False이면 원시 응답이 호출자에게 반환됩니다.