

https://downloads.arduino.cc/libraries/logs/github.com/xreef/ebyte_lora_e22_series_library/
Sie können die PCB hier bestellen
Anweisungs- und Montagevideo auf 6 Teil des Leitfadens
Sie können die PCB hier bestellen
Anweisungs- und Montagevideo auf 6 Teil des Leitfadens
Ich erstelle eine Bibliothek, um die E22 -Serie von LORA -Geräten, sehr leistungsstarke, einfache und billige Geräte zu verwalten.
LORA- oder Langstrecken -Wireless -Data -Telemetrie ist eine von Semtech pionierende Technologie, die mit einer niedrigeren Frequenz als NRF24L01 (433 MHz, 868 MHz oder 916 MHz erneut 2,4 GHz für den Nrf24L01) arbeitet, aber mit drei Jahren (von 4000 m) (von 4000 m bis 10000m).
Lora E22
Hier finden Sie Aliexpress (433 MHz 4 km) - Aliexpress (433 MHz 10 km)
Bitte beachten Sie meinen Artikel, um ein aktualisiertes Schema zu erhalten
Hier finden Sie meine Bibliothek.
Zum Herunterladen.
Klicken Sie in der oberen rechten Ecke auf die Schaltfläche Downloads und benennen Sie den unkomprimierten Ordner Lora_E22 um.
Überprüfen Sie, ob der Ordner lora_e22 lora_e22.cpp und lora_e22.h enthält.
Platzieren Sie den Ordner Lora_E22 Bibliothek / Bibliotheken / Ordner.
Möglicherweise müssen Sie den Unterordner der Bibliotheken erstellen, wenn es sich um Ihre erste Bibliothek handelt.
Starten Sie die Ide neu.
E22
| Pin -Nr. | PIN Item | Stiftrichtung | PIN -Anwendung |
|---|---|---|---|
| 1 | M0 | Eingabe (schwacher Pull-up) | Arbeiten Sie mit M1 zusammen und entscheiden Sie die vier Betriebsmodi. Floßen ist nicht erlaubt, kann gemahlen werden. |
| 2 | M1 | Eingabe (schwacher Pull-up) | Arbeiten Sie mit M0 und entscheiden Sie die vier Betriebsmodi. Floßen ist nicht erlaubt, kann gemahlen werden. |
| 3 | Rxd | Eingang | TTL UART -Eingänge stellt eine Verbindung zu externen (MCU, PC) TXD OutputPin her. Kann als Open-Drain- oder Pull-up-Eingang konfiguriert werden. |
| 4 | Txd | Ausgabe | TTL UART -Ausgänge stellt eine Verbindung zu externen RXD (MCU, PC) InputPin her. Kann als Open-Drain- oder Push-Pull-Ausgang konfiguriert werden |
5 | Aux | Ausgabe | Per Indicare lo stato di funzionamento del modulo e riattivare l'cu esterno. Durante la procedura di Inizializzazione di Autocontrollo, il Pin Emette una bassa spannungen. Può Esseer Configurato Come USCita Open-Drain O Output Push-Pull (è Zustimmung nicht metterlo a terra, ma se hai problemi, ad Esempio ti si freeze il dispositivo è bevorzugung mettere una restistenza di pull-up da 4.7ko meglio meglio meglio mesgarlo al dispositivo). |
| 6 | VCC | Stromversorgung 2,3 V ~ 5,5 V DC | |
| 7 | GND | Boden |
Wie Sie sehen, können Sie verschiedene Modi über M0- und M1 -Stifte festlegen.
| Modus | M1 | M0 | Erläuterung |
|---|---|---|---|
| Normal | 0 | 0 | UART und drahtloser Kanal sind geöffnet, transparentes Getriebe ist eingeschaltet (unterstützt die Konfiguration über Luft über Sonderbefehl). |
| Schlimmer Modus | 0 | 1 | Kann als schlimmer Sender und schlechtes Empfänger definiert werden |
| Konfigurationsmodus | 1 | 0 | Benutzer können über den seriellen Port auf das Register zugreifen, um den Arbeitszustand des Moduls zu steuern |
| Tiefschläfungsmodus | 1 | 1 | Schlafmodus |
Wie Sie sehen, gibt es einige Stifte, die auf statische Weise verwendet werden können. Wenn Sie sie jedoch mit der Bibliothek verbinden, erhalten Sie Leistung und Sie können den gesamten Modus über Software steuern, aber wir werden als nächstes besser erklären.
Wie ich bereits sage, ist es nicht wichtig, den gesamten Pin mit dem Ausgang von Mikrocontroller zu verbinden, können Sie M0- und M1 -Stifte auf hoch oder niedrig einsetzen, um eine entheilende Konfiguration zu erhalten. Wenn Sie Aux nicht verbinden, setzen Sie die Bibliothek eine angemessene Verzögerung, um sicherzustellen, dass der Vorgang vollständig ist .
Bei der Übertragung von Daten können zum Aufwachen der externen MCU und zum hohen Datenübertragungsverlauf verwendet werden.
Lora E22 -Aux -Pin beim Getriebe
Wenn der Aux niedrig wird und hoch wird, wenn der Puffer leer ist.
Lora E22 Aux Pin auf dem Empfang
Es wird auch für die Selbstprüfung verwendet, um den normalen Betrieb wiederherzustellen (im Power-On- und Schlaf-/Programmmodus).
Lora E22 Aux Pin auf Selbstprüfung
ESP8266 -Verbindungsschema ist einfacher, da es bei derselben Spannung logischer Kommunikation (3.3 V) funktioniert.
Lora E22 TTL 100 WEMOS D1 Vollständig verbunden
Es ist wichtig, Pull-up-Widerstand (4,7kohm) hinzuzufügen, um eine gute Stabilität zu erhalten.
| E22 | ESP8266 |
|---|---|
| M0 | D7 |
| M1 | D6 |
| Tx | Pin D2 (Pullup 4,7k Ω) |
| Rx | Pin D3 (Pullup 4,7k Ω) |
| Aux | Pin D5 (Pullup 4,7k Ω) |
| VCC | 5 V (aber mit weniger Leistung in 3,3 V arbeiten) |
| GND | GND |
Ähnliches Verbindungsschema für ESP32, aber für RX und TX verwenden wir RX2 und TX2, da ESP32 standardmäßig keinen Software -Sachwareserien hat, sondern 3 seriell.
EBYTE LORA E22 Gerät ESP32 Dev Kit V1 Breadboard Volle Verbindung
| E22 | ESP32 |
|---|---|
| M0 | D21 |
| M1 | D19 |
| Tx | Pin RX2 (Pullup 4,7k Ω) |
| Rx | Pin TX3 (Pullup 4,7k Ω) |
| Aux | Pin D18 (Pullup 4,7k Ω) |
| VCC | 5 V (aber mit weniger Leistung in 3,3 V arbeiten) |
| GND | GND |
Die Arduino -Arbeitsspannung beträgt 5 V. Daher müssen wir einen Spannungsteiler auf Rx Pin M0 und M1 des LORA -Moduls hinzufügen, um Schäden zu vermeiden. Weitere Informationen finden Sie hier Spannungsteiler: Taschenrechner und Anwendung.
Sie können einen 2KOHM -Widerstand gegen GND und 1KOHM vom Signal verwenden als auf RX zusammengestellt.
Lora E22 TTL 100 Arduino vollständig verbunden
| M0 | 7 (Spannungsteiler) |
| M1 | 6 (Spannungsteiler) |
| Tx | Pin 2 (Pullup 4,7k Ω) |
| Rx | Pin 3 (Pullup 4,7kΩ & Spannungsteiler) |
| Aux | Pin 5 (Pullup 4,7k Ω) |
| VCC | 5v |
| GND | GND |
Ich habe eine Reihe ziemlich zahlreicher Konstruktoren gemacht, weil wir mehr Optionen und Situationen zu verwalten haben können.
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);Der erste Satz von Konstruktoren wird erstellt, um die Verwaltung von Serien- und anderen Stiften in die Bibliothek zu delegieren.
txE22pin und rxE22pin sind der Stift für die Verbindung zu UART und sie sind obligatorisch .auxPin ist ein PIN, der den Betrieb, die Übertragung und den Empfangsstatus überprüft (wir werden als nächstes besser erklären). Diese Pin ist nicht obligatorisch . Wenn Sie es nicht einstellen, wende ich eine Verzögerung an, damit sich der Vorgang selbst abschließen kann (mit einer Latenz, in der Sie Probleme haben, wie Freeze-Gerät, Sie müssen einen Pull-up-4.7K-Widerstand oder besser an das Gerät anschließen ).m0pin und m1Pin sind die Stifte, um den Betriebsmodus zu ändern (siehe Tabelle obere). Ich denke , diese Stifte in der „Produktion“ werden direkt hoch oder niedrig angeschlossen . Für den Test werden sie jedoch sinnvoll von der Bibliothek verwaltet.bpsRate ist die Boudrate von Softwareerial Normalerweise beträgt 9600 (die einzige Baud -Rate im Programm-/Schlafmodus)Ein einfaches Beispiel ist
# include " LoRa_E22.h "
LoRa_E22 e22ttl100 ( 2 , 3 ); // RX, TX
// LoRa_E22 e22ttl100(2, 3, 5, 6, 7); // RX, TXWir können direkt einen Softwareer mit einem anderen Konstruktor verwenden
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);Das Beispielobere mit diesem Konstruktor kann das tun.
# include < SoftwareSerial.h >
# include " LoRa_E22.h "
SoftwareSerial mySerial ( 2 , 3 ); // RX, TX
LoRa_E22 e22ttl100 (mySerial);
// LoRa_E22 e22ttl100(&mySerial, 5, 7, 6);Der letzte Satz von Konstruktoren besteht darin, eine Hardträsterung anstelle von Softwareerial zu ermöglichen.
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);Mit dem Befehl mit Beginn wird der Serien- und Stifte im Eingangs- und Ausgangsmodus gestartet.
void begin ();in der Ausführung ist
// Startup all pins and UART
e22ttl100.begin();Es gibt eine Reihe von Methoden zum Verwalten der Konfiguration und erhalten Sie Informationen über das Gerät.
ResponseStructContainer getConfiguration ();
ResponseStatus setConfiguration (Configuration configuration, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE);
ResponseStructContainer getModuleInformation ();
void printParameters ( struct Configuration configuration);Um das Verwalten der Antwort zu vereinfachen, erstelle ich einen Containersatz, für mich sehr sinnvoll, um Fehler zu verwalten und generische Daten zurückzugeben.
Dies ist ein Statuscontainer und verfügt über 2 einfache Einstiegspunkte.
Serial.println(c.getResponseDescription()); // Description of code
Serial.println(c.code); // 1 if SuccessDer Code ist
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_RECOGNIZEDDieser Container wird erstellt, um die String -Antwort zu verwalten und 2 Einstiegspunkte zu haben.
data mit der Zeichenfolge, die von der Nachricht und status zurückgegeben wurde, eine Instanz von RepsonseStatus .
ResponseContainer rs = e22ttl.receiveMessage();
String message = rs.data;
Serial.println(rs.status.getResponseDescription());
Serial.println(message);Dies ist der „komplexere“ Container. Ich verwende dies, um die Struktur zu verwalten. Es verfügt über den gleichen Einstiegspunkt wie ResponseContainer, aber Daten sind ein voides Zeiger, um die komplexe Struktur zu verwalten.
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();Die erste Methode ist GetConfiguration. Sie können sie verwenden, um alle auf dem Gerät gespeicherten Daten zurückzuziehen.
ResponseStructContainer getConfiguration ();Hier ein Nutzungsbeispiel.
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();Die Konfigurationsstruktur hat alle Daten von Einstellungen, und ich füge eine Funktionsreihe hinzu, um alle Beschreibung einzelner Daten zu erhalten.
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 timingSie haben die äquivalente Funktion, um alle Beschreibung zu erhalten:
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());Die SetConfiguration wünschen Sie sich auf die gleiche Weise eine Konfigurationsstrucutre. Ich denke, der bessere Weg, die Konfiguration zu verwalten, besteht darin, den aktuellen Abruf abzurufen, die einzige Änderung anzuwenden, die Sie benötigen, und erneut einstellen.
ResponseStatus setConfiguration (Configuration configuration, PROGRAM_COMMAND saveType = WRITE_CFG_PWR_DWN_LOSE); configuration ist die Strucutre Previsiouly -Show, saveType erlaubt Ihnen die Charton, wenn die Änderung nur für die aktuelle Sitzung dauerhaft wird.
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()Der Parameter wurde alle als konstant verwaltet:
| Addh | Hochadresse Byte des Moduls (der Standard 00H) | 00H-FFH |
| Addl | Niedrig Adressbyte des Moduls (Standard 00H) | 00H-FFH |
| Sped | Informationen zu Datenrate Paritätsbit- und Luftdatenrate | |
| Chan | Kommunikationskanal (410 m + Chan*1m), Standard 17H (433 MHz), nur für 433 MHz Gerät chek unten gültig , um die korrekte Frequenz Ihres Geräts zu überprüfen | 00H-1fh |
| OPTION | Art der Übertragung, Paketgröße, eine spezielle Nachricht zulassen | |
| Transmission_Mode | Viele Parameter, die die Übertragungsmodalität angeben |
OPTION
Art der Übertragung, Klimmzüge, Weckzeit, FEC, Übertragungsleistung
UART Parity Bit: Der UART -Modus kann zwischen Kommunikationsparteien unterschiedlich sein
| 4 | 3 | UART Parity Bit | Konstanter Wert |
| 0 | 0 | 8n1 (Standard) | Modus_00_8n1 |
| 0 | 1 | 8o1 | Modus_01_8o1 |
| 1 | 0 | 8 E1 | Modus_10_8e1 |
| 1 | 1 | 8n1 (gleich 00) | Modus_11_8n1 |
UART -Baud -Rate: Die UART -Baudrate kann zwischen Kommunikationsparteien unterschiedlich sein, die UART -Baudrate hat nichts mit drahtlosen Übertragungsparametern zu tun und wirkt sich nicht auf die Merkmale der drahtlosen Übertragung / Empfang aus.
| 7 | 6 | 5 | TTL UART Baud Rate (BPS) | Konstanter Wert |
| 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 (Standard) | 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 |
Luftdatenrate: Je niedriger die Luftdatenrate ist, desto länger muss die Luftdatenrate für beide Kommunikationsparteien dasselbe behalten.
| 2 | 1 | 0 | Luftdatenrate (BPS) | Konstanter Wert |
| 0 | 0 | 0 | 0,3 K. | Air_Data_Rate_000_03 |
| 0 | 0 | 1 | 1,2k | Air_Data_Rate_001_12 |
| 0 | 1 | 0 | 2,4K (Standard) | 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 |
#### Subpaketeinstellung
Dies ist die maximale Lenght des Pakets.
Wenn die Daten kleiner als die Subpaketlänge sind, ist die serielle Ausgabe des Empfangsende eine ununterbrochene kontinuierliche Ausgabe. Wenn die Daten größer als die Subpaketlänge sind, gibt der serielle Anschluss des empfangenen Endes das Subpaket aus.
| 7 | 6 | Paketgröße | Konstanter Wert |
| 0 | 0 | 240Bytes (Standard) | SPS_240_00 |
| 0 | 1 | 128 BYTES | SPS_128_01 |
| 1 | 0 | 64Bytes | SPS_064_10 |
| 1 | 1 | 32Bytes | SPS_032_11 |
#### RSSI Umgebungsgeräusche aktivieren
Dieser Befehl kann den Verwaltungsart von RSSI aktivieren/deaktivieren. Es ist wichtig, die Remote -Konfiguration zu verwalten. Achtung ist nicht der RSSI -Parameter in der Nachricht.
Wenn aktiviert, kann der Befehl c0 c1 c2 c3 im Sendungsmodus oder im schlimmsten Sendungsmodus gesendet werden, um das Register zu lesen. Register 0x00: Aktuelles Umgebungsgeräusch -RSSI -Register 0x01: RSSI, wenn die Daten beim letzten Mal empfangen wurden.
| 5 | RSSI -Umgebungsgeräusche ermöglichen | Konstanter Wert |
| 0 | Aktivieren | Rssi_ambient_noise_enabled |
| 1 | Deaktivieren (Standard) | Rssi_ambient_noise_disabled |
#### Übertragung
Sie können diesen Konstantensatz ändern, indem Sie ein Definie wie SO anwenden:
# define E22_22 // default value without set
# define E22_30Sie können Kanalfrequenz -OLSO mit diesem Define konfigurieren:
// One of
# define FREQUENCY_433
# define FREQUENCY_170
# define FREQUENCY_470
# define FREQUENCY_868
# define FREQUENCY_915#### Aktivieren Sie RSSI
Wenn das Modul aktiviert ist, empfängt das Modul drahtlose Daten und folgt einem RSSI -Festigkeits Byte nach Ausgang über den seriellen Port TXD
#### Übertragentyp
Übertragungsmodus: Im festen Übertragungsmodus können die ersten drei Bytes des Datenrahmens jedes Benutzers als hohe/niedrige Adresse und Kanal verwendet werden. Das Modul ändert seine Adresse und Kanal beim Senden. Und es wird nach Abschluss des Vorgangs zur ursprünglichen Einstellung zurückgeführt.
#### Aktivieren Sie die Repeater -Funktion
#### Überwachen Sie die Daten vor der Übertragung
Wenn es aktiviert ist, werden drahtlose Daten überwacht, bevor sie übertragen werden, was in gewissem Maße Störungen vermeiden kann, jedoch zu einer Datenverzögerung führen kann.
#### Wor
Der schlimmste Sender: Das Empfangs- und Übertragungsfunktionen des Moduls wird eingeschaltet, und bei der Übertragung von Daten wird ein Weckcode hinzugefügt. Empfangen ist eingeschaltet.
WORMEHIVER: Das Modul kann Daten nicht übertragen und arbeitet im schlimmsten Überwachungsmodus. Die Überwachungsfrist ist wie folgt (schlimmer Zyklus), wodurch viel Strom sparen kann.
#### Workzyklus
Wenn Wors übersetzt wird: Nach dem Erhalt des Weltempfängers die drahtlosen Daten erhalten und über den seriellen Anschluss ausgibt, wartet er auf 1000 ms, bevor er erneut in die Schlacht eintritt. Benutzer können die seriellen Portdaten eingeben und sie während dieses Zeitraums über das Wireless zurückgeben. Jedes serielle Byte wird für 1000 ms aktualisiert. Benutzer müssen das erste Byte innerhalb von 1000 ms übertragen.
Zuerst müssen wir eine einfache, aber sinnvoll
int available ();Es ist einfach zurückzugeben, wie viele Bytes Sie im aktuellen Strom haben.
Der normale/transparente Übertragungsmodus wird verwendet, um Nachrichten mit gleicher Adresse und Kanal an alle Geräte zu senden.
Lora E22 -Übertragungsszenarien, Linien sind Kanäle
Es gibt eine Menge Methode zum Senden/Empfangen von Nachrichten. Wir werden ausführlich erklären:
ResponseStatus sendMessage ( const String message);ResponseContainer receiveMessage ();Die erste Methode ist sendMessage und wird verwendet, um eine Zeichenfolge im normalen Modus an ein Gerät zu senden.
ResponseStatus rs = e22ttl.sendMessage( " Prova " );
Serial.println(rs.getResponseDescription());Das andere Gerät macht es einfach auf der Schleife
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);
}Wenn Sie eine komplexe Struktur senden möchten, können Sie diese Methode verwenden
ResponseStatus sendMessage ( const void *message, const uint8_t size);
ResponseStructContainer receiveMessage ( const uint8_t size);Es wird verwendet, um Strucutre zum Beispiel zu senden:
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());und die andere Seite können Sie die Nachricht so erhalten
ResponseStructContainer rsc = e22ttl.receiveMessage( sizeof (Messaggione));
struct Messaggione messaggione = *(Messaggione*) rsc.data;
Serial.println(messaggione.message);
Serial.println(messaggione.mitico);Wenn Sie den ersten Teil der Nachricht lesen möchten, um mehr Strucutre -Art zu verwalten, können Sie diese Methode verwenden.
ResponseContainer receiveInitialMessage ( const uint8_t size);Ich erstelle es, um eine Zeichenfolge mit Typ oder anderen zu empfangen, um die zu ladengesteuerte Struktur zu identifizieren.
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;Auf diese Weise erstelle ich eine Methode, die ich mit fester Übertragung verwendet habe
Sie müssen nur die Sendungsmethode ändern, da das Zielgerät die Präambel nicht mit Adresse und Kanal empfängt.
Also für String -Nachricht haben Sie
ResponseStatus sendFixedMessage (byte ADDL, byte ADDH, byte CHAN, const String message);
ResponseStatus sendBroadcastFixedMessage (byte CHAN, const String message);Und für die Struktur haben Sie
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 );Hier ein einfaches Beispiel
ResponseStatus rs = e22ttl.sendFixedMessage( 0 , 0 , 0x17 , &messaggione, sizeof (Messaggione));
// ResponseStatus rs = e22ttl.sendFixedMessage(0, 0, 0x17, "Ciao");Das feste Übertragung hat mehr Szenarien
Lora E22 -Übertragungsszenarien, Linien sind Kanäle
Wenn Sie an ein bestimmtes Gerät (zweite Szenarien festgelegt) senden, müssen Sie Addl, Addh und Chan hinzufügen, um es direkt zu identifizieren.
ResponseStatus rs = e22ttl.sendFixedMessage( 2 , 2 , 0x17 , " Message to a device " );Wenn Sie in einem angegebenen Kanal eine Nachricht an das gesamte Gerät senden möchten, können Sie diese Methode verwenden.
ResponseStatus rs = e22ttl.sendBroadcastFixedMessage( 0x17 , " Message to a devices of a channel " ); Wenn Sie alle Broadcast -Nachricht im Netzwerk empfangen möchten, müssen Sie Ihr ADDH und ADDL mit BROADCAST_ADDRESS festlegen.
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();### Wireless Konfiguration
Diese Geräte unterstützt die drahtlose Konfiguration mit sepezialem Befehl, scheint aber nicht zu funktionieren, ich bitte zu EBYTE, aber keine Antwort erhalten.
Ich implementiere einen Befehl, der das Paket richtig sende (mit Logikanalizer getestet), scheint aber nicht zu funktionieren.
Übrigens aktivieren Sie zuerst die RSSI -Rauschumgebung, als Sie den Befehl wie SO verwenden können:
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;Jetzt haben Sie alle Informationen, um Ihre Arbeit zu erledigen, aber ich denke, es ist wichtig, einige realistische Beispiele zu zeigen, um die Möglichkeit zu verbessern.
EBYTE LORA E22 -Gerät für Arduino, ESP32 oder ESP8266: Einstellungen und Grundnutzung
EBYTE LORA E22 -Gerät für Arduino, ESP32 oder ESP8266: Bibliothek
EBYTE LORA E22 -Gerät für Arduino, ESP32 oder ESP8266: Konfiguration
EBYTE LORA E22 -Gerät für Arduino, ESP32 oder ESP8266: Festes Getriebe und RSSI
EBYTE LORA E22 -Gerät für Arduino, ESP32 oder ESP8266: Leistungssparen und Senden strukturierter Daten
EBYTE LORA E22 -Gerät für Arduino, ESP32 oder ESP8266: Repeater -Modus und Ferneinstellungen
EBYTE LORA E22 -Gerät für Arduino, ESP32 oder ESP8266: Worm Microcontroller und Arduino Shield
EBYTE LORA E22 -Gerät für Arduino, ESP32 oder ESP8266: Worl Microcontroller und Wemos D1 Shield
EBYTE LORA E22 -Gerät für Arduino, ESP32 oder ESP8266: Wor Microcontroller und ESP32 Dev V1 Shield