Aktualisieren 8/10/2024, fester Versuch -Iterator, wenn keine Verbindung hergestellt wird
EBYTE Transceiver
Diese Bibliothek soll mit UART-Typ-EBYTE-Transceivern (zum Beispiel E44-TTL-100) verwendet werden, kleine drahtlose Einheiten für MCUs wie Teensy und Arduino. Mit dieser Bibliothek können Benutzer die Betriebsparameter programmieren und Daten senden und empfangen. Dieses Unternehmen erstellt mehrere Module mit unterschiedlichen Funktionen. Hoffentlich können Änderungen oder Ergänzungen zu Konstanten eine Frage des Kopierens der Datenblattkonstanten direkt in die #Defines darstellen. Die Verwendung dieser Bibliothek verbraucht rund 970 Bytes.
Sie brauchen diese Bibliothek nur wirklich, um diese EBYTE -Einheiten zu programmieren.
Für das Lesen von Datenstrukturen können Sie die ReadBytes -Methode direkt auf dem seriellen Objekt des EBYTE aufrufen:
Eserial.readBytes ((uint8_t*) & mydata, (uint8_t) sizeof (mydata));
Zum Schreiben von Datenstrukturen können Sie die Schreibmethode direkt auf dem seriellen Objekt des EBYTE aufrufen
Eserial.write ((uint8_t*) & mydata, (uint8_t) sizeof (mydata));
EBYTE Model numbers (only a partial list shown) Old model number scheme E30-TTL-100,E30-490T20D, E31-TTL-100, E32-TTL-100, E32-TTL-500, E32-TTL-1W, E41-TTL-100, E41-TTL-100, E44-TTL-100, E44-TTL-500, E44-TTL-1W, E50-TTL-100, E50-TTL-500, E51-TTL-100, E51-TTL-500, E51-TTL-1W
New model number scheme E22-900T22S, E22-230T22S, E22-400T22S, E22-230T30S, E22-400T30S, E22-900T30S, E30-433T20S3, E30-170T20D, E30-170T27D, E30-780T20S, E30-868T20S, E30-868T20D, E30-915T20D, E30-490T20D, E30-433T20S, E30-433T20D, E30-915T20S, E30-490T20S, E31-433T30S, E31-433T17S3, E31-230T33D, E31-230T17D, E31-230T27D, E31-433T17S, E31-433T17D, E31-433T27D, E31-433T30D, E31-433T33D, E32-433T20DC, E32-433T20S, E32-433T20S2T, E32-433T27D, E32-433T30D, E32-433T30S, E32-868T20D, E32-868T20S, E32-868T30D, E32-868T30S, E32-915T20D, E32-915T20S, E32-915T30D, E32-915T30S, E32-170T30D, E32-400T20S
Hinweis: Überprüfen Sie die EBYTE -Website, um sicherzustellen, dass das ausgewählte Modul UART Communications unterstützt. Einige Module sind nur SPI.
Hier ist ein YouTube -Video zur Bibliotheksnutzung: https://youtu.be/hmjarkgucfa
Modulverbindung
Modul MCU Beschreibung
- ME ein digitaler Pin* Pin zur Steuerung von Arbeits-/Programmmodi
- M1 jeder digitale Pin* Pin zur Steuerung von Arbeits-/Programmmodi
- Rx jeder digitale Pin* Pin zum MCU -TX -Pin (Modul überträgt an MCU, daher muss MCU Daten aus dem Modul empfangen
- TX jeder digitale Pin* Pin zum MCU -RX -Pin (Modul überträgt an MCU, daher muss MCU Daten aus dem Modul empfangen
- Aux einen digitalen Pin -Pin, um anzugeben, wann ein Betrieb abgeschlossen ist (niedrig ist besetzt, hoch, hoch) (Sie können mit -1 weglassen, aber die verwendete Wiederherstellungszeit und möglicherweise nicht lang genug ist, um den Betrieb abzuschließen)
- VCC +3V3 oder 5V0 Beachten Sie, dass die Einheiten mit 5 V0 wärmer laufen und mehr Strom verbrauchen können
- VCC Ground Ground muss dem Modul und der MCU gemeinsam sein
Notizen
- Vorsicht bei der Verbindung zu Arduino Pin 0 und 1, da diese Pins für die USB -Verbindung zum PC sind, sodass Sie die EBYTE während der Programmierung nicht angeschlossen haben können. Ich empfehle, Arduino -Pins 0 und 1 nicht zu verwenden
- Die Signallinien für diese Einheiten sind 3V3, aber 5 Volt -tolerant, 5 Volt können jedoch zu Kommunikationsfehlern führen. Wenn Sie eine 5 Volt -MCU wie Arduino verwenden, müssen Sie möglicherweise Folgendes tun. a) Möglicherweise benötigen Sie einen 4K7-10K-Pullup an RX- und Aux-Pins (möglicherweise TX).
- In einigen meiner Anwendungen hatte ich nicht genügend digitale Stifte, um den Aux -Pin zu verbinden. Keine Sorge (nur in der Argumentliste im Objekt erstellen Code übergeben). Die Bibliothek hat eine eingebaute Verzögerung, um eine angemessene Verzögerung zu ermöglichen, um die Übertragung zu vervollständigen-Sie müssen möglicherweise mit der Menge experimentieren.
- Die seriellen Stifte für die Verbindung sind von der MCU abhängig, Teensy 3.2 Zum Beispiel: Serial1 sind rx = 0, tx = 1, serial2 rx = 9, tx = 10, serial3 rx = 7, tx = 8. Arduino kann die meisten seriellen Stifte mit SoftWareserial (MCU_RX_PIN, MCU_TX_PIN) sein, mit Ausnahme von Stiften 0 und 1, da diese für die USB -Verwendung sind
- Einige MCU wie das Teensy und ESP32 erlauben nicht die Verwendung von Softwareerial, einen Kommunikationsport zu erstellen. Keine Sorge, verdrahten Sie das EBTYE nur fest mit einem dedizierten UART -Anschluss (Pin 0 und Pin 1 auf einem Teensy 3.2 für Serial1.
Hersteller Website
http://www.ebyte.com/en/ Beispielmodul Diese Bibliothek soll mit http://www.ebyte.com/en/product-view-news.aspx?id=174 verwendet werden
General Code -Nutzung
- Erstellen Sie ein serielles Objekt
- Erstellen Sie das EBYTE -Objekt, das das serielle Objekt verwendet
- Beginnen Sie das Serienobjekt
- Init () das EBYTE -Objekt
- Setzen Sie die Parameter (optional, aber erforderlich, wenn Sender und Empfänger unterschiedlich sind)
- Senden oder anhören Sie gesendete Daten (einzelne Byte) oder erstellen und senden Sie eine Datenstruktur
Tipps zur Verwendung
Für die beste Reichweite:
- Das Datenblatt zeigt an
- Sichtlinie ideal, aber meine persönlichen Tests, die Übertragung immer noch erfolgreich mit einigen Hindernissen
- Langsame Luftdatenraten können den Bereich verbessern, aber aufgrund der längeren Übertragungszeit werden die Datenversorgungsdaten geopfert, wie oft Daten gesendet werden können
- Betrachten Sie mit hohen Gewinnantennen (können vom Hersteller gekauft werden). Weitere Informationen finden Sie in der Website
- Das Datenblatt sagt, dass für den maximalen Bereich die Einheiten mit 5,0 Volt (3V3 auf den Signalleitungen halten). Ich habe persönlich wenig Reichweite mit einer höheren Versorgungsspannung gefunden
- Auf dem Datenblatt werden für den maximalen Bereich die Luftdatenrate auf 2,4 bps festgelegt. Ich habe persönlich nur wenig Reichweite mit niedrigen Datenraten gefunden, und niedrige Datenraten können einschränken, wie oft Sie Daten senden können.
Datenübertragungspakete
- Diese Bibliothek verfügt über eine Methode zum Senden einzelner Bytes. Wenn jedoch weitere Daten gesendet werden sollen, erstellen Sie eine Datenstruktur und senden Sie die Datenstruktur mithilfe der Methode SendStruct (& struct, Sizeof (Struct)). HINWEIS PASS BY REF So geben Sie den Namen & vor dem Strukturnamen ein
- Wiederum die langsamen Datenraten dauern länger.
- Wenn Sie Daten mit einer Struktur zwischen den Änderungen der MCU senden müssen, wie jeder Prozessorpack wahrscheinlich unterschiedlich ist. Wenn Sie beschädigte Daten über das erholende Ende erhalten, gibt es Möglichkeiten, den Compiler zu zwingen, die Strukturverpackung nicht zu optimieren-ich muss sie noch zum Laufen bringen. Was für mich funktioniert hat, ist, eine Bibliothek zu verwenden, die die Strebe und das Senden des Sendens erstellt. Schauen Sie sich EasyTransfer.h an (Google It und holen Sie sich Ihren Lieblingsautor). In diesen LIBs verwenden Sie ihre Methode zum Senden und Erhalten von Strukturen (es gibt Hardware- und Software -Libs, dh entsprechend. Sie können diese Bibliothek verwenden, um Einstellungen zu programmieren und zu verwalten, aber EasyTransfer verwenden, um Daten durch die seriellen Linien zu senden, die das EBYTE verwendet. Klingt seltsam.
Debuggen
- Wenn Ihr drahtloses Modul alle 0 für die PrintParameters () -Methode oder nur das Modell zurückgibt und Sie Hardware -Serien verwenden und ein ESP32 verwenden, stellen Sie sicher
#include <hardwareserial.h>
#define serial_0 serial2
Serial_0.begin (9600, serial_8n1, 16, 17);
- Wenn Ihr drahtloses Modul alle 0 für die PrintParameters () -Methode () zurückgibt, stellen Sie sicher, dass Ihre Verkabelung korrekt ist und funktioniert, MCU RX muss sich mit dem EBYTE TX verbinden und umgekehrt. Stellen Sie außerdem sicher, dass M0, M0 und Aux mit gültigen digitalen Ports verbunden sind. Die meisten Probleme sind auf falsche Datenlinienverbindungen zurückzuführen
- Wenn Ihr drahtloses Modul alle 0 für die PrintParameters () -Methode () zurückgibt und Sie sicher sind, dass Ihre Verkabelung korrekt ist, kann Ihr Modul langsam auf PinMode -Änderung reagieren, die während einer Modusänderung durchgeführt werden. Das Datenblatt sagt, dass eine Verzögerung von 2 ms benötigt wird, aber ich habe festgestellt, dass 10 ms zuverlässiger sind. Bei einigen Einheiten ist noch mehr Zeit erforderlich. Die Bibliotheksstandard beträgt 50 ms, erhöhen Sie dies jedoch in der .H -Datei, wenn die Parameter nicht korrekt gelesen werden.
- Wenn Ihr drahtloses Modul alle 0 für die PrintParameters () -Methode () zurückgibt und Sie sicher sind, dass Ihre Verkabelung korrekt ist und Ihre MCU 5V0 ist, müssen Sie möglicherweise Spannungsteiler auf der MXU TX und Aux -Linie hinzufügen. Diese Module können untergeordnet sein, wenn ein 5 -V0 -Signal darauf gesendet wird. Ich bekomme sehr zuverlässige Ergebnisse, wenn ich das Modul mit einer separaten 3V3 -Netzteil mit Strom versorge. Ich benutze im Allgemeinen Buck -Konverter oder lineare Regulierungsbehörden.
- Wenn Sie eine 5 -V0 -MCU verwenden, benötigen Sie möglicherweise nur Serienwiderstände auf der MCU TX -Linie zur EBYTE RX -Linie und möglicherweise in den M0- und M1 -Linien. Diese EBYTE -Einheiten sollen 5 Volt tolerant sein, aber besser sicher als Entschuldigung. Auch MFG behauptet, dass 4K7 -Pullups für MCU TX Line und Aux benötigt werden können. Ich habe diese Transceiver bei UNOs, Megas und Nano mit allen Widerständen verwendet, und alles war gut. Ich hatte einen Fall, in dem ein Nano nicht mit diesen Transceivern zusammengearbeitet hatte und etwas seltsames Antrieb benötigte.
- Wenn Sie ihre 1W -Einheiten (30 dB Leistung) verwenden, führen Sie das Gerät getrennt von der Netzteil der MCU mit. Die aktuelle Auslosung kann die Einrichtung in Bord überschreiten, was dazu führt, dass die MCU zerstört wird. Ich habe den Bord -Spannungsregler auf einem Nano zerstört, als ich versucht habe, eine 1W -Einheit zu versorgen.
- Wenn Sender und Empfänger unterschiedlich MCU sind (Arduino <-> teensy), senden Sie Datenstrukturen, unabhängig von Strukturdatentypen, unterschiedlich Packungen. Dies ist darauf zurückzuführen, wie ein 8-Bit-Prozessor und ein 32-Bit-Prozessor mit dem Packungsprozess umgehen. Option 1) ist die Verwendung von Easttransfer Lib. Ich benutze diese Lib und es funktioniert gut. Option 2) Versuchen Sie das Variable -Attribut __attribute __ ((verpackt)). Option 3) und nicht lachen, aber wenn Sie einen Float senden, wenn Sie einen Schwimmer mit 100 (und um einen Umbau an einen INT umwerben) in Betracht ziehen, dann teilen Sie diesen Wert um 100 am Empfangsende (um einen Float um.)
- Wenn Sie anscheinend korrupte Daten von .PrintParameters erhalten, versuchen Sie es mit addinng #include "avr/io.h" zu Ihrem .ino -Programm
- Wenn Sie Ihre EBYTE -Module aus einer separaten Stromquelle mit Strom versorgen, stellen Sie sicher, dass alle Gründe verbunden sind