

您可以在此處訂購PCB
指南的6部分中的指導和集會視頻
您可以在此處訂購PCB
指南的6部分中的指導和集會視頻
LORA或遠程無線數據遙測是一項由Semtech開創的技術,其頻率低於NRF24L01(433 MHz,868 MHz,或916 MHz,或916 MHz,而NRF24L01的2.4 GHz),但距離為5000m至11000m。
Lora Smart Home(LLCC68)是中型室內室內和室內室內無線應用程序的Sub-GHzLora®RF收發器。 SPI接口。銷與銷釘與SX1262兼容。 SX1261,SX1262,SX1268和LLCC68的設計用於長時間的電池壽命,僅4.2 mA Active接收電流。 SX1261可以傳輸到+15 dBM,而SX1262,SX1268和LLCC68可以使用高效的集成功率放大器傳輸到+22 dbm。
這些設備支持LPWAN用例的LORA調製,以及(G)FSK調製遺留用例。這些設備可高度配置,以滿足消費者使用的不同應用要求。該設備提供了與LoraAlliance®發布的Lorawan®規範使用的Semtech收發器兼容的LORA調製。該無線電適合針對符合無線電法規的系統,包括但不限於ETSI EN 300 220,FCC CFR 47第15部分,中國監管要求和日本ARIB T-108。從150MHz到960MHz的連續頻率覆蓋範圍可以支持世界各地所有主要的Sub-GHz ISM頻段。
| LLCC68 | SX1278-SX1276 | |
|---|---|---|
| 距離 | > 11公里 | 8公里 |
| 費率(洛拉) | 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一起工作並確定四種操作模式。不允許漂浮;它可以是地面的。 |
| 2 | M1 | 輸入(弱上拉) | 使用M0並決定四種操作模式。不允許漂浮;它可以是地面的。 |
| 3 | rxd | 輸入 | TTL UART輸入連接到外部(MCU,PC)TXD輸出引腳。它可以配置為開放式或上拉輸入。 |
| 4 | TXD | 輸出 | TTL UART輸出連接到外部RXD(MCU,PC)輸入引腳。可以將其配置為開放式或推力輸出 |
5 | 輔助 | 輸出 | 指示模塊的工作狀態並喚醒外部MCU。在自我檢查初始化過程中,銷釘輸出低水平。可以將其配置為開放式或推扣輸出(允許浮動)。 |
| 6 | VCC | 電源3V〜5.5V DC | |
| 7 | gnd | 地面 |
如您所見,您可以通過M0和M1引腳設置各種模式。
| 模式 | M1 | M0 | 解釋 |
|---|---|---|---|
| 普通的 | 0 | 0 | UART和無線通道是開放的,並且透明傳輸正在打開 |
| 最差的發射器 | 0 | 1 | 最差的發射器 |
| 最差的接收器 | 1 | 0 | 較差的接收器(支撐在空中醒來) |
| 深度睡眠模式 | 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,我們使用RX2和TX2,因為默認情況下,ESP32沒有軟氧化,但具有3個序列。
| E22 | ESP32 |
|---|---|
| M0 | D21 |
| M1 | D19 |
| TX | 引腳RX2(上拉4,7kΩ) |
| Rx | 引腳TX3(上拉4,7kΩ) |
| 輔助 | 引腳D18(上拉4,7kΩ)(D15醒來) |
| VCC | 5V(但在3.3V中使用較少的功率) |
| gnd | gnd |
Arduino的工作電壓為5V,因此我們需要在LORA模塊的Rx Pin M0和M1上添加電壓分隔器,以防止損壞;您可以在此處獲取更多信息電壓分隔器:計算器和應用程序。
您可以從信號中使用2KOHM電阻到GND和1KOHM,然後將它們放在RX上。
| M0 | 7(電壓分隔器) |
| M1 | 6(電壓分隔器) |
| TX | 引腳2(上拉4,7kΩ) |
| Rx | 引腳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(字節txe220pin,byte rxe220pin,uart_bps_rate bpsrate = uart_bps_rate_9600); lora_e220(字節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_RATE_9600);
創建第一組構造函數是為了將串行和其他引腳委託給庫。
txE220pin和rxE220pin是連接到UART的引腳。他們是強制性的。auxPin是檢查操作,傳輸和接收狀態的引腳(我們接下來要更好地解釋),該引腳不是強制性的。如果您不設置它,我會應用延遲以允許操作完成(延遲,我遇到麻煩,例如凍結設備,必須將上拉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*串行,uart_bps_rate bpsrate = uart_bps_rate_9600); lora_e220(hardwareserial*串行,字節auxpin,uart_bps_rate bpsrate = uart_bps_rate_9600); lora_e220(hardwareserial*串行,字節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*串行,uart_bps_rate bpsrate = uart_bps_rate_9600); lora_e220(SoftWareserial*串行,字節auxpin,uart_bps_rate bpsrate = uart_bps_rate_9600); lora_e220(SoftWareserial*串行,字節AUXPIN,BYTE M0PIN,BYTE M1PIN,UART_BPS_RATE BPSRATE = UART_BPS_RATE_9600);
對於ESP32,您還有三個額外的構造函數可以允許管理用於硬件串行的引腳。
lora_e220(字節TXE220PIN,BYTE RXE220PIN,HARDWARESERIAL*序列,UART_BPS_RATE BPSRATE = UART_BPS_RATE_9600,uint32_t serialConfig = Serial_8n1); lora_e220(字節TXE220PIN,BYTE RXE220PIN,HARDWARESERIAL*串行,字節Auxpin,UART_BPS_RATE bpsrate = uart_bps_rate_9600,uint32_t serialConfig = serialConfig = 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 serialConfig = SERIAL_8N1);
開始命令用於以輸入和輸出模式啟動串行和引腳。
void begin();
在執行中
//啟動所有引腳和UART e220ttl.begin();
有許多方法用於管理配置和獲取有關設備的信息。
ResponsertructContainer 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_REVENICED
創建此容器以管理字符串響應並具有兩個入口點。
帶有從消息和status返回的字符串的data是RepsonseStatus的實例。
響應式rs = e220ttl.receivemessage(); 字符串消息= rs.data;Serial.println(rs.status.getResponseDescription()); Serial.println(message);
但是此命令用於讀取緩衝區中的所有數據。如果您收到三條消息,您將一次讀取所有三個註釋,而我的簡單解決方案是使用最終字符在消息末尾發送,默認情況下我使用 0(null cartara)
響應式rs = e220ttl.receivemessageuntil();
//您也可以指定自定義定界符
//響應convessecontainer rs = e220ttl.receivemessageuntil('|');
String message = rs.data;
Serial.println(rs.status.getResponseDescription());
Serial.println(message);
此版本的設備也支持RSSI。要讀取該參數(如果您在要發送的配置中指定),則可以使用
響應式rc = e220ttl.receivemessagerssi(); 字符串消息= rs.data;Serial.println(rs.status.getResponseDescription()); Serial.println(message); Serial.print("RSSI: "); Serial.println(rc.rssi, DEC);
ResponseStructContainer圍牆是一個更“複雜”的容器。我用它來管理結構,它具有相同的響應範圍內入口點,但是數據是管理複雜結構的空隙指針。
響應劇集C;
c = e220ttl.getConfiguration();
//在所有其他操作之前,重要的是獲得配置指針
配置配置= *(配置 *)c.data;
serial.println(c.status.getResponsedEscription());
serial.println(c.status.code);
c.close();
如果您收到帶有RSSI的結構化消息,則可以使用
ResponsestructContainer RSC = E220TTL.ReceiveMessagerssi(sizeof(message));
serial.println(rsc.status.getResedescription());
結構消息消息= *(消息 *)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,您可以使用它來檢索設備上存儲的所有數據。
ResponsertructContainer getConfiguration();
這是一個用法示例。
響應劇集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允許您選擇更改是永久性還是僅在當前會話中。
響應劇集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 |
| 加油 | 有關數據速率平價位和空氣數據速率的信息 | 02H |
| 選項 | 傳輸類型,數據包大小,允許特殊消息 | 03H |
| 陳 | 通信通道(410m + Chan(1M),默認為17H(433MHz),僅適用於433MHz設備,請檢查下面的設備,以檢查設備的正確頻率 | 04H |
| 選項 | 傳輸類型,數據包大小,允許特殊消息 | 05H |
| 傳輸_mode | 許多指定傳輸方式的參數 | 06H |
| 地下室 | 加密以避免攔截 | 07H |
UART Parity位: UART模式在交流方之間可能有所不同
| UART均等位 | 恆定值 |
|---|---|
| 8N1(默認) | MODE_00_8N1 |
| 8o1 | 模式_01_8O1 |
| 8e1 | MODE_10_8E1 |
| 8N1(等於00) | 模式_11_8N1 |
UART BAUD率:溝通各方之間的UART波特率可能有所不同(但不建議)。 UART BAUD率與無線傳輸參數無關,並且不會影響無線傳輸/接收功能。
| TTL UART BAUD率(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 |
這是數據包的最大長度。
當數據小於子包裝長度時,接收端的串行輸出是不間斷的連續輸出。當數據大於子包長度時,接收端串行端口將輸出子包。
| 數據包大小 | 恆定值 |
|---|---|
| 200 bytes(默認) | SPS_200_00 |
| 128比特 | SPS_128_01 |
| 64比特 | SPS_064_10 |
| 32比特 | SPS_032_11 |
此命令可以啟用/禁用RSSI的管理類型,並且必須管理遠程配置。請注意消息中的RSSI參數。
啟用時,可以以發送模式或WOR Transmitting模式發送C0,C1,C2,C2,C3命令以讀取寄存器。寄存器0x00:當前環境噪聲RSSI寄存器0x01:上次收到數據時。
| RSSI環境噪聲啟用 | 恆定值 |
|---|---|
| 使能夠 | rssi_ambient_noise_enabled |
| 禁用(默認) | rssi_ambient_noise_disabled |
您可以通過應用這樣的定義來更改這組常數:
#define E220_22 //默認值未設置
適用於E220,具有22DBM作為最大功率。
由於其低電源效率,不建議使用低電源。
| 傳輸功率(近似) | 恆定值 |
|---|---|
| 22DBM(默認) | Power_22 |
| 17dBm | Power_17 |
| 13DBM | Power_13 |
| 10dBm | Power_10 |
適用於E220,具有30dBm作為最大功率。
由於其低電源效率,不建議使用低電源。
#Define E220_30
| 傳輸功率(近似) | 恆定值 |
|---|---|
| 30DBM(默認) | Power_30 |
| 27dBm | Power_27 |
| 24dBm | Power_24 |
| 21dBm | Power_21 |
您也可以使用此定義配置通道頻率:
//之一 #Define頻率_433 #Define頻率_170 #Define頻率_470 #Define頻率_868 #Define頻率_915
啟用後,該模塊會接收無線數據,並且它將遵循通過串行端口TXD輸出後的RSSI強度字節
| 啟用RSSI | 恆定值 |
|---|---|
| 使能夠 | rssi_enabled |
| 禁用(默認) | rssi_disabled |
傳輸模式:每個用戶數據框的前三個字節可以用作固定傳輸模式下的高/低地址和通道。傳輸時該模塊更改其地址和通道。完成過程後,它將恢復為原始設置。
| 固定傳輸啟用位 | 恆定值 |
|---|---|
| 固定傳輸模式 | 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 |
| 2000毫秒(默認) | wake_up_2000 |
| 2500ms | wake_up_2500 |
| 3000ms | wake_up_3000 |
| 3500ms | wake_up_3500 |
| 4000ms | wake_up_4000 |
首先,我們必須引入一種簡單但實用的方法來檢查接收緩衝區中是否有東西。
int可用();
返回當前流中有多少個字節很容易。
普通/透明傳輸模式將消息發送到具有相同地址和頻道的所有設備。
發送/接收消息有很多方法,我們將詳細解釋:
ResponseStatus sendmessage(const字符串消息);
響應式收款();
第一種方法是sendmessage,用於以正常模式將字符串發送到設備。
ResponseStatus rs = E220TTL.SendMessage(“ Prova”); serial.println(rs.getResponsedEscription());
另一個設備僅在循環上進行。
if(e220ttl.available()> 1){
響應式rs = e220ttl.receivemessage();
字符串消息= rs.data; //首先獲取數據
serial.println(rs.Status.getResponsedEscription());
serial.println(消息);
}
如果您在緩衝區中收到多個消息,並且不想一次閱讀所有消息,請注意。您必須使用ResponseContainer rs = e220ttl.receiveMessageUntil();在發送消息的結尾處,定界符。
如果啟用了RSSI,則必須使用receiveMessageRSSI 。
如果要發送複雜的結構,可以使用此方法
ResponseStatus sendmessage(const void *消息,const uint8_t size);
響應劇集接收器(const uint8_t size);
它用於發送結構,例如:
struct Messaggione {
char類型[5];
char消息[8];
bool mitico;
};
struct messaggione messaggione = {“ temp”,“ peple”,true};
responseStatus rs = e220ttl.sendMessage(&Messaggione,sizeof(messaggione));
serial.println(rs.getResponsedEscription());
另一方面,您可以收到消息
ResponsestructContainer RSC = E22TTL.ReceiveMessage(sizeof(messaggione));
Messaggione Messaggione = *(Messaggione *)rsc.data;
serial.println(messaggione.message);
serial.println(messaggione.mitico);
rsc.close();
如果啟用了RSSI,則必須使用receiveMessageRSSI 。
如果您想閱讀消息的第一部分以管理更多類型的結構,則可以使用此方法。
響應式接收詞(const uint8_t size);
我創建它以接收帶有類型或其他類型的字符串以識別加載的結構。
struct Messaggione {//部分結構沒有類型
char消息[8];
bool mitico;
};
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(字節addh,byte addl,byte chan,const字符串消息);
ResponseStatus sendBroadcastFixedMessage(Byte Chan,const字符串消息);
對於結構,您有
ResponseStatus sendfixedMessage(字節addh,byte addl,byte chan,const void *message,const uint8_t size);
ResponseStatus sendBroadcastFixedMessage(字節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,“消息給通道設備的消息”);
如果您希望在網絡中接收所有廣播消息,則必須將ADDH和ADDL與BROADCAST_ADDRESS設置。
響應劇集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庫