

여기에서 PCB를 주문할 수 있습니다
가이드의 6 부분에 대한 지침 및 어셈블리 비디오
여기에서 PCB를 주문할 수 있습니다
가이드의 6 부분에 대한 지침 및 어셈블리 비디오
LORA 또는 장거리 무선 데이터 원격 측정법은 NRF24L01 (433MHz, 868 MHz 또는 NRF24L01의 경우 2.4GHz에 대해 916MHz)보다 낮은 주파수에서 작동하는 SEMTECH가 개척 한 기술입니다.
LORA SMART HOME (LLCC68)은 중간 범위 실내 및 실내에서 실외 무선 응용 프로그램을위한 Sub-GHZ LORA® RF 트랜시버입니다. SPI 인터페이스. 핀 투 핀은 SX1262와 호환됩니다. SX1261, SX1262, SX1268 및 LLCC68은 4.2 MA의 활성 수신 전류 소비로 긴 배터리 수명을 위해 설계되었습니다. SX1261은 최대 +15 DBM을 전송할 수 있으며 SX1262, SX1268 및 LLCC68은 매우 효율적인 통합 전력 증폭기와 함께 최대 +22 dBM을 전송할 수 있습니다.
이 장치는 LPWAN 사용 사례에 대한 LORA 변조 및 레거시 사용 사례에 대한 FSK 변조를 지원합니다. 이 장치는 소비자 사용에 대한 다양한 응용 프로그램 요구 사항을 충족하도록 구성 가능합니다. 이 장치는 LORA Alliance®에서 발표 한 Lorawan® 사양에서 사용하는 SEMTECH 트랜시버와 호환되는 LORA 변조를 제공합니다. 이 라디오는 ETSI EN 300 220, FCC CFR 47 Part 15, China Regulatory Riarks 및 Japanese ARIB T-108을 포함하되 이에 국한되지 않는 라디오 규정 준수를 목표로하는 시스템에 적합합니다. 150MHz에서 960MHz까지의 지속적인 주파수 커버리지를 통해 전 세계의 모든 주요 서브 GHZ ISM 대역을 지원할 수 있습니다.
| LLCC68 | SX1278-SX1276 | |
|---|---|---|
| 거리 | > 11km | 8km |
| 요금 (로라) | 1.76kbps - 62.5kbps | 0.3kbps - 19.2kbps |
| 수면 전력 소비 | 2µA | 5µA |
여기에서 내 도서관을 찾을 수 있으며 Arduino IDE Library Manager에서 사용할 수 있습니다.
다운로드하려면.
오른쪽 상단의 다운로드 버튼을 클릭하여 압축되지 않은 폴더 LORA_E220의 이름을 바꿉니다.
lora_e220 폴더에 lora_e220.cpp 및 lora_e220.h가 포함되어 있는지 확인하십시오.
LORA_E220 라이브러리 폴더를 / 라이브러리 / 폴더에 배치하십시오.
첫 번째 라이브러리 인 경우 라이브러리 서브 폴더를 만들어야 할 수도 있습니다.
IDE를 다시 시작하십시오.
| 핀 번호 | 핀 항목 | 핀 방향 | 핀 응용 프로그램 |
|---|---|---|---|
| 1 | M0 | 입력 (약한 풀업) | M1과 협력하고 4 가지 운영 모드를 결정하십시오. 플로팅은 허용되지 않습니다. 땅에있을 수 있습니다. |
| 2 | M1 | 입력 (약한 풀업) | M0과 협력하고 4 가지 운영 모드를 결정하십시오. 플로팅은 허용되지 않습니다. 땅에있을 수 있습니다. |
| 3 | RXD | 입력 | TTL UART 입력 외부 (MCU, PC) TXD 출력 핀에 연결합니다. 오픈 드레인 또는 풀업 입력으로 구성 할 수 있습니다. |
| 4 | TXD | 산출 | TTL UART 출력 외부 RXD (MCU, PC) 입력 핀에 연결합니다. 오픈 드레인 또는 푸시 풀 출력으로 구성 할 수 있습니다 |
5 | 보조 | 산출 | 모듈의 작동 상태를 나타내고 외부 MCU를 깨우십시오. 자체 점검 초기화 절차 중에 핀은 낮은 레벨을 출력합니다. Open-Drain 또는 Push-Pull 출력으로 구성 할 수 있습니다 (플로팅이 허용됨). |
| 6 | VCC | 전원 공급 장치 3V ~ 5.5V DC | |
| 7 | Gnd | 지면 |
보시다시피 M0 및 M1 핀을 통해 다양한 모드를 설정할 수 있습니다.
| 방법 | M1 | M0 | 설명 |
|---|---|---|---|
| 정상 | 0 | 0 | UART 및 무선 채널이 열려 있으며 투명 전송이 켜져 있습니다. |
| 송신기 | 0 | 1 | 송신기 |
| 수신기 | 1 | 0 | WOR 리시버 (Apper Up Over Air의지지) |
| 깊은 수면 모드 | 1 | 1 | 모듈은 잠자리에 들어갑니다 (매개 변수를 구성 할 때 자동으로 깨어납니다) |
일부 핀은 정적으로 사용할 수 있지만 마이크로 컨트롤러에 연결하여 라이브러리에서 구성하면 성능을 얻고 소프트웨어를 통해 모든 모드를 제어 할 수 있습니다. 그럼에도 불구하고 우리는 다음에 더 잘 설명 할 것입니다.
내가 이미 말했듯이, 모든 핀을 마이크로 컨트롤러의 출력에 연결하는 것은 필수적이지 않습니다. 원하는 구성을 얻으려면 M0 및 M1 핀을 높거나 낮게 넣을 수 있습니다. AUX를 연결하지 않으면 라이브러리는 작업이 완료되도록 합리적인 지연을 설정합니다 ( 장치가 얼어 붙는 데 어려움이있는 경우 풀업 4.7K 저항 또는 장치에 더 잘 연결해야합니다. ).
데이터를 전송하는 경우 데이터를 사용하여 외부 MCU를 깨우고 데이터 전송 마감에서 높은 리턴을 할 수 있습니다.
수신 할 때, 버퍼가 비어 있으면 보조가 낮아지고 높게 반환됩니다.
또한 정기적 인 작동 (파워 온 및 수면/프로그램 모드)을 복원하기 위해 자체 체크에 사용됩니다.
ESP8266 연결 스키마는 동일한 전압의 논리 통신 (3.3V)에서 작동하기 때문에 더 간단합니다.
우수한 안정성을 얻기 위해 풀업 저항 (4,7kohm)을 추가하는 것이 필수적입니다.
| E22 | ESP8266 |
|---|---|
| M0 | D7 |
| M1 | D6 |
| TX | 핀 D2 (풀업 4,7kΩ) |
| RX | 핀 D3 (풀업 4,7kΩ) |
| 보조 | 핀 D5 (풀업 4,7kΩ) |
| VCC | 5V (그러나 3.3V에서 더 적은 전력으로 작동) |
| Gnd | Gnd |
ESP32에 대한 유사한 연결 스키마이지만 RX 및 TX의 경우 기본적으로 ESP32에는 소프트웨어가 없지만 3 개의 직렬이 있기 때문에 RX2 및 TX2를 사용합니다.
| E22 | ESP32 |
|---|---|
| M0 | D21 |
| M1 | D19 |
| TX | PIN RX2 (풀업 4,7kΩ) |
| RX | PIN TX3 (풀업 4,7kΩ) |
| 보조 | PIN D18 (풀업 4,7kΩ) (D15에서 일어나기) |
| VCC | 5V (그러나 3.3V에서 더 적은 전력으로 작동) |
| Gnd | Gnd |
Arduino의 작동 전압은 5V이므로 손상을 방지하기 위해 RX PIN M0 및 M1의 전압 분배기를 추가해야합니다. 전압 분배기 : 계산기 및 응용 프로그램에서 더 많은 정보를 얻을 수 있습니다.
신호에서 GND 및 1kohm에 2kohm 저항을 사용한 다음 Rx에 합류 할 수 있습니다.
| M0 | 7 (전압 분배기) |
| M1 | 6 (전압 분배기) |
| TX | 핀 2 (풀업 4,7kΩ) |
| RX | PIN 3 (풀업 4,7KΩ 및 전압 분배기) |
| 보조 | 핀 5 (풀업 4,7kΩ) |
| VCC | 5V |
| Gnd | Gnd |
| M0 | 2 (전압 분배기) |
| M1 | 3 (전압 분배기) |
| TX | 핀 14 TX (풀업 4,7kΩ) |
| RX | 핀 13 RX (풀업 4,7kΩ) |
| 보조 | 핀 1 (풀업 4,7kΩ) |
| VCC | 5V |
| Gnd | Gnd |
더 많은 옵션과 상황을 관리 할 수 있기 때문에 수많은 생성자 세트를 만들었습니다.
LORA_E220 (BYTE TXE220PIN, BYTE RXE220PIN, UART_BPS_RATE BPSRATE = UART_BPS_RATE_9600); LORA_E220 (BYTE TXE220PIN, BYTE RXE220PIN, BYTE AUXPIN, UART_BPS_RATE BPSRATE = UART_BPS_RATE_9600); LORA_E220 (바이트 TXE220PIN, BYTE RXE220PIN, BYTE AUXPIN, BYTE M0PIN, BYTE M1PIN, UART_BPS_RATE BPSRATE = UART_BPS_RATE_9600);
첫 번째 생성자 세트는 직렬 및 기타 핀을 라이브러리에 위임하기 위해 만들어졌습니다.
txE220pin 및 rxE220pin 은 UART에 연결하는 핀입니다. 그들은 필수 입니다.auxPin 작동, 전송 및 수신 상태를 확인하는 핀입니다 (다음에 더 잘 설명 할 것입니다). 그 핀은 필수가 아닙니다 . 설정하지 않으면 작업이 완료되도록 지연을 적용합니다 (대기 시간을 사용하면 Freeze 장치와 같이 문제가 발생하여 풀업 4.7K 저항을 넣거나 장치에 더 잘 연결해야합니다 ).m0pin 과 m1Pin 은 작동 모드를 변경하는 핀입니다 (테이블 상단 참조). “프로덕션”의이 핀은 직접 높거나 낮은 연결을 연결한다고 생각합니다. 그래도 테스트를 위해서는 라이브러리가 관리하는 데 도움이됩니다.bpsRate 는 소프트웨어의 보드 비율이 일반적으로 9600입니다 (프로그래밍/수면 모드의 유일한 보드 속도)간단한 예는입니다
#include "lora_e220.h"LORA_E32 E220TTL (2, 3); // E22 TX E22 RX // lora_e32 e32ttl (2, 3, 5, 6, 7); // E22 TX E22 RX
우리는 다른 생성자와 직접 소프트웨어를 사용할 수 있습니다
lora_e220 (Hardwareserial* serial, uart_bps_rate bpsrate = uart_bps_rate_9600); lora_e220 (Hardwareserial* Serial, Byte auxpin, uart_bps_rate bpsrate = uart_bps_rate_9600); LORA_E220 (HardWareserial* Serial, Byte Auxpin, Byte M0Pin, Byte M1Pin, UART_BPS_RATE BPSRATE = UART_BPS_RATE_9600);
이 생성자의 예제는 그렇게 할 수 있습니다.
#include <softwareserial.h> #include "lora_e220.h"소프트웨어 마비 (2, 3); // E220 TX E220 RX lora_e220 e220ttl (& myserial); // lora_e220 e220ttl (& myserial, 5, 7, 6);
마지막 생성자 세트는 소프트웨어 대신 하드 워레 서를 허용하는 것입니다.
lora_e220 (softwareserial* serial, uart_bps_rate bpsrate = uart_bps_rate_9600); LORA_E220 (SoftWareserial* Serial, Byte Auxpin, UART_BPS_RATE BPSRATE = UART_BPS_RATE_9600); lora_e220 (소프트웨어* Serial, byte auxpin, byte m0pin, byte m1pin, uart_bps_rate bpsrate = uart_bps_rate_9600);
ESP32의 경우 하드웨어 직렬 용 핀을 관리 할 수있는 3 개의 추가 생성자가 있습니다.
LORA_E220 (BYTE TXE220PIN, BYTE RXE220PIN, HARDWARESERIAL* SERIAL, UART_BPS_RATE BPSRATE = UART_BPS_RATE_9600, UINT32_T SERIALCONFIG = SERIAL_8N1); LORA_E220 (BYTE TXE220PIN, BYTE RXE220PIN, HARDWARESERIAL* SERIAL, BYTE AUXPIN, UART_BPS_RATE BPSRATE = UART_BPS_RATE_9600, UINT32_T SERIALCONFIG = SERIAL_8N1); LORA_E220 (BYTE TXE220PIN, BYTE RXE220PIN, HARDWARESERIAL* SERIAL, BYTE AUXPIN, BYTE M0PIN, BYTE M1PIN, UART_BPS_RATE BPSRATE = UART_BPS_RATE_9600, UINT32_T SERIACCONFIG = SERIAL_8N1);
시작 명령은 입력 및 출력 모드에서 직렬 및 핀을 시작하는 데 사용됩니다.
void begin ();
실행 중입니다
// 모든 핀과 UART를 시작합니다 e220ttl.begin ();
구성을 관리하고 장치에 대한 정보를 얻는 방법에는 여러 가지가 있습니다.
responseStrectContainer getConfiguration (); ResponseStatus setConfiguration (구성 구성, program_command savetype = write_cfg_pwr_dwn_lose);ResponseStructContainer getModuleInformation(); void printParameters(struct Configuration configuration); ResponseStatus resetModule();
응답 관리를 단순화하기 위해 오류를 관리하고 일반 데이터를 반환하는 데 매우 유용한 일련의 컨테이너를 만들었습니다.
ResponseStatus is a status container and has two .이를 사용하면 상태 코드와 상태 코드에 대한 설명을 얻을 수 있습니다.
serial.println (c.getResponsedEscription ()); // 코드 설명 serial.println (c.code); // 1 성공하면
코드는입니다
e220_success = 1, err_e220_unknown, err_e220_not_support, err_e220_not_implement, err_e220_not_initial, err_e220_invalid_param, err_e220_data_size_not_match, err_e220_buf_too_small, err_e220_timeout, ERR_E220_HARDWARE, ERR_E220_HEAD_NOT_RECENCHED
이 컨테이너는 문자열 응답을 관리하도록 만들어졌으며 두 개의 진입 점이 있습니다.
문자열이있는 data 메시지에서 반환하고 RepsonseStatus 의 인스턴스를 status .
responsecontainer rs = e220ttl.receiveMessage (); 문자열 메시지 = rs.data;Serial.println(rs.status.getResponseDescription()); Serial.println(message);
그러나이 명령은 버퍼의 모든 데이터를 읽습니다. 3 개의 메시지를 받으면 한 번에 세 가지 메모를 모두 읽게되며 간단한 솔루션은 메시지의 끝에서 엔드 캐릭터를 사용하여 기본값을 사용하여 0 (null 문자)을 사용하는 것입니다.
responsecontainer rs = e220ttl.receiveMessageUntil ();
// 사용자 정의 구분기를 지정할 수도 있습니다
// responsecontainer rs = e220ttl.receiveMessageUntIll ( '|');
String message = rs.data;
Serial.println(rs.status.getResponseDescription());
Serial.println(message);
이 장치 의이 버전은 RSSI도 지원합니다. 해당 매개 변수를 읽으려면 (이를 보내려는 구성에서 지정하는 경우)
responsecontainer rc = e220ttl.receivemessagerssi (); 문자열 메시지 = rs.data;Serial.println(rs.status.getResponseDescription()); Serial.println(message); Serial.print("RSSI: "); Serial.println(rc.rssi, DEC);
ResponseStructContainer 는 더 "복잡한"컨테이너입니다. 나는 이것을 구조를 관리하는 데 사용하고, 동일한 응답 초기형을 가지고 있지만, 데이터는 복잡한 구조를 관리하는 무효 포인터입니다.
ResponseCructContainer C;
c = e220ttl.getConfiguration ();
// 다른 모든 작업 전에 구성 포인터를 얻는 것이 중요합니다.
구성 구성 = *(구성 *) c.data;
serial.println (c.status.getResponsedEscription ());
serial.println (c.status.code);
c.close ();
RSSI로 구성된 메시지를 받으면 사용할 수 있습니다.
ResponseCructContainer RSC = e220TTL.ReceiveMessagersSI (sizeof (메시지));
serial.println (rsc.status.getResponsedEscription ());
구조 메시지 메시지 = *(메시지 *) rsc.data;
serial.println (message.type);
serial.println (message.message);
serial.println (*(float*) (Message.Temperature));
serial.print ( "rssi :"); Serial.println (RSC.RSSI, DEC);
rsc.close ();
ResponseStructContainer 사용할 때마다 close() 로 닫아야합니다.
첫 번째 방법은 getConfiguration이며이를 사용하여 장치에 저장된 모든 데이터를 검색 할 수 있습니다.
responseStrectContainer getConfiguration ();
여기서 예제입니다.
ResponseCructContainer C;
c = e32ttl.getConfiguration ();
// 다른 모든 작업 전에 구성 포인터를 얻는 것이 중요합니다.
구성 구성 = *(구성 *) c.data;
serial.println (c.status.getResponsedEscription ());
serial.println (c.status.code);
serial.println (configuration.sped.getUartBaudrate ());
c.close ();
구성 구조에는 설정의 모든 데이터가 있으며 단일 데이터에 대한 모든 설명을 얻기 위해 일련의 기능을 추가합니다.
configuration.addl = 0x03; // 주소의 첫 번째 부분 configuration.addh = 0x00; // 두 번째 부분configuration.CHAN = 23; // Communication channel configuration.SPED.uartBaudRate = UART_BPS_9600; // Serial baud rate configuration.SPED.airDataRate = AIR_DATA_RATE_010_24; // Air baud rate configuration.SPED.uartParity = MODE_00_8N1; // Parity bit configuration.OPTION.subPacketSetting = SPS_200_00; // Packet size configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED; // Need to send special command configuration.OPTION.transmissionPower = POWER_22; // Device power configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED; // Enable RSSI info configuration.TRANSMISSION_MODE.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Enable repeater mode configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED; // Check interference configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011; // WOR timing
모든 설명을 얻기 위해 모든 속성에 동등한 기능이 있습니다.
void printparameters (구조 구성 구성) {
Serial.println ( "-----------------------------------------------------------------
Serial.print(F("HEAD : ")); Serial.print(configuration.COMMAND, HEX);Serial.print(" ");Serial.print(configuration.STARTING_ADDRESS, HEX);Serial.print(" ");Serial.println(configuration.LENGHT, HEX);
Serial.println(F(" "));
Serial.print(F("AddH : ")); Serial.println(configuration.ADDH, HEX);
Serial.print(F("AddL : ")); Serial.println(configuration.ADDL, HEX);
Serial.println(F(" "));
Serial.print(F("Chan : ")); Serial.print(configuration.CHAN, DEC); Serial.print(" -> "); Serial.println(configuration.getChannelDescription());
Serial.println(F(" "));
Serial.print(F("SpeedParityBit : ")); Serial.print(configuration.SPED.uartParity, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTParityDescription());
Serial.print(F("SpeedUARTDatte : ")); Serial.print(configuration.SPED.uartBaudRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getUARTBaudRateDescription());
Serial.print(F("SpeedAirDataRate : ")); Serial.print(configuration.SPED.airDataRate, BIN);Serial.print(" -> "); Serial.println(configuration.SPED.getAirDataRateDescription());
Serial.println(F(" "));
Serial.print(F("OptionSubPacketSett: ")); Serial.print(configuration.OPTION.subPacketSetting, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getSubPacketSetting());
Serial.print(F("OptionTranPower : ")); Serial.print(configuration.OPTION.transmissionPower, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getTransmissionPowerDescription());
Serial.print(F("OptionRSSIAmbientNo: ")); Serial.print(configuration.OPTION.RSSIAmbientNoise, BIN);Serial.print(" -> "); Serial.println(configuration.OPTION.getRSSIAmbientNoiseEnable());
Serial.println(F(" "));
Serial.print(F("TransModeWORPeriod : ")); Serial.print(configuration.TRANSMISSION_MODE.WORPeriod, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getWORPeriodByParamsDescription());
Serial.print(F("TransModeEnableLBT : ")); Serial.print(configuration.TRANSMISSION_MODE.enableLBT, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getLBTEnableByteDescription());
Serial.print(F("TransModeEnableRSSI: ")); Serial.print(configuration.TRANSMISSION_MODE.enableRSSI, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getRSSIEnableByteDescription());
Serial.print(F("TransModeFixedTrans: ")); Serial.print(configuration.TRANSMISSION_MODE.fixedTransmission, BIN);Serial.print(" -> "); Serial.println(configuration.TRANSMISSION_MODE.getFixedTransmissionDescription());
Serial.println("----------------------------------------");
}
마찬가지로 SetConfiguration은 구성 구조를 원하므로 구성을 관리하는 더 좋은 방법은 현재 구성을 검색하고 필요한 유일한 변경 사항을 적용하고 다시 설정하는 것입니다.
ResponseStatus setConfiguration (구성 구성, program_command savetype = write_cfg_pwr_dwn_lose);
configuration 이전에 표시된 구조이며 saveType 사용하면 변경 사항이 영구적이거나 현재 세션에 대해서만 선택할 수 있습니다.
ResponseCructContainer C; c = e32ttl100.getConfiguration (); // 다른 모든 작업 전에 구성 포인터를 얻는 것이 중요합니다. 구성 구성 = *(구성 *) c.data; serial.println (c.status.getResponsedEscription ()); serial.println (c.status.code);printParameters(configuration); configuration.ADDL = 0x03; // First part of address configuration.ADDH = 0x00; // Second part configuration.CHAN = 23; // Communication channel configuration.SPED.uartBaudRate = UART_BPS_9600; // Serial baud rate configuration.SPED.airDataRate = AIR_DATA_RATE_010_24; // Air baud rate configuration.SPED.uartParity = MODE_00_8N1; // Parity bit configuration.OPTION.subPacketSetting = SPS_200_00; // Packet size configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED; // Need to send special command configuration.OPTION.transmissionPower = POWER_22; // Device power configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED; // Enable RSSI info configuration.TRANSMISSION_MODE.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Enable repeater mode configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED; // Check interference configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011; // WOR timing // Set configuration changed and set to not hold the configuration ResponseStatus rs = e32ttl100.setConfiguration(configuration, WRITE_CFG_PWR_DWN_LOSE); Serial.println(rs.getResponseDescription()); Serial.println(rs.code); printParameters(configuration); c.close()
매개 변수는 모두 상수로 관리됩니다.
| 이름 | 설명 | 주소 |
|---|---|---|
| addh | 모듈의 높은 주소 바이트 (기본 00h) | 00H |
| addl | 모듈의 낮은 주소 바이트 (기본 00h) | 01H |
| Sped | 데이터 속도 패리티 비트 및 공기 데이터 속도에 대한 정보 | 02H |
| 옵션 | 전송 유형, 패킷 크기, 특별한 메시지를 허용합니다 | 03H |
| 찬 | Communication Channel (410m + Chan*1m), 기본 17H (433MHz), 433MHz 장치에 대해서만 유효합니다. | 04H |
| 옵션 | 전송 유형, 패킷 크기, 특별한 메시지를 허용합니다 | 05H |
| Transmission_Mode | 전송 모드를 지정하는 많은 매개 변수 | 06H |
| 토굴 | 차단을 피하기위한 암호화 | 07H |
UART PARITY BIT : UART 모드는 커뮤니케이션 당사자마다 다를 수 있습니다.
| UART 패리티 비트 | 일정한 가치 |
|---|---|
| 8n1 (기본값) | Mode_00_8N1 |
| 8o1 | Mode_01_8O1 |
| 8e1 | Mode_10_8E1 |
| 8n1 (00) | Mode_11_8N1 |
UART BAUD RAPE : UART BAUD 요금은 커뮤니케이션 당사자마다 다를 수 있지만 (추천하지는 않았습니다). UART 보드 속도는 무선 전송 매개 변수와 관련이 없으며 무선 전송/수신 기능에 영향을 미치지 않습니다.
| TTL UART BAUD rate (bps) | 일정한 가치 |
|---|---|
| 1200 | UART_BPS_1200 |
| 2400 | UART_BPS_2400 |
| 4800 | UART_BPS_4800 |
| 9600 (기본값) | UART_BPS_9600 |
| 19200 | UART_BPS_19200 |
| 38400 | UART_BPS_38400 |
| 57600 | UART_BPS_57600 |
| 115200 | UART_BPS_115200 |
공기 데이터 속도 : 공기 데이터 속도가 낮을수록 전송 거리가 길고 간섭 방지 성능이 향상되고 전송 시간이 길어집니다. 공중 데이터 속도는 두 커뮤니케이션 당사자 모두에게 일정해야합니다.
| 공기 데이터 속도 (BPS) | 일정한 가치 |
|---|---|
| 2.4k | air_data_rate_000_24 |
| 2.4k | air_data_rate_001_24 |
| 2.4K (기본값) | air_data_rate_010_24 |
| 4.8k | air_data_rate_011_48 |
| 9.6k | air_data_rate_100_96 |
| 19.2k | air_data_rate_101_192 |
| 38.4K | air_data_rate_110_384 |
| 62.5k | air_data_rate_111_625 |
이것은 패킷의 최대 길이입니다.
데이터가 서브 포켓 길이보다 작을 때, 수신 끝의 직렬 출력은 중단되지 않은 연속 출력입니다. 수신 최종 직렬 포트는 데이터가 하위 패킷 길이보다 클 때 하위 패킷을 출력합니다.
| 패킷 크기 | 일정한 가치 |
|---|---|
| 200Bytes (기본값) | SPS_200_00 |
| 128 바디 | SPS_128_01 |
| 64 비트 | SPS_064_10 |
| 32 바디 | SPS_032_11 |
이 명령은 RSSI의 관리 유형을 활성화/비활성화 할 수 있으며 원격 구성을 관리해야합니다. 메시지의 RSSI 매개 변수가 아닙니다.
활성화되면 C0, C1, C2, C3 명령을 전송 모드 또는 WER 전송 모드로 보내어 레지스터를 읽을 수 있습니다. 레지스터 0x00 : 현재 주변 노이즈 RSSI 레지스터 0x01 : RSSI 데이터가 마지막으로 수신 된 경우 RSSI.
| RSSI 주변 노이즈 활성화 | 일정한 가치 |
|---|---|
| 할 수 있게 하다 | rssi_ambient_noise_enabled |
| 비활성화 (기본값) | rssi_ambient_noise_disabled |
SO와 같은 정의를 적용 하여이 상수 세트를 변경할 수 있습니다.
#define e220_22 // 기본값을 설정하지 않은 채 값
최대 전력으로 22dBm을 가진 E220에 적용됩니다.
낮은 전원 공급 장치 효율로 인해 저전력 변속기는 권장되지 않습니다.
| 전송 전력 (근사) | 일정한 가치 |
|---|---|
| 22dbm (기본값) | Power_22 |
| 17dBm | Power_17 |
| 13dbm | Power_13 |
| 10dbm | Power_10 |
최대 전력으로 30dbm을 가진 E220에 적용됩니다.
낮은 전원 공급 장치 효율로 인해 저전력 변속기는 권장되지 않습니다.
#e220_30을 정의하십시오
| 전송 전력 (근사) | 일정한 가치 |
|---|---|
| 30dbm (기본값) | Power_30 |
| 27dBM | Power_27 |
| 24dbm | Power_24 |
| 21dbm | Power_21 |
이 정의로 채널 주파수를 구성 할 수도 있습니다.
// 중 하나 #define frequency_433 #define frequency_170 #define frequency_470 #define frequency_868 #define frequency_915
활성화되면 모듈은 무선 데이터를 수신하며 직렬 포트 TXD를 통해 출력 후 RSSI 강도 바이트를 따릅니다.
| RSSI를 활성화합니다 | 일정한 가치 |
|---|---|
| 할 수 있게 하다 | rssi_enabled |
| 비활성화 (기본값) | rssi_disabled |
전송 모드 : 각 사용자 데이터 프레임의 처음 3 바이트는 고정 전송 모드에서 높은/낮은 주소 및 채널로 사용할 수 있습니다. 모듈은 전송 될 때 주소와 채널을 변경합니다. 프로세스를 완료 한 후 원래 설정으로 되돌아갑니다.
| 고정 변속기 활성화 비트 | 일정한 가치 |
|---|---|
| 고정 전송 모드 | ft_fixed_transmission |
| 투명 전송 모드 (기본값) | ft_transparent_transmission |
활성화되면 전송되기 전에 무선 데이터를 모니터링하여 어느 정도 간섭을 피하지만 데이터 지연을 유발할 수 있습니다.
| LBT 활성화 바이트 | 일정한 가치 |
|---|---|
| 할 수 있게 하다 | lbt_enabled |
| 비활성화 (기본값) | lbt_disabled |
WOR가 전송중인 경우 : WOR 수신기가 무선 데이터를 수신하고 직렬 포트를 통해 출력 한 후에는 1000ms를 기다리기 전에 WOR에 다시 들어갑니다. 사용자는 직렬 포트 데이터를 입력 하고이 기간 동안 무선을 통해 반환 할 수 있습니다. 각 직렬 바이트는 1000ms로 새로 고침됩니다. 사용자는 1000ms 이내에 첫 바이트를 전송해야합니다.
| 무선 웨이크 업 시간 | 일정한 가치 |
|---|---|
| 500ms | wake_up_500 |
| 1000ms | wake_up_1000 |
| 1500ms | wake_up_1500 |
| 2000ms (기본값) | wake_up_2000 |
| 2500ms | wake_up_2500 |
| 3000ms | wake_up_3000 |
| 3500ms | wake_up_3500 |
| 4000ms | wake_up_4000 |
먼저, 우리는 수신 버퍼에 무언가가 있는지 확인하기 위해 간단하지만 실용적인 방법을 소개해야합니다.
int availing ();
현재 스트림에 몇 바이트 수를 반환하는 것은 간단합니다.
일반/투명 전송 모드는 동일한 주소와 채널을 가진 모든 장치에 메시지를 보냅니다.
메시지를 보내거나받는 방법이 많이 있으며 자세히 설명 할 것입니다.
ResponseStatus sendMessage (const String 메시지);
ResponseContainer HeagiveMessage ();
첫 번째 방법은 SendMessage이며 정상 모드의 장치로 문자열을 보내는 데 사용됩니다.
ResponseStatus rs = e220ttl.SendMessage ( "Prova"); serial.println (rs.getResponsedEscription ());
다른 장치는 단순히 루프에서 수행합니다.
if (e220ttl.available ()> 1) {
responsecontainer rs = e220ttl.receiveMessage ();
문자열 메시지 = rs.data; // 먼저 데이터를 얻습니다
serial.println (rs.status.getResponsedEscription ());
serial.println (메시지);
}
버퍼에서 여러 메시지를 받고 한 번에 읽고 싶지 않은 경우주의를 기울이십시오. ResponseContainer rs = e220ttl.receiveMessageUntil(); Delimiter가 메시지를 보내는 끝에 있습니다.
RSSI를 활성화 한 경우 receiveMessageRSSI 사용해야합니다.
복잡한 구조를 보내려면이 방법을 사용할 수 있습니다.
ResponseStatus sendmessage (const void *메시지, const uint8_t size);
ResponseStrectContainer 리보 모드 (const uint8_t size);
예를 들어 구조를 보내는 데 사용됩니다.
구조 Messaggione {
숯 유형 [5];
char 메시지 [8];
부리 미티코;
};
Struct Messaggione Messaggione = { "temp", "peple", true};
ResponseStatus rs = e220ttl.sendMessage (& messaggione, sizeof (messaggione));
serial.println (rs.getResponsedEscription ());
그리고 다른 쪽은 메시지를받을 수 있습니다.
ResponseCructContainer RSC = E22TTL.ReceiveMessage (sizeof (Messaggione));
Struct Messaggione Messaggione = *(Messaggione *) rsc.data;
serial.println (Messaggione.message);
Serial.println (Messaggione.mitico);
rsc.close ();
RSSI를 활성화 한 경우 receiveMessageRSSI 사용해야합니다.
더 많은 유형의 구조를 관리하기 위해 메시지의 첫 번째 부분을 읽으려면이 방법을 사용할 수 있습니다.
ResponseContainer leageInitialMessage (const uint8_t 크기);
로드 할 구조를 식별하기 위해 유형이있는 문자열을 받기 위해 그것을 만듭니다.
struct messaggione {// 유형이없는 부분 구조
char 메시지 [8];
부리 미티코;
};
char type[5]; // first part of structure
ResponseContainer rs = e220ttl.receiveInitialMessage(sizeof(type));
// Put string in a char array (not needed)
memcpy ( type, rs.data.c_str(), sizeof(type) );
Serial.println("READ TYPE: ");
Serial.println(rs.status.getResponseDescription());
Serial.println(type);
// Read the rest of structure
ResponseStructContainer rsc = e220ttl.receiveMessage(sizeof(Messaggione));
struct Messaggione messaggione = *(Messaggione*) rsc.data;
rsc.close();
마찬가지로 고정 변속기와 함께 사용할 수있는 방법 세트를 만듭니다.
대상 장치가 고정 모드를 설정할 때 주소와 채널로 서문을 수신 하지 않기 때문에 전송 방법 만 변경해야합니다 .
그래서 문자열 메시지의 경우, 당신은 가지고 있습니다
ResponseStatus sendfixedMessage (Byte Addh, Byte Addl, Byte Chan, Const String Message);
ResponseStatus sendBroadcastFixEdMessage (Byte Chan, Const String Message);
그리고 구조를 위해 당신은 가지고 있습니다
ResponseStatus sendfixedMessage (Byte Addh, Byte Addl, Byte Chan, const void *메시지, const uint8_t size);
ResponseStatus sendbroadcastfixedMessage (Byte Chan, const void *메시지, const uint8_t size);
다음은 간단한 예입니다
ResponseStatus rs = e220ttl.sendfixedMessage (0, 0, 0x17, & messaggione, sizeof (messaggione)); // ResponseStatus rs = e220ttl.SendFixEdMessage (0, 0, 0x17, "CIAO");
고정 전송에는 더 많은 시나리오가 있습니다
특정 장치 (두 번째 시나리오 고정 전송)로 전송하는 경우 Addl, Addh 및 Chan을 추가하여 직접 식별해야합니다.
ResponseStatus rs = e220ttl.sendfixedMessage (2, 2, 0x17, "장치로의 메시지");
지정된 채널의 모든 장치에 메시지를 보내려면이 메소드를 사용할 수 있습니다.
ResponseStatus rs = e220ttl.sendbroadcastfixedMessage (0x17, "채널의 장치로의 메시지");
네트워크에서 모든 방송 메시지를 받으려면 BROADCAST_ADDRESS 로 ADDH 와 ADDL 설정해야합니다.
ResponseCructContainer C; c = e220ttl.getConfiguration (); // 다른 모든 작업 전에 구성 포인터를 얻는 것이 중요합니다. 구성 구성 = *(구성 *) c.data; serial.println (c.status.getResponsedEscription ()); serial.println (c.status.code);printParameters(configuration); configuration.ADDL = BROADCAST_ADDRESS; configuration.ADDH = BROADCAST_ADDRESS; // Set configuration changed and set to not hold the configuration ResponseStatus rs = e32ttl100.setConfiguration(configuration, WRITE_CFG_PWR_DWN_LOSE); Serial.println(rs.getResponseDescription()); Serial.println(rs.code); printParameters(configuration); c.close();
이제 당신은 당신의 일을 할 모든 정보가 있지만, 나는 모든 가능성을 더 잘 이해하기 위해 몇 가지 실제 예를 보여주는 것이 중요하다고 생각합니다.
Github 라이브러리