

Arduino Uno Shield
Sie können die PCB hier bestellen
Anweisungs- und Montagevideo auf 6 Teil des Leitfadens
Wemos D1 -Schild
Sie können die PCB hier bestellen
ESP32 Schild
Sie können die PCB hier bestellen
Anweisungs- und Montagevideo auf 6 Teil des Leitfadens
Ich erstelle eine Bibliothek, um die EBYTE E32 -Serie von Lora -Geräten, sehr leistungsstark, einfaches und billiges Gerät zu verwalten.
Lora E32-TTL-100
Hier finden Sie Aliexpress (3 -km -Gerät) Aliexpress (8 -km -Gerät)
Sie können über eine Entfernung von 3000 m bis 8000 m arbeiten und haben viele Funktionen und Parameter.
Daher erstelle ich diese Bibliothek, um die Verwendung zu vereinfachen.
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_E32 um.
Überprüfen Sie, ob der Ordner lora_e32 lora_e32.cpp und lora_e32.h enthält.
Platzieren Sie den Ordner lora_e32 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.
E32 TTL 100
Sie können hier Aliexpress kaufen
| 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 | Um den Arbeitsstatus des Moduls anzuzeigen und die externe MCU aufzuwachen. Während des Verfahrens der Selbstprüfungsinitialisierung gibt der Pin niedrig. Kann als Open-Drain-Ausgangsleistung für Orpush-Pull-Ausgang konfiguriert werden (schwimmen ist zulässig). |
| 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 Wireless Channel ist gut zu gehen |
| Wke-up | 0 | 1 | Gleich wie normal, aber ein Präambelcode wird zu übertragenen Daten zum Aufwachen des Empfängers hinzugefügt. |
| Kraftsparende | 1 | 0 | UART ist deaktiviert und drahtlos ist im WOR -Modus (Wake on Radio), was bedeutet, dass das Gerät eingeschaltet wird, wenn Daten empfangen werden. Übertragung ist nicht erlaubt. |
| Schlafen | 1 | 1 | Verwendet beim Einstellen von Parametern. Senden und Empfangen von Behinderungen. |
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 E32 -Aux -Pin beim Getriebe
Wenn der Aux niedrig wird und hoch wird, wenn der Puffer leer ist.
Lora E32 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 E32 Aux Pin auf Selbstprüfung
ESP8266 -Verbindungsschema ist einfacher, da es bei derselben Spannung logischer Kommunikation (3.3 V) funktioniert.
Lora E32 TTL 100 WEMOS D1 Vollständig verbunden
Es ist wichtig, Pull-up-Widerstand (4,7kohm) hinzuzufügen, um eine gute Stabilität zu erhalten.
| M0 | D7 |
|---|---|
| M1 | D6 |
| Rx | Pin D2 (Pullup 4,7k Ω) |
| Tx | Pin D3 (Pullup 4,7k Ω) |
| Aux | D5 (Eingabe) |
| 3.3 V | 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 E32 TTL 100 Arduino vollständig verbunden
| M0 | 7 (Spannungsteiler) |
|---|---|
| M1 | 6 (Spannungsteiler) |
| Rx | Pin D2 (Pullup 4,7kΩ & Spannungsteiler) |
| Tx | Pin D3 (Pullup 4,7k Ω) |
| Aux | 5 (Eingabe) |
| VCC | 3.3 V |
| GND | GND |
Ich habe eine Reihe ziemlich zahlreicher Konstruktoren gemacht, weil wir mehr Optionen und Situationen zu verwalten haben können.
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);Der erste Satz von Konstruktoren wird erstellt, um die Verwaltung von Serien- und anderen Stiften in die Bibliothek zu delegieren.
rxPin und txPin sind der PIN, der sich mit UART verbindet, und sie sind obligatorisch .
auxPin ist ein PIN, der den Vorgang, die Übertragung und den Empfangsstatus überprüft (wir werden als nächstes besser erklären), diese PIN ist nicht obligatorisch . Wenn Sie sie nicht festlegen, wende ich eine Verzögerung an, um die Operation zu ermöglichen, sich selbst (mit Latenz) zu vervollständigen.
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_E32.h "
LoRa_E32 e32ttl100 ( 2 , 3 ); // RX, TX
// LoRa_E32 e32ttl100(2, 3, 5, 6, 7); // RX, TXWir können direkt einen Softwareer mit einem anderen Konstruktor verwenden
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);Das Beispielobere mit diesem Konstruktor kann das tun.
# include < SoftwareSerial.h >
# include " LoRa_E32.h "
SoftwareSerial mySerial ( 2 , 3 ); // RX, TX
LoRa_E32 e32ttl100 (mySerial);
// LoRa_E32 e32ttl100(&mySerial, 5, 7, 6);Der letzte Satz von Konstruktoren besteht darin, eine Hardträsterung anstelle von Softwareerial zu ermöglichen.
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);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
e32ttl100.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);
ResponseStatus resetModule ();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
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_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 = e32ttl.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 = 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);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 = 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());Die Konfigurationsstruktur hat alle Daten von Einstellungen, und ich füge eine Funktionsreihe hinzu, um alle Beschreibung einzelner Daten zu erhalten.
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 bitSie haben die äquivalente Funktion, um alle Beschreibung zu erhalten:
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());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 = 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);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äte gültig | 00H-1fh |
|---|
OPTION
Art der Übertragung, Klimmzüge, Weckzeit, FEC, Übertragungsleistung
UART Parity Bit: Der _uart -Modus kann zwischen Kommunikationsparteien unterschiedlich sein
| 7 | 6 | UART Parity Bit | const Value | | --- | --- | --- | --- | --- | | 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.
| 5 | 43 | TTL UART Baud Rate (BPS) | Konstanter Wert |
|---|---|---|---|
| 0 | 0 | 0 | 1200 |
| 0 | 0 | 1 | 2400 |
| 0 | 1 | 0 | 4800 |
| 0 | 1 | 1 | 9600 (Standard) |
| 1 | 0 | 0 | 19200 |
| 1 | 0 | 1 | 38400 |
| 1 | 1 | 0 | 57600 |
| 1 | 1 | 1 | 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 | 19,2K (gleich bis 101) | Air_Data_Rate_110_192 |
| 1 | 1 | 1 | 19,2K (gleich bis 101) | Air_Data_Rate_111_192 |
Ü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.
| 7 | Fixes Transmission aktiviert Bit (Ähnlich wie Modbus) | Konstanter Wert |
|---|---|---|
| 0 | Transparenter Übertragungsmodus | Ft_transparent_transmission |
| 1 | Behobener Übertragungsmodus | Ft_fixed_transmission |
IO-Antriebsmodus: Dieses Bit wird im internen Pull-Up-MODUL-Widerstand verwendet. Es erhöht auch die Anpassungsfähigkeit des Levels bei offenem Abfluss. In einigen Fällen muss jedoch externe Klimmzüge erforderlich sein
Widerstand.
| 6 | IO -Laufwerksmodus (Standard 1) | Konstanter Wert |
|---|---|---|
| 1 | TXD- und Aux-Push-Pull-Ausgänge, RXD-Pull-up-Eingänge | IO_D_MODE_PUSH_PULLS_PULL_UPS |
| 0 | TXD 、 Aux Open-Collector-Ausgänge, RXD Open-Collector-Eingänge | Io_d_mode_open_collector |
WLAN-Weckzeit: Das Sende- und Empfangsmodul funktioniert im Modus 0, dessen Verzögerungszeit ungültig ist und ein willkürlicher Wert sein kann. Der Sender arbeitet im Modus 1 kann den Präambelcode der entsprechenden Zeit kontinuierlich übertragen, wenn der Empfänger im Modus 2 arbeitet. Nur die Daten des Senders, die im Modus 1 arbeiten
erhalten.
| 5 | 4 | 3 | drahtlose Weckzeit | Konstanter Wert |
|---|---|---|---|---|
| 0 | 0 | 0 | 250 ms (Standard) | WAKE_UP_250 |
| 0 | 0 | 1 | 500 ms | WAKE_UP_500 |
| 0 | 1 | 0 | 750 ms | WAKE_UP_750 |
| 0 | 1 | 1 | 1000 ms | WAKE_UP_1000 |
| 1 | 0 | 0 | 1250 ms | WAKE_UP_1250 |
| 1 | 0 | 1 | 1500 ms | WAKE_UP_1500 |
| 1 | 1 | 0 | 1750 ms | WAKE_UP_1750 |
| 1 | 1 | 1 | 2000 ms | WAKE_UP_2000 |
FEC: Nach dem Ausschalten der FEC steigt die tatsächliche Datenübertragungsrate, während die Anti-Interferenz-Fähigkeit abnimmt. Auch die Übertragungsentfernung ist relativ kurz, beide Kommunikationsparteien müssen auf denselben Seiten über die Ein- oder Ausschalten von FEC auftreten.
| 2 | FEC -Schalter | Konstanter Wert |
|---|---|---|
| 0 | Schalten Sie FEC aus | FEC_0_OFF |
| 1 | FEC einschalten (Standard) | Fec_1_on |
Übertragungskraft
Sie können diesen Konstantensatz ändern, indem Sie ein Definie wie SO anwenden:
# define E32_TTL_100 // default value without set Anwendung für E32-TTL-100, E32-TTL-100S1, E32-T100S2.
Die externe Leistung muss sicherstellen, dass die Fähigkeit der Stromausgabe mehr als 250 mA und die Stromversorgung innerhalb von 100 mV sicherstellen muss.
Aufgrund der geringen Stromversorgung wird keine Übertragung mit geringer Leistung empfohlen
Effizienz.
# define E32_TTL_100 // default value without set| 1 | 0 | Übertragungsleistung (Näherung) | Konstanter Wert |
|---|---|---|---|
| 0 | 0 | 20dbm (Standard) | Power_20 |
| 0 | 1 | 17dbm | Power_17 |
| 1 | 0 | 14dbm | Power_14 |
| 1 | 1 | 10dbm | Power_10 |
Anwendbar für E32-TTL-500。
Die externe Leistung muss sicherstellen, dass die Fähigkeit der Stromausgabe mehr als 700 mA und die Stromversorgung innerhalb von 100 mV sicherstellen muss.
Aufgrund der geringen Stromversorgungseffizienz wird keine geringe Stromversorgung empfohlen.
# define E32_TTL_500| 1 | 0 | Übertragungsleistung (Näherung) | Konstanter Wert |
|---|---|---|---|
| 0 | 0 | 27dbm (Standard) | Power_27 |
| 0 | 1 | 24 dbm | Power_24 |
| 1 | 0 | 21dbm | Power_21 |
| 1 | 1 | 18dbm | Power_18 |
Anwendbar für E32-TTL-1W, E32 (433T30S), E32 (868T30S), E32 (915T30s)
Die externe Leistung muss sicherstellen, dass die Fähigkeit der Stromausgabe mehr als 1a und die Stromversorgung innerhalb von 100 mV sicherstellen muss.
Aufgrund der geringen Stromversorgung wird keine Übertragung mit geringer Leistung empfohlen
Effizienz.
# define E32_TTL_1W| 1 | 0 | Übertragungsleistung (Näherung) | Konstanter Wert |
|---|---|---|---|
| 0 | 0 | 30 dbm (Standard) | Power_30 |
| 0 | 1 | 27 dbm | Power_27 |
| 1 | 0 | 24 dbm | Power_24 |
| 1 | 1 | 21dbm | Power_21 |
Sie können Kanalfrequenz -OLSO mit diesem Define konfigurieren:
// One of
# define FREQUENCY_433
# define FREQUENCY_170
# define FREQUENCY_470
# define FREQUENCY_868
# define FREQUENCY_915Zuerst 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 E32 -Ü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 = e32ttl.sendMessage( " Prova " );
Serial.println(rs.getResponseDescription());Das andere Gerät macht es einfach auf der Schleife
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);
}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 = e32ttl.sendMessage(&messaggione, sizeof (Messaggione));
Serial.println(rs.getResponseDescription());und die andere Seite können Sie die Nachricht so erhalten
ResponseStructContainer rsc = e32ttl.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 = 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;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 = e32ttl.sendFixedMessage( 0 , 0 , 0x17 , &messaggione, sizeof (Messaggione));
// ResponseStatus rs = e32ttl.sendFixedMessage(0, 0, 0x17, "Ciao");Das feste Übertragung hat mehr Szenarien
Lora E32 -Ü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 = e32ttl.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 = e32ttl.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 = 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);