

您可以在此处订购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库