

https://downloads.arduino.cc/libraries/logs/github.com/xreef/ebyte_lora_e22_series_library/
您可以在此處訂購PCB
指南的6部分中的指導和集會視頻
您可以在此處訂購PCB
指南的6部分中的指導和集會視頻
我創建了一個庫來管理EBYTE E22系列洛拉設備,非常強大,簡單且便宜的設備。
LORA或遠程無線數據遙測是由Semtech開創的一項技術,其頻率低於NRF24L01(433 MHz,868 MHz,868 MHz或916 MHz,對於NRF24L01,又是2.4 GHz),但距離為4000m至1000000m)。
洛拉E22
您可以在這裡找到Aliexpress(433MHz 4km)-Aliexpress(433MHz 10km)
請參閱我的文章以獲取更新的模式
您可以在這裡找到我的圖書館。
下載。
單擊右上角的下載按鈕,重命名未壓縮文件夾lora_e22。
檢查Lora_E22文件夾是否包含lora_e22.cpp和lora_e22.h。
將lora_e22庫文件夾放置您的 /庫 /文件夾。
如果您的第一個庫,則可能需要創建庫子文件夾。
重新啟動IDE。
E22
| 銷號 | 引腳項目 | 引腳方向 | 引腳應用 |
|---|---|---|---|
| 1 | M0 | 輸入(弱上拉) | 與M1一起工作並確定四種操作模式。不允許進行浮動,可以接地。 |
| 2 | M1 | 輸入(弱上拉) | 與M0一起工作並確定四種操作模式。不允許進行浮動,可以接地。 |
| 3 | rxd | 輸入 | TTL UART輸入,連接到外部(MCU,PC)TXD Outputpin。可以配置為開放式或上拉輸入。 |
| 4 | TXD | 輸出 | TTL UART輸出,連接到外部RXD(MCU,PC)輸入。可以將其配置為開放式或推力輸出 |
5 | 輔助 | 輸出 | per nifeare lo stato di funzionamento del modulo e riattivare l'mcu esterno。 Durante la Pssoceura di Inizializzazione di Autocontrollo,Il Pin Emette una bassa tensione。 puòEssereconformato uscita optrain o輸出pusp-pult-push-pull(dento non metterlo a terra,ma se hai Qualidei,ad esempio ti si freeze iL dispositivod preaveibile mettere una una una una insistenza restistenza restistenza di restistenza di restistenza di restistenza di da 4.7klio collegarlo collegarlo collegarlo collegarlo al depositivo)。 |
| 6 | VCC | 電源2.3V〜5.5V DC | |
| 7 | gnd | 地面 |
如您所見,您可以通過M0和M1引腳設置各種模式。
| 模式 | M1 | M0 | 解釋 |
|---|---|---|---|
| 普通的 | 0 | 0 | UART和無線通道是開放的,透明的傳輸正在打開(通過Special Command在空中支撐配置) |
| 最差模式 | 0 | 1 | 可以定義為較差的發射器和較差的接收器 |
| 配置模式 | 1 | 0 | 用戶可以通過串行端口訪問寄存器以控制模塊的工作狀態 |
| 深度睡眠模式 | 1 | 1 | 睡眠模式 |
如您所見,有一些可以以靜態方式使用的引腳,但是如果您將其連接到庫中獲得的庫,並且可以通過軟件控制所有模式,但是接下來我們將更好地解釋。
正如我已經說的那樣,將所有引腳連接到微控制器的輸出並不重要,您可以將M0和M1引腳放在高或低的位置以獲得應有的配置,如果您不連接AUX,則庫設置了合理的延遲,以確保操作完成。
當傳輸時,數據可用於喚醒外部MCU並返回數據傳輸飾面。
Lora E22輔助引腳在傳輸上
當接收輔助時,緩衝區為空時返回高。
Lora E22輔助引腳接收
它也用於自我檢查以恢復正常操作(在電源和睡眠/程序模式下)。
lora e22 aux pin on自我檢查
ESP8266連接架構更簡單,因為它在邏輯通信(3.3V)的相同電壓下工作。
Lora E22 TTL 100 WEMOS D1完全連接
重要的是添加上拉電阻(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個序列。
EBYTE LORA E22設備ESP32開發套件V1麵包板完全連接
| E22 | ESP32 |
|---|---|
| M0 | D21 |
| M1 | D19 |
| TX | 引腳RX2(上拉4,7kΩ) |
| Rx | 引腳TX3(上拉4,7kΩ) |
| 輔助 | 引腳D18(上拉4,7kΩ) |
| VCC | 5V(但在3.3V中使用較少的功率) |
| gnd | gnd |
Arduino工作電壓為5V,因此我們需要在LORA模塊的Rx PIN M0和M1上添加一個電壓分隔器,以防止損壞,您可以在此處獲得更多信息電壓分隔器:計算器和應用。
您可以使用信號的2KOHM電阻對GND和1KOHM使用,而不是放在RX上。
Lora E22 TTL 100 Arduino完全連接
| M0 | 7(電壓分隔器) |
| M1 | 6(電壓分隔器) |
| TX | 引腳2(上拉4,7kΩ) |
| Rx | 引腳3(上拉4,7kΩ和電壓分隔器) |
| 輔助 | 引腳5(上拉4,7kΩ) |
| VCC | 5V |
| gnd | gnd |
我製作了一組眾多的構造函數,因為我們可以有更多的選擇和情況來管理。
LoRa_E22 (byte rxPin, byte txPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (byte rxPin, byte txPin, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (byte rxPin, byte txPin, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);第一組構造函數是為將串行和其他引腳的管理委派給庫。
txE22pin和rxE22pin是連接到UART的引腳,它們是強制性的。auxPin是一個銷釘,可以檢查操作,傳輸和接收狀態(我們接下來要更好地解釋),該引腳不是強制性的,如果您不設置它,我會應用延遲以允許操作來完成(延遲,我遇到麻煩,例如凍結設備,您必須將上拉4.7k電阻或更好地連接到設備上)。m0pin和m1Pin是更改操作模式的引腳(請參閱表鞋面),我認為“生產”中的引腳將直接連接高或低,但是對於測試而言,它們可以由庫進行管理。bpsRate是軟件的布料,通常為9600(程序明/睡眠模式中的唯一波特率)一個簡單的例子是
# include " LoRa_E22.h "
LoRa_E22 e22ttl100 ( 2 , 3 ); // RX, TX
// LoRa_E22 e22ttl100(2, 3, 5, 6, 7); // RX, TX我們可以直接與另一個構造函數一起使用軟件
LoRa_E22 (HardwareSerial* serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (HardwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (HardwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);該構造函數的示例鞋面可以像這樣做。
# include < SoftwareSerial.h >
# include " LoRa_E22.h "
SoftwareSerial mySerial ( 2 , 3 ); // RX, TX
LoRa_E22 e22ttl100 (mySerial);
// LoRa_E22 e22ttl100(&mySerial, 5, 7, 6);最後一組構造函數是允許使用硬件而不是軟件。
LoRa_E22 (SoftwareSerial* serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (SoftwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E22 (SoftwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);開始命令用於以輸入和輸出模式啟動串行和引腳。
void begin ();在執行中
// Startup all pins and UART
e22ttl100.begin();有一組用於管理配置並獲取設備信息的方法。
ResponseStructContainer getConfiguration ();
ResponseStatus setConfiguration (Configuration configuration, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
ResponseStructContainer getModuleInformation ();
void printParameters ( struct Configuration configuration);為了簡化響應的管理,我非常有用地創建一組容器,以管理錯誤並返回通用數據。
這是一個狀態容器,具有2個簡單的入口點,因此,您可以獲取狀態代碼和狀態代碼的描述
Serial.println(c.getResponseDescription()); // Description of code
Serial.println(c.code); // 1 if Success代碼是
E22_SUCCESS = 1 ,
ERR_E22_UNKNOWN,
ERR_E22_NOT_SUPPORT,
ERR_E22_NOT_IMPLEMENT,
ERR_E22_NOT_INITIAL,
ERR_E22_INVALID_PARAM,
ERR_E22_DATA_SIZE_NOT_MATCH,
ERR_E22_BUF_TOO_SMALL,
ERR_E22_TIMEOUT,
ERR_E22_HARDWARE,
ERR_E22_HEAD_NOT_RECOGNIZED創建此容器以管理字符串響應並具有2個入口點。
帶有從消息和status返回的字符串的data是RepsonseStatus的實例。
ResponseContainer rs = e22ttl.receiveMessage();
String message = rs.data;
Serial.println(rs.status.getResponseDescription());
Serial.println(message);這是一個較“複雜的”容器,我用它來管理結構,它具有相同的響應範圍內點,但數據是管理複雜結構的空隙指針。
ResponseStructContainer c;
c = e22ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);
c.close();第一種方法是GetConfiguration,您可以使用它來檢索設備上存儲的所有數據。
ResponseStructContainer getConfiguration ();這裡是一個用法示例。
ResponseStructContainer c;
c = e22ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) c.data;
Serial.println(c.status.getResponseDescription());
Serial.println(c.status.code);
Serial.println(configuration.SPED.getUARTBaudRate());
c.close();配置結構具有所有設置數據,我添加了一系列功能以獲取單個數據的所有描述。
configuration.ADDL = 0x03 ; // First part of address
configuration.ADDH = 0x00 ; // Second part
configuration.NETID = 0x00 ; // NETID used for repeater function
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_240_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; // Transmission type
configuration.TRANSMISSION_MODE.enableRepeater = REPEATER_DISABLED; // Enable repeater mode
configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED; // Check interference
configuration.TRANSMISSION_MODE.WORTransceiverControl = WOR_RECEIVER; // Enable WOR mode
configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011; // WOR timing您具有等效函數以獲取所有描述:
DEBUG_PRINT (F( " HEAD : " )); DEBUG_PRINT(configuration.COMMAND, HEX);DEBUG_PRINT( " " );DEBUG_PRINT(configuration.STARTING_ADDRESS, HEX);DEBUG_PRINT( " " );DEBUG_PRINTLN(configuration.LENGHT, HEX);
DEBUG_PRINTLN (F( " " ));
DEBUG_PRINT (F( " AddH : " )); DEBUG_PRINTLN(configuration.ADDH, HEX);
DEBUG_PRINT (F( " AddL : " )); DEBUG_PRINTLN(configuration.ADDL, HEX);
DEBUG_PRINT (F( " NetID : " )); DEBUG_PRINTLN(configuration.NETID, HEX);
DEBUG_PRINTLN (F( " " ));
DEBUG_PRINT (F( " Chan : " )); DEBUG_PRINT(configuration.CHAN, DEC); DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.getChannelDescription());
DEBUG_PRINTLN (F( " " ));
DEBUG_PRINT (F( " SpeedParityBit : " )); DEBUG_PRINT(configuration.SPED.uartParity, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.SPED.getUARTParityDescription());
DEBUG_PRINT (F( " SpeedUARTDatte : " )); DEBUG_PRINT(configuration.SPED.uartBaudRate, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.SPED.getUARTBaudRateDescription());
DEBUG_PRINT (F( " SpeedAirDataRate : " )); DEBUG_PRINT(configuration.SPED.airDataRate, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.SPED.getAirDataRateDescription());
DEBUG_PRINTLN (F( " " ));
DEBUG_PRINT (F( " OptionSubPacketSett: " )); DEBUG_PRINT(configuration.OPTION.subPacketSetting, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.OPTION.getSubPacketSetting());
DEBUG_PRINT (F( " OptionTranPower : " )); DEBUG_PRINT(configuration.OPTION.transmissionPower, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.OPTION.getTransmissionPowerDescription());
DEBUG_PRINT (F( " OptionRSSIAmbientNo: " )); DEBUG_PRINT(configuration.OPTION.RSSIAmbientNoise, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.OPTION.getRSSIAmbientNoiseEnable());
DEBUG_PRINTLN (F( " " ));
DEBUG_PRINT (F( " TransModeWORPeriod : " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.WORPeriod, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getWORPeriodByParamsDescription());
DEBUG_PRINT (F( " TransModeTransContr: " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.WORTransceiverControl, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getWORTransceiverControlDescription());
DEBUG_PRINT (F( " TransModeEnableLBT : " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.enableLBT, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getLBTEnableByteDescription());
DEBUG_PRINT (F( " TransModeEnableRSSI: " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.enableRSSI, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getRSSIEnableByteDescription());
DEBUG_PRINT (F( " TransModeEnabRepeat: " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.enableRepeater, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getRepeaterModeEnableByteDescription());
DEBUG_PRINT (F( " TransModeFixedTrans: " )); DEBUG_PRINT(configuration.TRANSMISSION_MODE.fixedTransmission, BIN);DEBUG_PRINT( " -> " ); DEBUG_PRINTLN(configuration.TRANSMISSION_MODE.getFixedTransmissionDescription());同樣,setConfiguration需要配置條紋,因此我認為管理配置的更好方法是檢索當前的配置,應用您所需的唯一更改並再次設置它。
ResponseStatus setConfiguration (Configuration configuration, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE); configuration是引人注目的Previsiouly顯示,如果僅在當前會話中更改變為永久性, saveType可以允許您選擇Choiche。
ResponseStructContainer c;
c = e32ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) 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.NETID = 0x00 ; // NETID used for repeater function
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_240_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; // Transmission type
configuration.TRANSMISSION_MODE.enableRepeater = REPEATER_DISABLED; // Enable repeater mode
configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED; // Check interference
configuration.TRANSMISSION_MODE.WORTransceiverControl = WOR_RECEIVER; // Enable WOR mode
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-ffh |
| addl | 模塊的低地址字節(默認00H) | 00h-ffh |
| 加油 | 有關數據速率平價位和空氣數據速率的信息 | |
| 陳 | 通信頻道(410m + Chan(1M),默認17H(433MHz),僅適用於433MHz設備CHEK在下面檢查設備的正確頻率 | 00H-1FH |
| 選項 | 傳輸類型,數據包大小,允許特殊消息 | |
| 傳輸_mode | 許多指定傳輸方式的參數 |
選項
傳輸類型,上拉設置,喚醒時間,FEC,傳輸功率
UART Parity位: UART模式在交流方之間可能有所不同
| 4 | 3 | UART均等位 | 恆定值 |
| 0 | 0 | 8N1(默認) | MODE_00_8N1 |
| 0 | 1 | 8o1 | 模式_01_8O1 |
| 1 | 0 | 8 E1 | MODE_10_8E1 |
| 1 | 1 | 8N1(等於00) | 模式_11_8N1 |
UART BAUD率:UART BAUD率在交流方之間可能有所不同,UART BAUD率與無線傳輸參數無關,並且不會影響無線傳輸 /接收功能。
| 7 | 6 | 5 | TTL UART BAUD率(BPS) | 恆定值 |
| 0 | 0 | 0 | 1200 | UART_BPS_1200 |
| 0 | 0 | 1 | 2400 | UART_BPS_2400 |
| 0 | 1 | 0 | 4800 | UART_BPS_4800 |
| 0 | 1 | 1 | 9600(默認) | UART_BPS_9600 |
| 1 | 0 | 0 | 19200年 | UART_BPS_19200 |
| 1 | 0 | 1 | 38400 | UART_BPS_38400 |
| 1 | 1 | 0 | 57600 | UART_BPS_57600 |
| 1 | 1 | 1 | 115200 | UART_BPS_115200 |
空氣數據速率:空氣數據速率越低,傳輸距離的時間越長,反干擾性能的時間越長,並且較長的傳輸時間,空氣數據速率必須保持相同的通信方。
| 2 | 1 | 0 | 空氣數據率(bps) | 恆定值 |
| 0 | 0 | 0 | 0.3K | air_data_rate_000_03 |
| 0 | 0 | 1 | 1.2k | air_data_rate_001_12 |
| 0 | 1 | 0 | 2.4k(默認) | air_data_rate_010_24 |
| 0 | 1 | 1 | 4.8K | air_data_rate_011_48 |
| 1 | 0 | 0 | 9.6k | air_data_rate_100_96 |
| 1 | 0 | 1 | 19.2k | air_data_rate_101_192 |
| 1 | 1 | 0 | 38.4k | air_data_rate_110_384 |
| 1 | 1 | 1 | 62.5k | air_data_rate_111_625 |
####子數據包設置
這是數據包的最大lenght。
當數據小於子數據包長度時,接收端的串行輸出是不間斷的連續輸出。當數據大於子數據包長度時,接收端串行端口將輸出子數據包。
| 7 | 6 | 數據包大小 | 恆定值 |
| 0 | 0 | 240 bytes(默認) | SPS_240_00 |
| 0 | 1 | 128比特 | SPS_128_01 |
| 1 | 0 | 64比特 | SPS_064_10 |
| 1 | 1 | 32比特 | SPS_032_11 |
#### RSSI環境噪聲啟用
此命令可以啟用/禁用RSSI的管理類型,重要的是要管理遠程配置,請注意消息中的RSSI參數。
啟用後,可以以發送模式或Wor Transmitting模式發送C0 C1 C2 C3命令以讀取寄存器。寄存器0x00:當前環境噪聲RSSI寄存器0x01:上次收到數據時。
| 5 | RSSI環境噪聲啟用 | 恆定值 |
| 0 | 使能夠 | rssi_ambient_noise_enabled |
| 1 | 禁用(默認) | rssi_ambient_noise_disabled |
####傳輸功率
您可以通過應用這樣的定義來更改這組常數:
# define E22_22 // default value without set
# define E22_30您可以使用此定義配置通道頻率OLSO:
// One of
# define FREQUENCY_433
# define FREQUENCY_170
# define FREQUENCY_470
# define FREQUENCY_868
# define FREQUENCY_915####啟用RSSI
啟用後,該模塊會接收無線數據,並且它將遵循輸出後通過串行端口TXD的RSSI強度字節
####傳輸類型
傳輸模式:在固定傳輸模式下,每個用戶數據框架的前三個字節可用作高/低地址和頻道。傳輸時該模塊更改其地址和通道。完成該過程後,它將恢復為原始設置。
####啟用中繼器功能
####傳輸前監視數據
啟用後,將在傳輸之前監視無線數據,這可以在一定程度上避免干擾,但可能會導致數據延遲。
#### wor
Wor Transmitter:接收和發送功能的模塊已打開,並在傳輸數據時添加喚醒代碼。接收已打開。
Wor接收器:該模塊無法在WOR監視模式下傳輸數據並運行。監視期如下(最差週期),可以節省大量功率。
####最差週期
如果WOR正在傳輸:在WOR接收器接收到無線數據並通過串行端口輸出後,它將等待1000ms,然後再進入WOR。用戶可以輸入串行端口數據並在此期間通過無線返回。每個串行字節將刷新1000ms。用戶必須在1000ms內傳輸第一個字節。
首先,我們必須介紹一種簡單但有用的方法來檢查接收緩衝區中是否有東西
int available ();這只是返回當前流中有多少個字節。
正常/透明傳輸模式用於將消息發送到具有相同地址和頻道的所有設備。
Lora E22傳輸方案,行是通道
發送/接收消息有很多方法,我們將詳細解釋:
ResponseStatus sendMessage ( const String message);ResponseContainer receiveMessage ();第一個方法是sendmessage,用於以正常模式將字符串發送到設備。
ResponseStatus rs = e22ttl.sendMessage( " Prova " );
Serial.println(rs.getResponseDescription());另一個設備只需在循環上執行
if (e22ttl.available() > 1 ){
ResponseContainer rs = e22ttl. receiveMessage ();
String message = rs. data ;` ` // First ever get the data
Serial. println (rs. status . getResponseDescription ());
Serial. println (message);
}如果要發送複雜的構造,可以使用此方法
ResponseStatus sendMessage ( const void *message, const uint8_t size);
ResponseStructContainer receiveMessage ( const uint8_t size);例如,它用於發送誘變,例如:
struct Messaggione {
char type[ 5 ];
char message[ 8 ];
bool mitico;
};
struct Messaggione messaggione = { " TEMP " , " Peple " , true };
ResponseStatus rs = e22ttl.sendMessage(&messaggione, sizeof (Messaggione));
Serial.println(rs.getResponseDescription());另一方面,您可以收到消息
ResponseStructContainer rsc = e22ttl.receiveMessage( sizeof (Messaggione));
struct Messaggione messaggione = *(Messaggione*) rsc.data;
Serial.println(messaggione.message);
Serial.println(messaggione.mitico);如果您想閱讀消息的第一部分以管理更多類型的Strucutre,則可以使用此方法。
ResponseContainer receiveInitialMessage ( const uint8_t size);我創建它以接收帶有類型或其他類型的字符串以識別加載的構成。
struct Messaggione { // Partial strucutre without type
char message[ 8 ];
bool mitico;
};
char type[ 5 ]; // first part of structure
ResponseContainer rs = e22ttl.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 = e22ttl.receiveMessage( sizeof (Messaggione));
struct Messaggione messaggione = *(Messaggione*) rsc.data;我以同樣的方式創建了一組與固定傳輸一起使用的方法
您只需要更改發送方法,因為目標設備無法接收帶有地址和頻道的序言。
因此,對於字符串消息,您
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const String message);
ResponseStatus sendBroadcastFixedMessage (byte CHAN, const String message);對於結構,你有
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const void *message, const uint8_t size);
ResponseStatus sendBroadcastFixedMessage (byte CHAN, const void *message, const uint8_t size );這裡一個簡單的示例
ResponseStatus rs = e22ttl.sendFixedMessage( 0 , 0 , 0x17 , &messaggione, sizeof (Messaggione));
// ResponseStatus rs = e22ttl.sendFixedMessage(0, 0, 0x17, "Ciao");固定傳輸有更多方案
Lora E22傳輸方案,行是通道
如果您發送到特定的設備(第二種情況固定傳輸),則必須添加addl,addh和chan才能直接識別它。
ResponseStatus rs = e22ttl.sendFixedMessage( 2 , 2 , 0x17 , " Message to a device " );如果要在指定的頻道中向所有設備發送消息,則可以使用此方法。
ResponseStatus rs = e22ttl.sendBroadcastFixedMessage( 0x17 , " Message to a devices of a channel " );如果您想在網絡中接收所有廣播消息,則必須將ADDH和ADDL與BROADCAST_ADDRESS設置。
ResponseStructContainer c;
c = e22ttl100.getConfiguration();
// It's important get configuration pointer before all other operation
Configuration configuration = *(Configuration*) 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 = e22ttl100.setConfiguration(configuration, WRITE_CFG_PWR_DWN_LOSE);
Serial.println(rs.getResponseDescription());
Serial.println(rs.code);
printParameters (configuration);
c.close();###無線配置
該設備通過sepecial命令支持無線配置,但似乎不起作用,我要求ebyte,但沒有收到響應。
我實現一個命令,該命令以正確的方式發送數據包(用邏輯分析器測試),但似乎不起作用。
順便說一句,首先您會激活RSSI噪聲環境,而不是這樣使用的命令:
Configuration configuration;
configuration.ADDL = 0x13 ;
configuration.ADDH = 0x13 ;
configuration.NETID = 0x00 ;
configuration.CHAN = 23 ;
configuration.SPED.uartBaudRate = UART_BPS_9600;
configuration.SPED.airDataRate = AIR_DATA_RATE_010_24;
configuration.SPED.uartParity = MODE_00_8N1;
configuration.OPTION.subPacketSetting = SPS_240_00;
configuration.OPTION.RSSIAmbientNoise = RSSI_AMBIENT_NOISE_DISABLED;
configuration.OPTION.transmissionPower = POWER_22;
configuration.TRANSMISSION_MODE.enableRSSI = RSSI_DISABLED;
configuration.TRANSMISSION_MODE.fixedTransmission = FT_FIXED_TRANSMISSION;
configuration.TRANSMISSION_MODE.enableRepeater = REPEATER_DISABLED;
configuration.TRANSMISSION_MODE.enableLBT = LBT_DISABLED;
configuration.TRANSMISSION_MODE.WORTransceiverControl = WOR_TRANSMITTER;
configuration.TRANSMISSION_MODE.WORPeriod = WOR_2000_011;現在,您可以使用所有信息來完成您的工作,但是我認為重要的是要展示一些現實的例子以消除所有可能性。
EBYTE LORA E22 ARDUINO,ESP32或ESP8266:設置和基本用法
Ebyte Lora E22 Arduino,ESP32或ESP8266:庫
EBYTE LORA E22 ARDUINO,ESP32或ESP8266:配置
Ebyte Lora E22 Arduino,ESP32或ESP8266:固定傳輸和RSSI
EBYTE LORA E22 ARDUINO,ESP32或ESP8266的設備:節省和發送結構化數據
Ebyte Lora E22 Arduino,ESP32或ESP8266:中繼器模式和遠程設置
Ebyte Lora E22 Arduino,ESP32或ESP8266:Wor Microcontroller和Arduino Shield的設備
Ebyte Lora E22 Arduino,ESP32或ESP8266:Wor Microcontroller和Wemos D1 Shield的設備
Ebyte Lora E22 Arduino,ESP32或ESP8266:Wor Microcontroller和ESP32 DEV V1 Shield的設備