Atualizações 8/10/2024, Tentador de tentativa corrigida se a conexão não for feita
Transceptores de Ebyte
Esta biblioteca deve ser usada com transceptores EBYTE do tipo UART (E44-TTL-100, por exemplo), pequenas unidades sem fio para MCUs como Teensy e Arduino. Esta biblioteca permite que os usuários programem os parâmetros operacionais e os dados enviados e recebem. Esta empresa fabrica vários módulos com recursos diferentes, mas a maioria das defesas aqui deve ser compatível com elas todas as constantes foram extraídas de várias folhas de dados e listadas em binário, pois é assim que a folha de dados representava cada configuração. Felizmente, quaisquer alterações ou adições às constantes podem ser uma questão de copiar as constantes da folha de dados diretamente nas #Defines. O uso desta biblioteca consome cerca de 970 bytes.
Você realmente precisa apenas desta biblioteca para programar essas unidades Ebyte.
Para ler estruturas de dados, você pode chamar o método ReadBytes diretamente no objeto serial do Ebyte:
Esserial.readbytes ((uint8_t*) e mydata, (uint8_t) sizeof (myData));
Para escrever estruturas de dados, você pode chamar o método de gravação diretamente no objeto serial do Ebyte
Esserial.write ((uint8_t*) e mydata, (uint8_t) sizeof (myData));
Números de modelo EBYTE (apenas uma lista parcial mostrada) Esquema de números de modelo antigo E30-TTL-100, E30-490T20D, E31-TTL-100, E32-TTL-100, E32-TTL-500, E32-TTL-1W, E41-TTL-200 E44-TTL-1W, E50-TTL-100, E50-TTL-500, E51-TTL -00, E51-TTL-500, E51-TTL-1W
Novo esquema de número de modelo E22-900T22S, E22-230T22S, E22-400T22S, E22-230T30S, E22-400T30S, E22-900T30S, E30-433T20S3, E30-70T30D, E30-170T27D E30-868T20D, E30-915T20D, E30-490T20D, E30-433T20S, E30-433T20D, E30-915T20S, E30-490T20S, E31-43T30S, E31-4317S3, E31-230T27D, E31-433T17S, E31-433T17D, E31-433T27D, E31-433T30D, E31-433T33D, E32-43T20DC, E32-433T20S, E32-43T20DC, E32-433T20S, E32-433T30D, E32-433T30S, E32-868T20D, E32-868T20S, E32-868T30D, E32-868T30S, E32-915T20D, E32-915T20S, E32-915TTST, E32-170T30D, E32-400T20S
Nota: Verifique o site da Ebyte para garantir que o módulo selecionado suporta comunicações UART, alguns módulos são apenas SPI.
Aqui está um vídeo do YouTube no uso da biblioteca: https://youtu.be/hmjarkgucfa
Conexão do módulo
Módulo MCU Descrição
- MO qualquer pino digital* PIN para controlar os modos de trabalho/programa
- M1 Qualquer pino digital* PIN para controlar os modos de trabalho/programa
- Rx qualquer pino digital* pino para mcu tx pin (o módulo transmite para mcu, portanto, o mcu deve receber dados do módulo
- Tx qualquer pino digital* pino para mcu rx pino (o módulo transmite para mcu, portanto, o mcu deve receber dados do módulo
- Aux qualquer pino digital para indicar quando uma operação está concluída (o baixo está ocupado, o alto é feito) (você pode omitir com -1, mas o tempo de recuperação fixo usado e pode não ser longo o suficiente para concluir a operação)
- VCC +3V3 ou 5V0, observe que as unidades podem funcionar mais quentes com 5v0 e consumir mais energia
- O solo do VCC deve ser comum ao módulo e ao MCU
Notas
- Cuidado em conectar -se ao pino Arduino 0 e 1 Como esses pinos são para conexão USB com PC para que você não possa conectar o Ebyte durante a programação. Eu recomendo não usar pinos Arduino 0 e 1
- As linhas de sinal para essas unidades são 3V3, mas são tolerantes a 5 volts, no entanto, 5 volts podem resultar em falhas de comunicação. Se estiver usando um MCU de 5 volts como o Arduino, pode ser necessário fazer o seguinte. a) Você pode precisar de um pullup 4K7-10K para os pinos RX e Aux (possivelmente TX) se estiver usando e Arduino b) Se estiver usando um Arduino, você pode precisar de um resistor 4K7 em série entre MCU TX e o transceptor RX.
- Em alguns dos meus aplicativos, não tinha pinos digitais suficientes para conectar o pino auxiliar. Não se preocupe (basta passar -1 na lista de argumentos no objeto Criar código). A biblioteca tem um atraso interno para fornecer um atraso apropriado para deixar a transmissão completa-você pode ter que experimentar o valor.
- Os pinos em série para conexão dependem do MCU, Teensy 3.2 Por exemplo: Serial1 são rx = 0, tx = 1, serial2 rx = 9, tx = 10, serial3 rx = 7, tx = 8. Arduino pode ser a maioria dos pinos em série usando softwareserial (mcu_rx_pin, mcu_tx_pin), exceto os pinos 0 e 1 como esses são para uso USB
- Alguns MCU como o adolescente e o ESP32 não permitem o uso do softwareserial para criar uma porta de comunicação. Não se preocupe, basta arame rígido o ebtye para uma porta UART dedicada (pino 0 e pino 1 em um teensy 3.2 para serial1.
Site dos fabricantes
http://www.ebyte.com/en/ Módulo Exemplo Esta biblioteca deve ser usada com http://www.ebyte.com/en/product-view-wews.aspx?id=174
Uso geral do código
- Crie um objeto serial
- Crie objeto Ebyte que use o objeto serial
- Comece o objeto serial
- init () o objeto Ebyte
- Defina parâmetros (opcional, mas necessário se o remetente e o receptor forem diferentes)
- Enviar ou ouvir dados enviados (byte único) ou criar e enviar uma estrutura de dados
Dicas sobre o uso
Para o melhor alcance:
- A folha de dados indica que os melhores resultados são com antenas 2 metros do solo
- Linha de visão ideal, mas meus testes pessoais, transmissão ainda bem -sucedidos com algumas obstruções
- As taxas lentas de dados do ar podem melhorar o alcance, mas devido ao tempo de transmissão mais longo, com que frequência os dados podem ser enviados serão sacrificados
- Considere antenas de alto ganho (pode ser adquirido do fabricante), consulte seu site para obter detalhes
- A folha de dados diz para o alcance máximo, alimentar as unidades com 5,0 volts (mantenha 3v3 nas linhas de sinal). Eu pessoalmente achei que pouca gama diferem com maior tensão de alimentação
- A folha de dados diz para o intervalo máximo, defina a taxa de dados do ar para 2,4 bps. Eu pessoalmente achei que pouca faixa é diferente das baixas taxas de dados, e as baixas taxas de dados podem limitar a frequência com que você pode enviar dados.
Pacotes de transmissão de dados
- Esta biblioteca possui um método para enviar bytes únicos, mas se mais dados forem enviados, crie uma estrutura de dados e envie a estrutura de dados usando o método das bibliotecas sendStruct (& struct, sizeof (struct)). NOTA PASSE POR REF Então inclua o nome da estrutura e antes da estrutura
- Novamente, as taxas de dados lentas levam mais tempo, você precisará experimentar um intervalo de taxa de dados de ar ideal com base no tamanho dos dados
- Se você precisar enviar dados usando uma estrutura entre diferentes alterações da MCU de como cada paciente do processador provavelmente será diferente. Se você receber dados corrompidos no final do recebimento, existem maneiras de forçar o compilador a não otimizar a embalagem da estrutura-ainda não o fazerem funcionar. O que funcionou para mim é usar uma biblioteca que cria o suporte e o envio do suporte. Confira easytransfer.h (Google e obtenha seu autor favorito). Nesses biblos, você usará o método de enviar e obter a estrutura (há hardware e libs de software, use de acordo. Significando que você pode usar essa biblioteca para programar e gerenciar configurações, mas usar o Easytransfer para lidar com o envio de dados através das linhas de série que o Ebyte está usando. lib.
Depuração
- Se o seu módulo sem fio estiver retornando todos os 0 para o método PrintParameters () ou apenas o modelo e você estiver usando serial de hardware e estiver usando um ESP32, verifique se você está usando a definição de série completa na declaração Begin (): como esta
#include <hardwareserial.h>
#Define serial_0 Serial2
Serial_0.Begin (9600, Serial_8n1, 16, 17);
- Se o seu módulo sem fio estiver retornando todos os 0 para o método PrintParameters (), verifique se sua fiação está correta e funcionando, o MCU RX precisará se conectar ao Ebyte TX e vice -versa. Verifique também que M0, M0 e AUX estão conectados a portas digitais válidas. A maioria dos problemas é devido a conexões incorretas da linha de dados
- Se o seu módulo sem fio estiver retornando todos os 0 para o método PrintParameters () e você tiver certeza de que sua fiação está correta, seu módulo poderá demorar a reagir à alteração do pinmode executada durante uma mudança de modo. A folha de dados diz que é necessário um atraso de 2 ms, mas achei que 10 ms são mais confiáveis. Com algumas unidades, é necessário ainda mais tempo. O padrão da biblioteca é de 50 ms, mas aumente isso no arquivo .h se os parâmetros não forem lidos corretamente.
- Se o seu módulo sem fio estiver retornando todos os 0 para o método PrintParameters () e você tiver certeza de que sua fiação está correta e seu MCU é 5V0, talvez seja necessário adicionar divisores de tensão na linha MXU TX e Aux. Esses módulos podem ser finais se um sinal 5V0 estiver sendo enviado a ele. Tenho resultados muito confiáveis ao alimentar o módulo com uma fonte de alimentação 3V3 separada. Eu geralmente uso conversores de buck ou reguladores lineares.
- Se estiver usando um 5V0 MCU, você pode precisar de apenas resistores em série na linha MCU TX na linha Ebyte RX e possivelmente nas linhas M0 e M1. Essas unidades de Ebyte devem ser tolerantes a 5 volts, mas melhor seguro do que remediar. Além disso, os pullups 4K7 do MFG podem ser necessários na linha MCU TX e no AUX. Eu usei esses transceptores em UNO, Mega's e Nano's sem resistores e tudo estava bem. Eu tive um caso em que um Nano não trabalhava com esses transceptores e exigia algum poder estranho.
- Se você estiver usando as unidades de 1W (saída de potência de 30 dB), altere a unidade separadamente da fonte de alimentação a bordo do MCU. O sorteio atual pode exceder a classificação a bordo, resultando em destruir o MCU. Destruí o regulador de tensão a bordo em um nano ao tentar alimentar uma unidade de 1W.
- Se o transmissor e o receptor forem diferentes MCU (Arduino <-> Teensy), o envio de estruturas de dados paga de maneira diferente, independentemente dos tipos de dados da estrutura. Isso se deve à maneira como um processador de 8 bits e processador de 32 bits lidam com o processo de embalagem. Opção 1) é usar o Eastransfer Lib. Eu uso esta lib e funciona bem. Opção 2) Experimente o atributo __attribute __ ((embalado)). Opção 3) e não ria, mas se enviar um carro alegórico, considerando multiplicar um flutuador para 100 (e reformular para um INT), divida esse valor por 100 na extremidade receptora (reformulando -se a um flutuador)
- Se você parece obter dados corruptos do .printParameters, tente addinng #include "avr/io.h" para o seu programa .ino
- Se você estiver alimentando seus módulos Ebyte de uma fonte de energia separada, verifique se todos os motivos estão conectados