

Arduino Uno盾牌
您可以在此处订购PCB
指南的6部分中的指导和集会视频
WEMOS D1盾牌
您可以在此处订购PCB
ESP32盾牌
您可以在此处订购PCB
指南的6部分中的指导和集会视频
我创建了一个库来管理EBYTE E32系列洛拉设备,非常强大,简单且便宜的设备。
Lora E32-TTL-100
您可以在此处找到Aliexpress(3公里设备)Aliexpress(8公里设备)
它们可以在3000m至8000m的距离上工作,并且具有许多功能和参数。
因此,我创建了此库来简化用法。
请参阅我的文章以获取更新的模式
您可以在这里找到我的图书馆。
下载。
单击右上角的下载按钮,重命名未压缩文件夹lora_e32。
检查lora_e32文件夹是否包含lora_e32.cpp和lora_e32.h。
将lora_e32库文件夹放置您的 /库 /文件夹。
如果您的第一个库,则可能需要创建库子文件夹。
重新启动IDE。
E32 TTL 100
您可以在这里购买Aliexpress
| 销号 | 引脚项目 | 引脚方向 | 引脚应用 |
|---|---|---|---|
| 1 | M0 | 输入(弱上拉) | 与M1一起工作并确定四种操作模式。不允许进行浮动,可以接地。 |
| 2 | M1 | 输入(弱上拉) | 与M0一起工作并确定四种操作模式。不允许进行浮动,可以接地。 |
| 3 | rxd | 输入 | TTL UART输入,连接到外部(MCU,PC)TXD Outputpin。可以配置为开放式或上拉输入。 |
| 4 | TXD | 输出 | TTL UART输出,连接到外部RXD(MCU,PC)输入。可以将其配置为开放式或推力输出 |
| 5 | 辅助 | 输出 | 指示模块的工作状态并唤醒外部MCU。在自我检查初始化过程中,PIN输出低水平。可以将其配置为开放式输出ORPUSH-PULL输出(允许浮动)。 |
| 6 | VCC | 电源2.3V〜5.5V DC | |
| 7 | gnd | 地面 | 如您所见,您可以通过M0和M1引脚设置各种模式。 |
| 模式 | M1 | M0 | 解释 |
|---|---|---|---|
| 普通的 | 0 | 0 | UART和无线通道很好 |
| wke | 0 | 1 | 与普通相同,但序列代码被添加到传输数据中以唤醒接收器。 |
| 节能 | 1 | 0 | UART是禁用的,并且无线处于WOR(无线电上的唤醒)模式,这意味着在收到数据时将打开设备。不允许传输。 |
| 睡觉 | 1 | 1 | 用于设置参数。传输和接收残疾。 |
如您所见,有一些可以以静态方式使用的引脚,但是如果您将其连接到库中获得的库,并且可以通过软件控制所有模式,但是接下来我们将更好地解释。
正如我已经说的那样,将所有引脚连接到微控制器的输出并不重要,您可以将M0和M1引脚放在高或低的位置以获得应有的配置,如果您不连接AUX,则库设置了合理的延迟,以确保操作完成。
当传输时,数据可用于唤醒外部MCU并返回数据传输饰面。
Lora E32辅助引脚在传输上
当接收辅助时,缓冲区为空时返回高。
洛拉E32辅助引脚接收
它也用于自我检查以恢复正常操作(在电源和睡眠/程序模式下)。
Lora E32 Aux PIN上的自我检查
ESP8266连接架构更简单,因为它在逻辑通信(3.3V)的相同电压下工作。
Lora E32 TTL 100 WEMOS D1完全连接
重要的是添加上拉电阻(4,7kOhm)以获得良好的稳定性。
| M0 | D7 |
|---|---|
| M1 | D6 |
| Rx | 引脚D2(上拉4,7kΩ) |
| TX | 引脚D3(上拉4,7kΩ) |
| 辅助 | D5(输入) |
| 3.3V | gnd |
Arduino工作电压为5V,因此我们需要在LORA模块的Rx PIN M0和M1上添加一个电压分隔器,以防止损坏,您可以在此处获得更多信息电压分隔器:计算器和应用。
您可以使用信号的2KOHM电阻对GND和1KOHM使用,而不是放在RX上。
Lora E32 TTL 100 Arduino完全连接
| M0 | 7(电压分隔器) |
|---|---|
| M1 | 6(电压分隔器) |
| Rx | 引脚D2(上拉4,7kΩ和电压分隔器) |
| TX | 引脚D3(上拉4,7kΩ) |
| 辅助 | 5(输入) |
| VCC | 3.3V |
| gnd | gnd |
我制作了一组众多的构造函数,因为我们可以有更多的选择和情况来管理。
LoRa_E32 (byte rxPin, byte txPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (byte rxPin, byte txPin, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (byte rxPin, byte txPin, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);第一组构造函数是为将串行和其他引脚的管理委派给库。
rxPin和txPin是连接到UART的引脚,它们是强制性的。
auxPin是一个检查操作,传输和接收状态的引脚(我们接下来要更好地解释),该引脚不是强制性的,如果您不设置它,我会应用延迟以允许操作完成(延迟)。
m0pin和m1Pin是更改操作模式的引脚(请参阅表鞋面),我认为“生产”中的引脚将直接连接高或低,但是对于测试而言,它们可以由库进行管理。
bpsRate是软件的布料,通常为9600(程序明/睡眠模式中的唯一波特率)
一个简单的例子是
# include " LoRa_E32.h "
LoRa_E32 e32ttl100 ( 2 , 3 ); // RX, TX
// LoRa_E32 e32ttl100(2, 3, 5, 6, 7); // RX, TX我们可以直接与另一个构造函数一起使用软件
LoRa_E32 (HardwareSerial* serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (HardwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (HardwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);该构造函数的示例鞋面可以像这样做。
# include < SoftwareSerial.h >
# include " LoRa_E32.h "
SoftwareSerial mySerial ( 2 , 3 ); // RX, TX
LoRa_E32 e32ttl100 (mySerial);
// LoRa_E32 e32ttl100(&mySerial, 5, 7, 6);最后一组构造函数是允许使用硬件而不是软件。
LoRa_E32 (SoftwareSerial* serial, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial* serial, byte auxPin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);
LoRa_E32 (SoftwareSerial* serial, byte auxPin, byte m0Pin, byte m1Pin, UART_BPS_RATE bpsRate = UART_BPS_RATE_9600);开始命令用于以输入和输出模式启动串行和引脚。
void begin ();在执行中
// Startup all pins and UART
e32ttl100.begin();有一组用于管理配置并获取设备信息的方法。
ResponseStructContainer getConfiguration ();
ResponseStatus setConfiguration (Configuration configuration, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
ResponseStructContainer getModuleInformation ();
void printParameters ( struct Configuration configuration);
ResponseStatus resetModule ();为了简化响应的管理,我非常有用地创建一组容器,以管理错误并返回通用数据。
这是一个状态容器,具有2个简单的入口点,因此,您可以获取状态代码和状态代码的描述
Serial.println(c.getResponseDescription()); // Description of code
Serial.println(c.code); // 1 if Success代码是
E32_SUCCESS = 1 ,
ERR_E32_UNKNOWN,
ERR_E32_NOT_SUPPORT,
ERR_E32_NOT_IMPLEMENT,
ERR_E32_NOT_INITIAL,
ERR_E32_INVALID_PARAM,
ERR_E32_DATA_SIZE_NOT_MATCH,
ERR_E32_BUF_TOO_SMALL,
ERR_E32_TIMEOUT,
ERR_E32_HARDWARE,
ERR_E32_HEAD_NOT_RECOGNIZED创建此容器以管理字符串响应并具有2个入口点。
带有从消息和status返回的字符串的data是RepsonseStatus的实例。
ResponseContainer rs = e32ttl.receiveMessage();
String message = rs.data;
Serial.println(rs.status.getResponseDescription());
Serial.println(message);这是一个较“复杂的”容器,我用它来管理结构,它具有相同的响应范围内点,但数据是管理复杂结构的空隙指针。
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);第一种方法是GetConfiguration,您可以使用它来检索设备上存储的所有数据。
ResponseStructContainer getConfiguration ();这里是一个用法示例。
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);
Serial.println(configuration.SPED.getUARTBaudRate());配置结构具有所有设置数据,我添加了一系列功能以获取单个数据的所有描述。
configuration.ADDL = 0x0 ; // First part of address
configuration.ADDH = 0x1 ; // Second part of address
configuration.CHAN = 0x19 ; // Channel
configuration.OPTION.fec = FEC_0_OFF; // Forward error correction switch
configuration.OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION; // Transmission mode
configuration.OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS; // Pull-up management
configuration.OPTION.transmissionPower = POWER_17; // dBm transmission power
configuration.OPTION.wirelessWakeupTime = WAKE_UP_1250; // Wait time for wake up
configuration.SPED.airDataRate = AIR_DATA_RATE_011_48; // Air data rate
configuration.SPED.uartBaudRate = UART_BPS_115200; // Communication baud rate
configuration.SPED.uartParity = MODE_00_8N1; // Parity bit您具有等效函数以获取所有描述:
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.getUARTBaudRate());
Serial.print(F( " SpeedAirDataRate : " )); Serial.print(configuration.SPED.airDataRate, BIN);Serial.print( " -> " ); Serial.println(configuration.SPED.getAirDataRate());
Serial.print(F( " OptionTrans : " )); Serial.print(configuration.OPTION.fixedTransmission, BIN);Serial.print( " -> " ); Serial.println(configuration.OPTION.getFixedTransmissionDescription());
Serial.print(F( " OptionPullup : " )); Serial.print(configuration.OPTION.ioDriveMode, BIN);Serial.print( " -> " ); Serial.println(configuration.OPTION.getIODroveModeDescription());
Serial.print(F( " OptionWakeup : " )); Serial.print(configuration.OPTION.wirelessWakeupTime, BIN);Serial.print( " -> " ); Serial.println(configuration.OPTION.getWirelessWakeUPTimeDescription());
Serial.print(F( " OptionFEC : " )); Serial.print(configuration.OPTION.fec, BIN);Serial.print( " -> " ); Serial.println(configuration.OPTION.getFECDescription());
Serial.print(F( " OptionPower : " )); Serial.print(configuration.OPTION.transmissionPower, BIN);Serial.print( " -> " ); Serial.println(configuration.OPTION.getTransmissionPowerDescription());同样,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 = 0x0 ;
configuration.ADDH = 0x1 ;
configuration.CHAN = 0x19 ;
configuration.OPTION.fec = FEC_0_OFF;
configuration.OPTION.fixedTransmission = FT_TRANSPARENT_TRANSMISSION;
configuration.OPTION.ioDriveMode = IO_D_MODE_PUSH_PULLS_PULL_UPS;
configuration.OPTION.transmissionPower = POWER_17;
configuration.OPTION.wirelessWakeupTime = WAKE_UP_1250;
configuration.SPED.airDataRate = AIR_DATA_RATE_011_48;
configuration.SPED.uartBaudRate = UART_BPS_115200;
configuration.SPED.uartParity = MODE_00_8N1;
// 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);参数全部被视为常数:
| addh | 模块的高地址字节(默认00H) | 00h-ffh |
|---|---|---|
| addl | 模块的低地址字节(默认00H) | 00h-ffh |
| 加油 | 有关数据速率平价位和空气数据速率的信息 | 陈 |
| 通信通道(410m + Chan(1M),默认值17H(433MHz),仅适用于433MHz设备 | 00H-1FH |
|---|
选项
传输类型,上拉设置,唤醒时间,FEC,传输功率
uart parity位:_UART模式在交流方之间可能有所不同
| 7 | 6 | UART Parity位| const值| | --- | --- | --- | --- | --- | | 0 | 0 | 8n1(默认值)| mode_00_8n1 | | 0 | 1 | 8O1 | mode_01_8o1 | | 1 | 0 | 8 e1 | mode_10_8e1 | | 1 | 1 | 8n1(等于00)| mode_11_8n1 |
UART BAUD率:UART BAUD率在交流方之间可能有所不同,UART BAUD率与无线传输参数无关,并且不会影响无线传输 /接收功能。
| 5 | 43 | TTL UART BAUD率(BPS) | 恒定值 |
|---|---|---|---|
| 0 | 0 | 0 | 1200 |
| 0 | 0 | 1 | 2400 |
| 0 | 1 | 0 | 4800 |
| 0 | 1 | 1 | 9600(默认) |
| 1 | 0 | 0 | 19200年 |
| 1 | 0 | 1 | 38400 |
| 1 | 1 | 0 | 57600 |
| 1 | 1 | 1 | 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 | 19.2k(相同于101) | air_data_rate_110_192 |
| 1 | 1 | 1 | 19.2k(相同于101) | air_data_rate_111_192 |
传输模式:在固定传输模式下,每个用户数据框架的前三个字节可用作高/低地址和频道。传输时该模块更改其地址和通道。完成该过程后,它将恢复为原始设置。
| 7 | 固定传输启用位((类似于modbus) | 恒定值 |
|---|---|---|
| 0 | 透明传输模式 | ft_transparent_transmission |
| 1 | 固定传输模式 | ft_fixed_transmission |
IO驱动模式:该位用于模块内部拉动电阻器。在开放排水时,它还增加了水平的适应性。但是在某些情况下,它可能需要外部上拉
电阻。
| 6 | IO驱动模式(默认1) | 恒定值 |
|---|---|---|
| 1 | TXD和AUX推力输出,RXD上拉输入 | io_d_mode_push_pulls_pull_ups |
| 0 | txd,辅助开放式助理输出,RXD开放式收集器输入 | IO_D_MODE_OPEN_COLLECTOR |
无线唤醒时间:传输和接收模块在模式0中工作,其延迟时间无效并且可以是任意值,在模式1中,发射器可以连续发送相应时间的前码代码,当接收器在模式2中工作时,时间表示监视器间隔时间(无线唤醒)。只有在模式1中起作用的发射器的数据才能是
已收到。
| 5 | 4 | 3 | 无线唤醒时间 | 恒定值 |
|---|---|---|---|---|
| 0 | 0 | 0 | 250ms(默认) | wake_up_250 |
| 0 | 0 | 1 | 500ms | wake_up_500 |
| 0 | 1 | 0 | 750ms | wake_up_750 |
| 0 | 1 | 1 | 1000ms | wake_up_1000 |
| 1 | 0 | 0 | 1250ms | wake_up_1250 |
| 1 | 0 | 1 | 1500ms | wake_up_1500 |
| 1 | 1 | 0 | 1750毫秒 | wake_up_1750 |
| 1 | 1 | 1 | 2000ms | wake_up_2000 |
FEC:关闭FEC后,实际数据传输速率会增加,而反干扰能力会降低。同样,传输距离相对较短,双方都必须在相同的页面上保持关于转交或关闭FEC的相同页面。
| 2 | FEC开关 | 恒定值 |
|---|---|---|
| 0 | 关闭FEC | FEC_0_OFF |
| 1 | 打开FEC(默认) | FEC_1_ON |
传输功率
您可以通过应用这样的定义来更改这组常数:
# define E32_TTL_100 // default value without set适用于E32-TTL-100,E32-TTL-100S1,E32-T100S2。
外部电源必须确保当前产出的能力超过250mA,并确保电源涟漪在100mV之内。
由于其低电源,不建议使用低电源
效率。
# define E32_TTL_100 // default value without set| 1 | 0 | 传输功率(近似) | 恒定值 |
|---|---|---|---|
| 0 | 0 | 20DBM(默认) | Power_20 |
| 0 | 1 | 17dBm | Power_17 |
| 1 | 0 | 14dBm | Power_14 |
| 1 | 1 | 10dBm | Power_10 |
适用于E32-TTL-500。
外部电源必须确保当前产出的能力超过700mA,并确保电源波纹在100mV之内。
由于其低电源效率,不建议使用低电源。
# define E32_TTL_500| 1 | 0 | 传输功率(近似) | 恒定值 |
|---|---|---|---|
| 0 | 0 | 27DBM(默认) | Power_27 |
| 0 | 1 | 24dBm | Power_24 |
| 1 | 0 | 21dBm | Power_21 |
| 1 | 1 | 18dbm | Power_18 |
适用于E32-TTL-1W,E32(433T30),E32(868T30),E32(915T30S)
外部功率必须确保当前输出的能力超过1A,并确保电源涟漪在100mV之内。
由于其低电源,不建议使用低电源
效率。
# define E32_TTL_1W| 1 | 0 | 传输功率(近似) | 恒定值 |
|---|---|---|---|
| 0 | 0 | 30DBM(默认) | Power_30 |
| 0 | 1 | 27dBm | Power_27 |
| 1 | 0 | 24dBm | Power_24 |
| 1 | 1 | 21dBm | Power_21 |
您可以使用此定义配置通道频率OLSO:
// One of
# define FREQUENCY_433
# define FREQUENCY_170
# define FREQUENCY_470
# define FREQUENCY_868
# define FREQUENCY_915首先,我们必须介绍一种简单但有用的方法来检查接收缓冲区中是否有东西
int available ();这只是返回当前流中有多少个字节。
正常/透明传输模式用于将消息发送到具有相同地址和频道的所有设备。
Lora E32传输方案,线是频道
发送/接收消息有很多方法,我们将详细解释:
ResponseStatus sendMessage ( const String message);ResponseContainer receiveMessage ();第一个方法是sendmessage,用于以正常模式将字符串发送到设备。
ResponseStatus rs = e32ttl.sendMessage( " Prova " );
Serial.println(rs.getResponseDescription());另一个设备只需在循环上执行
if (e32ttl.available() > 1 ){
ResponseContainer rs = e32ttl. 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 = e32ttl.sendMessage(&messaggione, sizeof (Messaggione));
Serial.println(rs.getResponseDescription());另一方面,您可以收到消息
ResponseStructContainer rsc = e32ttl.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 = e32ttl.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 = e32ttl.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 = e32ttl.sendFixedMessage( 0 , 0 , 0x17 , &messaggione, sizeof (Messaggione));
// ResponseStatus rs = e32ttl.sendFixedMessage(0, 0, 0x17, "Ciao");固定传输有更多方案
Lora E32传输方案,线是频道
如果您发送到特定的设备(第二种情况固定传输),则必须添加addl,addh和chan才能直接识别它。
ResponseStatus rs = e32ttl.sendFixedMessage( 2 , 2 , 0x17 , " Message to a device " );如果要在指定的频道中向所有设备发送消息,则可以使用此方法。
ResponseStatus rs = e32ttl.sendBroadcastFixedMessage( 0x17 , " Message to a devices of a channel " );如果您想在网络中接收所有广播消息,则必须将ADDH和ADDL与BROADCAST_ADDRESS设置。
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 = 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);