Actualizaciones 10/10/2024, intento fijo iterador si no se realiza la conexión
Transceptores ebyte
Esta biblioteca está destinada a usarse con transceptores EART eByte (E44-TTL-100, por ejemplo), pequeñas unidades inalámbricas para MCU como Teensy y Arduino. Esta biblioteca permite a los usuarios programar los parámetros operativos y enviar y recibir datos. Esta compañía realiza varios módulos con diferentes capacidades, pero la mayoría de los #defines aquí deben ser compatibles con ellas, todas las constantes se extrajeron de varias hojas de datos y se enumeran en binario, ya que así es como la hoja de datos representaba cada configuración. Con suerte, cualquier cambio o adición a constantes puede ser cuestión de copiar las constantes de la hoja de datos directamente en #defines. El uso de esta biblioteca consume alrededor de 970 bytes.
Realmente solo necesita esta biblioteca para programar estas unidades Ebyte.
Para leer estructuras de datos, puede llamar al método ReadBytes directamente en el objeto serie de EByte:
Eserial.readbytes ((uint8_t*) & mydata, (uint8_t) sizeof (myData));
Para escribir estructuras de datos, puede llamar al método de escritura directamente en el objeto serie de EByte
Eserial.write ((uint8_t*) & myData, (uint8_t) sizeof (myData));
Números de modelo Ebyte (solo una lista parcial) Esquema de número de modelo antiguo 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
Nuevo esquema de número de modelo E22-900T22S, E22-230T22S, E22-400T22S, E22-230T30S, E22-400T30S, E22-900T30S, E30-4333T20S3, E30-170T20D, E30-170T27D, E30-780T20S, E3T E30-868T20D, E30-915T20D, E30-490T20D, E30-433T20S, E30-433T20D, E30-915T20S, E30-490T20S, E31-4333T30S, E31-433T17S3, E31-230T33D, E31-230T17D17D17D17D17D E31-230T27D, E31-433T17S, E31-433T17D, E31-433T27D, E31-433T30D, E31-4333T33D, E32-4333T20DC, E32-433T20S, E32-4333T20S2T, E32T E32-433T30D, E32-433T30S, E32-868T20D, E32-868T20S, E32-868T30D, E32-868T30S, E32-915T20D, E32-915T20S, E32-915T30D, E32-915T30 E32-170T30D, E32-400T20S
Nota: Consulte el sitio web de EByte para asegurarse de que el módulo seleccionado admita las comunicaciones UART, algunos módulos son solo SPI.
Aquí hay un video de YouTube sobre el uso de la biblioteca: https://youtu.be/hmjarkgucfa
Conexión de módulo
Módulo MCU Descripción
- MO cualquier pin digital* Pin para controlar los modos de trabajo/programa
- M1 cualquier pin digital* Pin para controlar los modos de trabajo/programa
- RX Cualquier pin digital* Pin a MCU TX Pin (el módulo se transmite a MCU, por lo tanto, MCU debe recibir datos del módulo
- Tx cualquier pin digital* Pin al pin MCU rx (el módulo se transmite a MCU, por lo tanto, MCU debe recibir datos del módulo
- Aux Cualquier pin digital para indicar cuándo se completa una operación (bajo está ocupado, se realiza alto) (puede omitir con -1, pero el tiempo de recuperación fijo utilizado y puede no ser lo suficientemente largo como para completar la operación)
- VCC +3V3 o 5V0, tenga en cuenta que las unidades pueden funcionar con 5V0 y consumir más potencia
- VCC Ground Ground debe ser común al módulo y MCU
notas
- PRECAUCIÓN Al conectarse a Arduino Pin 0 y 1, ya que esos pines son para la conexión USB a la PC, por lo que no puede tener el EByte conectado durante la programación. Recomiendo no usar Arduino Pins 0 y 1
- Las líneas de señal para estas unidades son 3V3 pero son tolerantes a 5 voltios, sin embargo, 5 voltios pueden provocar fallas de comunicación. Si usa un MCU de 5 voltios como Arduino, es posible que deba hacer lo siguiente. A) Es posible que necesite una pullup 4K7-10K a pines RX y AUX (posiblemente TX) si usa y Arduino b) si usa un Arduino, es posible que necesite una resistencia de la serie 4K7 entre MCU TX y el transceptor RX.
- En algunas de mis aplicaciones, no tenía suficientes pines digitales para conectar el pin Aux. No hay preocupaciones (simplemente pase -1 en la lista de argumentos en el código de creación del objeto). La biblioteca tiene un retraso incorporado para proporcionar un retraso apropiado para permitir que la transmisión se complete; es posible que tenga que experimentar con la cantidad.
- Los pines de serie para la conexión dependen de MCU, Teensy 3.2 Por ejemplo: Serial1 son Rx = 0, Tx = 1, Serial2 Rx = 9, Tx = 10, Serial3 Rx = 7, Tx = 8. Arduino puede ser la mayoría de los pines en serie utilizando softWareserial (MCU_RX_PIN, MCU_TX_PIN), excepto los pines 0 y 1, ya que son para el uso de USB
- Algunos MCU, como el Teensy y ESP32, no permiten que el uso de SoftWareserial cree un puerto de comunicaciones. No se preocupe, solo alambre el Ebtye a un puerto UART dedicado (Pin 0 y Pin 1 en una adolescencia 3.2 para Serial1.
Sitio web de fabricantes
http://www.ebyte.com/en/ Módulo de ejemplo Esta biblioteca está destinada a usarse con http://www.ebyte.com/en/product-view-news.aspx?id=174
Uso general del código
- Crear un objeto en serie
- Crear objeto ebyte que use el objeto serie
- Comience el objeto en serie
- init () el objeto ebyte
- Establecer parámetros (opcional pero requerido si el remitente y el receptor son diferentes)
- Enviar o escuchar datos enviados (byte único) o crear y enviar una estructura de datos
Consejos sobre el uso
Para el mejor rango:
- La hoja de datos indica que los mejores resultados son con antenas de 2 metros fuera del suelo
- Línea de visión ideal, pero mis pruebas personales, transmisión aún exitosa con algunas obstrucciones
- Las tasas de datos de aire lentas pueden mejorar el rango, pero debido al tiempo de transmisión más largo, la frecuencia con la que se pueden enviar datos se sacrificarán
- Considere las antenas de alta ganancia (se puede comprar del fabricante) Consulte su sitio web para más detalles
- La hoja de datos dice que para el rango máximo alimenta las unidades con 5.0 voltios (mantenga 3V3 en las líneas de señal). Personal encontré poco rango diferencial con un mayor voltaje de suministro
- La hoja de datos dice que para el rango máximo, establece la velocidad de datos de aire en 2.4 pb. Personal, encontré poco rango diferencial con bajas tasas de datos, y las bajas tasas de datos pueden limitar la frecuencia con la que puede enviar datos.
Paquetes de transmisión de datos
- Esta biblioteca tiene un método para enviar bytes únicos, pero si se van a enviar más datos, cree una estructura de datos y envíe la estructura de datos utilizando el método SendStruct (& Struct, Struct, Struct (Struct)). Nota Pase por Ref, así que incluya el nombre de la estructura y antes de la estructura
- Una vez más, las tasas de datos lentos tardan más, deberá experimentar con el rango ideal de la velocidad de datos del aire en función del tamaño de los datos
- Si necesita enviar datos utilizando una estructura entre los diferentes cambios de MCU sobre cómo cada paquete de procesadores probablemente será diferente. Si obtiene datos dañados sobre el extremo de recepción, hay formas de obligar al compilador a no optimizar el embalaje de estructura, todavía tengo que hacer que funcionen. Lo que funcionó para mí es usar una biblioteca que cree el puntal y maneje el envío. Echa un vistazo a EasyTransfer.h (Google y obtén a tu autor favorito). En estas Libs, utilizará su método para enviar y obtener estructura (hay liberaciones de hardware y software, se usa en consecuencia. Es decir, puede usar esta biblioteca para programar y administrar la configuración, pero usa EasyTransfer para manejar los datos de envío a través de las líneas de serie que la ebyte está usando. Suena extraño, pero no es diferir que se diga Serial1.sendbytes (...) como en realidad es lo que esta biblioteca es una biblioteca.
Depuración
- Si su módulo inalámbrico devuelve todos los 0 para el método PrintParameters () o solo el modelo y está utilizando la serie de hardware y está utilizando un ESP32, asegúrese de que esté utilizando la definición de serie completa en la declaración Begin (): así
#include <hardwareserial.h>
#Define Serial_0 Serial2
Serial_0.Begin (9600, Serial_8n1, 16, 17);
- Si su módulo inalámbrico está devolviendo todos los 0 para el método PrintParameters (), asegúrese de que su cableado sea correcto y funcionando, MCU RX necesita conectarse con el Ebyte TX y Viceversa. También asegúrese de que M0, M0 y Aux estén conectados a puertos digitales válidos. La mayoría de los problemas se deben a conexiones de línea de datos incorrectas
- Si su módulo inalámbrico está devolviendo todos los 0 para el método PrintParameters (), y está seguro de que su cableado es correcto, su módulo puede ser lento para reaccionar al cambio de PinMode realizado durante un cambio de modo. La hoja de datos dice que se necesita retraso de 2 ms, pero he encontrado que 10 ms son más confiables. Con algunas unidades, se necesita aún más tiempo. El valor predeterminado de la biblioteca es de 50 ms, pero aumente esto en el archivo .h si los parámetros no se leen correctamente.
- Si su módulo inalámbrico devuelve todos los 0 para el método PrintParameters (), y está seguro de que su cableado es correcto y su MCU es 5V0, es posible que deba agregar divisores de voltaje en la línea MXU TX y AUX. Estos módulos pueden ser quisquillosos si se le envía una señal de 5V0. Obtengo resultados muy confiables al alimentar el módulo con una fuente de alimentación 3V3 separada. Generalmente uso convertidores de dinero o reguladores lineales.
- Si usa un MCU de 5V0, es posible que necesite resistencias de serie justas en la línea MCU TX a la línea Ebyte RX y posiblemente las líneas M0 y M1. Se supone que estas unidades Ebyte son tolerantes a 5 voltios, pero mejor seguros que curar. También MFG afirma que se pueden necesitar pullups 4K7 en la línea MCU TX y AUX. He usado estos transceptores en Uno's, Mega's y Nano's sin resistencia y todo estaba bien. Tuve un caso en el que un nano no trabajó con estos transceptores y requirió algunas alimentos impares.
- Si está utilizando sus unidades 1W (salida de potencia de 30 dB), alimente la unidad por separado de la fuente de alimentación a bordo del MCU. El sorteo actual puede exceder la calificación de integración, lo que resulta en destruir el MCU. He destruido el regulador de voltaje a bordo en un nano cuando intento alimentar una unidad de 1W.
- Si el transmisor y el receptor son MCU diferentes (Arduino <-> Teensy), el envío de estructuras de datos pagan de manera diferente, independientemente de los tipos de datos de estructura. Esto se debe a cómo un procesador de 8 bits y un procesador de 32 bits manejan el proceso de embalaje. La opción 1) es usar LIB de Eastransfer. Uso esta lib y funciona bien. Opción 2) Pruebe el atributo variable __attribute __ ((empaquetado)). Opción 3) y no se ríe, pero si se envía un flotador considerando multiplicar un flotador a 100 (y reformularse a un INT), luego divida ese valor por 100 en el extremo receptor (reformulada a un flotador)
- Si parece obtener datos corruptos de .PrintParameters, pruebe con Addinng #include "AVR/IO.H" a su programa .ino
- Si está alimentando sus módulos ebyte desde una fuente de alimentación separada, asegúrese de que todos los terrenos estén conectados