

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的设备