{ "strings": { "en": { "meta.title": "CircuitPython - Ebyte E32 Driver", "meta.description": "CircuitPython driver for Ebyte's E32 UART LoRa modules that use the SX1278/SX1276 chipsets.", "article.subtitle": " View on GitHub", "intro.title": "Introduction", "intro.p1": "This project is a simple driver for CircuitPython that allows you to easily interact with Ebyte's E32 series of LoRa modules.", "features.title": "Features", "features.1": "Supports all standard E32 UART modules.", "features.2": "Extra support on a per-frequency and per-power basis:", "features.2.1": "More descriptive constants for TX power.", "features.2.2": "Maximum packet size calculators. (TODO)", "features.2.3": "Entirely optional via separate modules.", "features.3": "Minified versions for devices with tiny storage space:", "features.3.1": "~75% smaller for .py files", "features.3.2": "~5% smaller for .mpy files (Due to shortened local variables, mostly)", "limitations.title": "Limitations", "limitations.1": "No built-in packet size limit:", "limitations.1.1": "Wildly different between frequencies & operating parameters.", "limitations.1.2": "Not documented clearly enough in LoRA and LoRaWAN documentation.", "limitations.2": "No built-in protocol:", "limitations.2.1": "All LoRa packets are glued back-to-back when received.", "limitations.2.2": "No LoraWAN support", "limitations.3": "Missing support for some modules:", "limitations.3.1": "Modules with 170, 400 and 900 prefix. (Will improve overtime)", "doc.title": "Documentation", "doc.p1": "The entire documentation for this project can be found on Github.
The datasheets for all the E32 modules can also be found on \"files.nibblepoker.lu\".", "usage.title": "Usage", "usage.p1": "Many usage examples can be found on GitHub in the \"examples/\" subfolder.
The examples cover all modes of operations for the modules, except for the wake-up and power-saving modes.", "usage.p2": "However, if you want to get a feel on how to use it, I invite you to read the code below taken from the \"transmit_fixed/sender_unicast.py\" example that is used to send a message in fixed mode to a specific device.", "demo.title": "IRL Tests", "demo.p1": "Some tests were conducted using this library with an E32 443T20D module transmitting at 10 mW / 10dBm and 2.4 kbps.", "demo.p2": "The transmitting side used a handmade ??? antenna held up ~8-10 m above ground-level, and the receiving one was a basic ??? from a Baofeng radio held up ~2-3 m above the ground with the help of a wooden stick.", "demo.p3": "The maximum observed range was around 1.7km / 1.05mi with a clear LOS.", "demo.p4": "It could have probably been bigger if we hadn't ran out of beers and were ready to walk >8km to the next unobstructed point.", "downloads.title": "Downloads", "license.title": "License", "links.title": "Links" }, "fr": { "meta.title": "CircuitPython - Driver Ebyte E32", "meta.description": "Driver CircuitPython pour les modules sérial LoRa E32 de Ebyte tournant sous les chipset SX1278/SX1276.", "article.subtitle": " Voir sur GitHub", "intro.title": "Introduction", "intro.p1": "Ce projet est un driver qui vous permet d'interagir avec la série de modules LoRa E32 d'Ebyte dans CircuitPython.", "features.title": "Fonctionnalités", "features.1": "Prend en charge tous les modules E32 UART standards.", "features.2": "Support supplémentaire en fonction de la fréquence et de la puissance :", "features.2.1": "Constantes pour la puissance d'émission.", "features.2.2": "Calculatrices de taille de paquet maximale. (À FAIRE)", "features.2.3": "Entièrement facultatif via des modules séparés.", "features.3": "Versions minifiées pour les appareils avec un espace de stockage réduit :", "features.3.1": "~75 % plus petites pour les fichiers .py", "features.3.2": "~5 % plus petites pour les fichiers .mpy", "limitations.title": "Limitations", "limitations.1": "Aucune limitation de taille de paquet intégrée :", "limitations.1.1": "Varie grandement entre les fréquences et les paramètres d'utilisation.", "limitations.1.2": "Pas suffisamment documentée dans les spécifications techniques de LoRA et LoRaWAN.", "limitations.2": "Aucun protocole intégré :", "limitations.2.1": "Tous les paquets LoRa sont collés les uns aux autres dans un buffer lors de la réception.", "limitations.2.2": "Aucun support pour LoRaWAN. (Limitation du module)", "limitations.3": "Support avancé manquant pour certains modules :", "limitations.3.1": "Modules avec les préfixes 170, 400 ou 900. (S'améliorera avec le temps)", "doc.title": "Documentation", "doc.p1": "Toute la documentation de ce projet est disponible sur Github.
Les fiches techniques de tous les modules E32 peuvent également être trouvées sur \"files.nibblepoker.lu\".", "usage.title": "Utilisation", "usage.p1": "De nombreux exemples d'utilisation peuvent être trouvés sur GitHub dans le sous-dossier \"examples/\" du projet.
Les exemples couvrent tous les modes de fonctionnement des modules, à l'exception des modes wake-up et power-saving.", "usage.p2": "Cependant, si vous souhaitez avoir un aperçu rapide, je vous invite à lire le code ci-dessous extrait de l'exemple \"transmit_fixed/sender_unicast.py\" qui est utilisé pour envoyer un message en mode fixe à un récipient spécifique.", "demo.title": "Essais IRL ", "demo.p1": "Des tests ont été effectués avec cette librairie en utilisant un module E32 443T20D émettant à 10 mW / 10 dBm et 2,4 kbps.", "demo.p3": "La portée maximale observée était d'environ 1,7 km / 1,05 mi avec une ligne de visée dégagée (LOS).", "demo.p4": "Elle aurait probablement pu être plus grande si nous n'avions pas épuisé nos réserves de bières sur la première partie de la marche, et si nous étions prêts à marcher plus de 8 km jusqu'au prochain point dégagé.\n", "downloads.title": "Télechargements", "license.title": "Licence", "links.title": "Liens" } }, "metadata": { "template": "generic-project-readme", "head": { "title": "meta.title", "description": "meta.description" }, "opengraph": { "title": "meta.title", "description": "meta.description", "type": null, "url": null, "image": "/resources/NibblePoker/images/content/circuitpython-ebyte-e32/main.png", "image_type": null }, "article": { "icon": "fab fa-python", "title": "meta.title", "subtitle": "article.subtitle", "tags": ["electronic", "python" ,"circuitpython", "lora", "library"] } }, "elements": [ {"type": "h1", "content": "intro.title"}, {"type": "paragraph", "indent": 2, "content": "intro.p1"}, {"type": "h1", "content": "features.title"}, { "type": "paragraph", "indent": 2, "parts": [ {"type": "raw", "content": "●  ", "localize": false}, {"type": "raw", "content": "features.1"}, {"type": "raw", "content": "
", "localize": false}, {"type": "raw", "content": "●  ", "localize": false}, {"type": "raw", "content": "features.2"}, {"type": "raw", "content": "
", "localize": false}, {"type": "raw", "content": "   ∘  ", "localize": false}, {"type": "raw", "content": "features.2.1"}, {"type": "raw", "content": "
", "localize": false}, {"type": "raw", "content": "   ∘  ", "localize": false}, {"type": "raw", "content": "features.2.2"}, {"type": "raw", "content": "
", "localize": false}, {"type": "raw", "content": "   ∘  ", "localize": false}, {"type": "raw", "content": "features.2.3"}, {"type": "raw", "content": "
", "localize": false}, {"type": "raw", "content": "●  ", "localize": false}, {"type": "raw", "content": "features.3"}, {"type": "raw", "content": "
", "localize": false}, {"type": "raw", "content": "   ∘  ", "localize": false}, {"type": "raw", "content": "features.3.1"}, {"type": "raw", "content": "
", "localize": false}, {"type": "raw", "content": "   ∘  ", "localize": false}, {"type": "raw", "content": "features.3.2"}, {"type": "raw", "content": "
", "localize": false} ] }, {"type": "h1", "content": "limitations.title"}, { "type": "paragraph", "indent": 2, "parts": [ {"type": "raw", "content": "●  ", "localize": false}, {"type": "raw", "content": "limitations.1"}, {"type": "raw", "content": "
", "localize": false}, {"type": "raw", "content": "   ∘  ", "localize": false}, {"type": "raw", "content": "limitations.1.1"}, {"type": "raw", "content": "
", "localize": false}, {"type": "raw", "content": "   ∘  ", "localize": false}, {"type": "raw", "content": "limitations.1.2"}, {"type": "raw", "content": "
", "localize": false}, {"type": "raw", "content": "●  ", "localize": false}, {"type": "raw", "content": "limitations.2"}, {"type": "raw", "content": "
", "localize": false}, {"type": "raw", "content": "   ∘  ", "localize": false}, {"type": "raw", "content": "limitations.2.1"}, {"type": "raw", "content": "
", "localize": false}, {"type": "raw", "content": "   ∘  ", "localize": false}, {"type": "raw", "content": "limitations.2.2"}, {"type": "raw", "content": "
", "localize": false}, {"type": "raw", "content": "●  ", "localize": false}, {"type": "raw", "content": "limitations.3"}, {"type": "raw", "content": "
", "localize": false}, {"type": "raw", "content": "   ∘  ", "localize": false}, {"type": "raw", "content": "limitations.3.1"}, {"type": "raw", "content": "
", "localize": false} ] }, {"type": "h1", "content": "doc.title"}, {"type": "paragraph", "indent": 2, "content": "doc.p1"}, {"type": "h1", "content": "usage.title"}, {"type": "paragraph", "indent": 2, "content": "usage.p1"}, {"type": "paragraph", "indent": 2, "content": "usage.p2"}, { "type": "container", "padding": 2, "modifiers": ["pb-0"], "parts": [ { "type": "code", "indent": 2, "modifiers": ["horizontal-scroll-auto", "code-block"], "language": "python", "copyable": true, "code": [ "import board", "import time", "", "import ebyte_e32", "", "PIN_M0 = board.IO13", "PIN_M1 = board.IO12", "PIN_RXD = board.IO11 # Pin marked as RX on the module", "PIN_TXD = board.IO10 # Pin marked as TX on the module", "PIN_AUX = board.IO9", "", "e32 = ebyte_e32.E32Device(PIN_M0, PIN_M1, PIN_AUX, PIN_TXD, PIN_RXD, address=0xBEEF, channel=4)", "", "# Switching to fixed transmission mode.", "e32.tx_mode = ebyte_e32.TransmissionMode.TRANSMISSION_FIXED", "", "# Switching to mode 0. (Normal mode)", "e32.mode = ebyte_e32.Modes.MODE_NORMAL", "", "# Message content:", "# * Receiver's address: 0x1337 (b'\\13\\x37')", "# * Receiver's channel: 4 (b'\\x04')", "# * Message: b'Hello World !'", "message = b'\\x13\\x37\\x04Hello World !'", "", "# Sending message with helper method", "e32.send(message)", "", "# The message may be truncated at specific lengths depending on the frequencies used.", "# Please check the documentation for more information !" ] } ] }, {"type": "h1", "content": "demo.title"}, {"type": "paragraph", "indent": 2, "content": "demo.p1"}, {"type": "paragraph", "indent": 2, "content": "demo.p3"}, {"type": "paragraph", "indent": 2, "content": "demo.p4"}, { "type": "container", "padding": 2, "modifiers": ["pb-0"], "parts": [ { "type": "gallery", "modifiers": [], "images": [ "/resources/NibblePoker/images/content/circuitpython-ebyte-e32/demo-01.jpg", "/resources/NibblePoker/images/content/circuitpython-ebyte-e32/demo-02.jpg", "/resources/NibblePoker/images/content/circuitpython-ebyte-e32/demo-03.jpg", "/resources/NibblePoker/images/content/circuitpython-ebyte-e32/demo-04.jpg" ] } ] }, {"type": "h1", "content": "downloads.title"}, { "type": "container", "padding": 2, "modifiers": ["pb-0"], "parts": [ { "type": "table", "modifiers": ["stylish", "auto-cell-padding", "v-center-cells"], "head": [ {"type": "raw", "content": "content.commons.version"}, {"type": "raw", "content": ".py", "localize": false}, {"type": "raw", "content": ".min.py", "localize": false}, {"type": "raw", "content": ".mpy", "localize": false}, {"type": "raw", "content": ".min.mpy", "localize": false} ], "body": [[ {"type": "raw", "content": "v0.8.0", "localize": false}, { "type": "raw", "parts": [ { "type": "button", "modifiers": ["thin", "download-primary"], "link": "https://files.nibblepoker.lu/downloads/CircuitPython-Ebyte-E32/0.8.0/nibblepoker-circuitpython-e32-driver_v0.8.0_py.zip", "content": "  10.42 KiB", "localize": false } ] }, { "type": "raw", "parts": [ { "type": "button", "modifiers": ["thin"], "link": "https://files.nibblepoker.lu/downloads/CircuitPython-Ebyte-E32/0.8.0/nibblepoker-circuitpython-e32-driver_v0.8.0_py-min.zip", "content": "  4.79 KiB", "localize": false } ] }, { "type": "raw", "parts": [ { "type": "button", "modifiers": ["thin", "download-primary"], "link": "https://files.nibblepoker.lu/downloads/CircuitPython-Ebyte-E32/0.8.0/nibblepoker-circuitpython-e32-driver_v0.8.0_mpy-8.zip", "content": "  6.25 KiB", "localize": false } ] }, { "type": "raw", "parts": [ { "type": "button", "modifiers": ["thin"], "link": "https://files.nibblepoker.lu/downloads/CircuitPython-Ebyte-E32/0.8.0/nibblepoker-circuitpython-e32-driver_v0.8.0_mpy-8-min.zip", "content": "  5.99 KiB", "localize": false } ] } ],[ {"type": "raw", "content": "v0.7.0", "localize": false}, { "type": "raw", "parts": [ { "type": "button", "modifiers": ["thin"], "link": "https://files.nibblepoker.lu/downloads/CircuitPython-Ebyte-E32/0.7.0/nibblepoker-circuitpython-e32-driver_v0.7.0_py.zip", "content": "  10.51 KiB", "localize": false } ] }, { "type": "raw", "parts": [ { "type": "button", "modifiers": ["thin"], "link": "https://files.nibblepoker.lu/downloads/CircuitPython-Ebyte-E32/0.7.0/nibblepoker-circuitpython-e32-driver_v0.7.0_py-min.zip", "content": "  4.79 KiB", "localize": false } ] }, { "type": "raw", "parts": [ { "type": "button", "modifiers": ["thin"], "link": "https://files.nibblepoker.lu/downloads/CircuitPython-Ebyte-E32/0.7.0/nibblepoker-circuitpython-e32-driver_v0.7.0_mpy-8.zip", "content": "  6.26 KiB", "localize": false } ] }, { "type": "raw", "parts": [ { "type": "button", "modifiers": ["thin"], "link": "https://files.nibblepoker.lu/downloads/CircuitPython-Ebyte-E32/0.7.0/nibblepoker-circuitpython-e32-driver_v0.7.0_mpy-8-min.zip", "content": "  5.99 KiB", "localize": false } ] } ],[ {"type": "raw", "content": "v0.6.0", "localize": false}, { "type": "raw", "parts": [ { "type": "button", "modifiers": ["thin"], "link": "https://files.nibblepoker.lu/downloads/CircuitPython-Ebyte-E32/0.6.0/nibblepoker-circuitpython-e32-driver_0.6.0_py.zip", "content": "  10.39 KiB", "localize": false } ] }, { "type": "raw", "parts": [ { "type": "button", "modifiers": ["thin"], "link": "https://files.nibblepoker.lu/downloads/CircuitPython-Ebyte-E32/0.6.0/nibblepoker-circuitpython-e32-driver_0.6.0_py-min.zip", "content": "  4.62 KiB", "localize": false } ] }, { "type": "raw", "parts": [ { "type": "button", "modifiers": ["thin"], "link": "https://files.nibblepoker.lu/downloads/CircuitPython-Ebyte-E32/0.6.0/nibblepoker-circuitpython-e32-driver_0.6.0_mpy-8.zip", "content": "  6.10 KiB", "localize": false } ] }, { "type": "raw", "parts": [ { "type": "button", "modifiers": ["thin"], "link": "https://files.nibblepoker.lu/downloads/CircuitPython-Ebyte-E32/0.6.0/nibblepoker-circuitpython-e32-driver_0.6.0_mpy-8-min.zip", "content": "  5.83 KiB", "localize": false } ] } ],[ {"type": "raw", "content": "v0.4.0", "localize": false}, { "type": "raw", "parts": [ { "type": "button", "modifiers": ["thin"], "link": "https://files.nibblepoker.lu/downloads/CircuitPython-Ebyte-E32/0.4.0/nibblepoker-circuitpython-e32-driver_0.4.0_py.zip", "content": "  19.96 KiB", "localize": false } ] }, { "type": "raw", "parts": [ { "type": "button", "modifiers": ["thin"], "link": "https://files.nibblepoker.lu/downloads/CircuitPython-Ebyte-E32/0.4.0/nibblepoker-circuitpython-e32-driver_0.4.0_py-min.zip", "content": "  4.18 KiB", "localize": false } ] }, { "type": "raw", "parts": [ { "type": "button", "modifiers": ["thin"], "link": "https://files.nibblepoker.lu/downloads/CircuitPython-Ebyte-E32/0.4.0/nibblepoker-circuitpython-e32-driver_0.4.0_mpy-8.zip", "content": "  5.27 KiB", "localize": false } ] }, { "type": "raw", "parts": [ { "type": "button", "modifiers": ["thin"], "link": "https://files.nibblepoker.lu/downloads/CircuitPython-Ebyte-E32/0.4.0/nibblepoker-circuitpython-e32-driver_0.4.0_mpy-8-min.zip", "content": "  5.04 KiB", "localize": false } ] } ]] } ] }, {"type": "h1", "content": "license.title"}, { "type": "paragraph", "indent": 2, "content": "content.commons.license.mit.single", "link": "https://github.com/aziascreations/CircuitPython-Ebyte-E32/blob/master/LICENSE" }, {"type": "h1", "content": "links.title"}, { "type": "paragraph", "indent": 2, "parts": [ {"type": "raw", "content": "●  ", "localize": false}, { "type": "raw", "link": "https://github.com/aziascreations/CircuitPython-Ebyte-E32", "parts": [ {"type": "raw", "content": "content.commons.github"} ] }, {"type": "raw", "content": "
", "localize": false}, {"type": "raw", "content": "●  ", "localize": false}, { "type": "raw", "link": "https://aziascreations.github.io/CircuitPython-Ebyte-E32/", "parts": [ {"type": "raw", "content": "content.commons.doc.online"} ] } ] } ] }