{
"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"}
]
}
]
}
]
}