domingo, 4 de abril de 2021

U-BLOX NINA W106 SENDO PROGRAMADO EM BASIC ANNEX RDS - ESP-NOW

 U-BLOX NINA W106 SENDO PROGRAMADO EM BASIC ANNEX RDS  - ESP-NOW


O objetivo deste BLOG é demonstrar como é possível utilizar programar o módulo u-BLOX NINA W106 (ESP32) no starter kit EVK-NINA-W1 com a linguagem BASIC ANNEX WiFi RDS (1.43 Beta) e testar o protocolo ESP-NOW
UBLOX NINA W106

Wi-Fi 802.11b/g/n
Dual-Mode Bluetooth v4.2
Poderoso suporte de CPU aberta para aplicativos personalizados
Tamanho pequeno e várias opções de antena
Pino compatível com outros módulos NINA
Certificação global
Módulo baseado no ESP32, com 4MB FLASH

SMARTCORE

A SmartCore fornece módulos para comunicação wireless, biometria, conectividade, rastreamento e automação.
Nosso portifólio inclui modem 2G/3G/4G/NB-IoT/Cat.M, satelital, módulos WiFi, Bluetooth, GNSS/GPS, Sigfox, LoRa, leitor de cartão, leitor QR code, mecanismo de impressão, mini-board PC, antena, pigtail, LCD, bateria, repetidor GPS e sensores.
Mais detalhes em www.smartcore.com.br

SOBRE A LINGUAGEM BASIC

BASIC (acrônimo para Beginner's All-purpose Symbolic Instruction Code; em português: Código de Instruções Simbólicas de Uso Geral para Principiantes) é uma linguagem de programação, criada com fins didáticos, pelos professores John George Kemeny, Thomas Eugene Kurtz e Mary Kenneth Keller em 1964 no Dartmouth College.

Basic pode ser uma opção de linguagem para se aprender lógica, uma vez que foi desenvolvida em alto nível (próxima da linguagem humana). Além da sua relativa facilidade de criar aplicações de forma simples e rápida.

BASIC também é o nome genérico dado a uma grande família de linguagens de programação derivadas do BASIC original. Provavelmente existem mais variações de BASIC do que de qualquer outra linguagem de programação.

BASIC ANNEX RDS

ESP-NOW, BLE, MQTT...ÓTIMO PARA IoT

Veja o HELP  do BASIC ANNEX RDS

Veja também FAQ


INTERPRETADOR ?

O interpretador básico funciona através da leitura de um arquivo de script salvo no sistema de arquivamento em disco local esp.

Este é o modo padrão se nenhum SDcard externo estiver conectado ao u-BLOX NINA W106.

Além disso, o Annex32 pode usar um SDcard externo como sistema de arquivos, permitindo até 16 Gbytes de espaço em disco.

Durante a inicialização, se um SDcard externo for detectado, ele será conectado automaticamente e usado como o sistema de arquivos padrão, caso em que o sistema de arquivo interno não será usado.

Como o u-BLOX NINA W106 contém uma boa quantidade de RAM, o script do usuário é copiado do disco para uma área dedicada na memória RAM onde é executado, junto com a lista das linhas do programa, os rótulos dos ramos e a lista do usuário definido sub-rotinas ..

Isso usa mais RAM em comparação com outras abordagens, mas permite uma execução mais rápida do programa.

Outra consideração de desempenho é que o u-BLOX NINA W106 deve ser capaz de executar várias atividades em segundo plano (servidor web, servidor de arquivos, etc.), portanto, precisa de memória livre suficiente para executar tais tarefas, e essas tarefas paralelas obviamente terão um impacto no desempenho do script ..

Portanto, em termos de desempenho, o interpretador não é particularmente rápido, mas deve ser rápido o suficiente para a maioria das tarefas que você pode exigir. 

ESP-NOW


O ESP-NOW é outro protocolo desenvolvido pela Espressif, que permite que vários dispositivos se comuniquem sem usar o Wi-Fi. O protocolo é semelhante à conectividade sem fio de 2,4 GHz de baixa potência, geralmente implantada em mouses sem fio. Portanto, o emparelhamento entre dispositivos é necessário antes da comunicação. Após o emparelhamento, a conexão é segura e ponto a ponto, sem a necessidade de handshake.

Recursos

O ESP-NOW suporta os seguintes recursos:
• Comunicação unicast criptografada e não criptografada.
• Dispositivos pares criptografados e não criptografados.
• Carga útil de até 250 bytes.
• A função de retorno de chamada de envio que pode ser configurada para informar a camada do aplicativo de sucesso ou falha na transmissão.

A tecnologia ESP-NOW também possui as seguintes limitações:

• A transmissão não é suportada.
• Pares criptografados limitados. No máximo 10 pares criptografados são suportados no Station modo; 6 no máximo no modo SoftAP ou SoftAP + Station. Vários pares não criptografados são suportados, no entanto, seu número total deve ser menor que 20, incluindo pares criptografados.
• A carga útil é limitada a 250 bytes

BASIC Annex RDS é muito versátil, um módulo de rede pode usar sua interface wi-fi para ESP-NOW e para rede Wi-Fi IP roteada padrão, podendo se comunicar com os dois tipos de módulos de rede, permitindo que funcione como uma espécie de “gateway” entre ESP -Agora e WiFi roteado.

Cada módulo (peer) contém uma lista de ‘receptores” contendo os endereços MAC de todos os peers que receberão uma mensagem ao usar o comando EspNow.Write (msg$)

 

FUNÇÕES/COMANDOS

DESCRIÇÃO

Ret = EspNow.Begin

Inicia as comunicações com ESP-NOW

Ret = EspNow.Stop

Finaliza as comunicações com ESP-NOW

Ret = EspNow.Add_Peer(MAC_add$)

Adiciona um peer (módulo) para a lista de Recepção

Ret = EspNow.Del_Peer

Remove um peer (módulo) da lista de Recepção

Ret = EspNow.Write(msg$)

Escreve uma mensagem para o peer definido na lista

Ret = EspNow.Write(msg$, MAC_add$)

Escreve uma mensagem para um peer específico definido pelo seu MAC Adrress

Todas essas funções retornam um valor; um valor diferente de zero indica que ocorreu um erro.


Se o valor retornado não for necessário, as funções podem ser usadas como comandos sem leitura em uma variável..


Exemplo :

Ret = EspNow.Write(msg$)               utilizado como função

EspNow.Write msg$               utilizado como comando (sem parênteses)

 

 

FUNÇÕES STRING

DESCRIÇÃO

Msg$ = EspNow.READ$

Lê a mensagem recebida

MAC_add$ = ESPNow.REMOTE$

Lê o MAC Address do emissor da mensagem recebida

Err$ = ESPNow.ERROR$

Lê o MAC Adress do(s) dispositvos que não receberam as mensagens.

 

  

EVENTOS

DESCRIÇÃO

OnEspNowMsg label

tAciona um evento cada vez que uma mensagem é recebida

OnEspNowError label 

tAcione um evento sempre que ocorrer um erro de transmissão.

Isso acontece, em particular, quando o dispositivo receptor não recebeu a mensagem

 

 

ÓTIMO LINK SOBRE ESP-NOW

Introdução ao ESP-NOW 

Aprenda a usar o ESP-NOW para trocar dados entre placas W106 programadas com o BASIC Annex RDS. O ESP-NOW é um protocolo de comunicação sem conexão desenvolvido pela Espressif que possui transmissão de pacotes curtos. Este protocolo permite que vários dispositivos se comuniquem sem usar o Wi-Fi.

Vamos programar o u-BLOX NINA W106 utilizando o BASIC Annex RDS

    Apresentando o ESP-NOW

    Depois de emparelhar um dispositivo, a conexão é persistente. Em outras palavras, se de repente uma de suas placas perder energia ou redefinir, quando reiniciar, ela se conectará automaticamente ao seu par para continuar a comunicação.
    Em palavras simples, o ESP-NOW é um protocolo de comunicação rápido que pode ser usado para trocar pequenas mensagens (até 250 bytes) entre placas u-BLOX NINA W106.
    O ESP-NOW é muito versátil e você pode ter comunicação unidirecional ou bidirecional em diferentes configurações.

    Comunicação unidirecional ESP-NOW

    Por exemplo, na comunicação unidirecional, você pode ter cenários como este:
    • Uma placa u-BLOX NINA W106 enviando dados para outra placa u-BLOX NINA W106
    Essa configuração é muito fácil de implementar e é ótimo enviar dados de uma placa para outra, como leituras do sensor ou comandos ON e OFF para controlar os GPIOs.
    • Um u-BLOX NINA W106 "mestre" enviando dados para vários "escravos" do u-BLOX NINA W106
    Uma placa u-BLOX NINA W106  enviando comandos iguais ou diferentes para diferentes placas u-BLOX NINA W106. Essa configuração é ideal para criar algo como um controle remoto. Você pode ter várias placas u-blox NINA W106 espalhadas pela casa que são controladas por uma placa principal do u-BLOX NINA W106.


    • Um "escravo" do u-BLOX NINA W106 recebendo dados de vários "mestres"
    Essa configuração é ideal se você deseja coletar dados de vários nós de sensores em uma placa u-BLOX NINA W106. Isso pode ser configurado como um servidor da web para exibir dados de todas as outras placas, por exemplo.

    Nota: na documentação do ESP-NOW não existem “remetente/mestre” e “receptor/escravo”. Cada quadro pode ser um remetente ou receptor. No entanto, para manter as coisas claras, usaremos os termos "remetente" e "destinatário" ou "mestre" e "escravo".

    Comunicação bidirecional ESP-NOW

    Com o ESP-NOW, cada placa pode ser um remetente e um destinatário ao mesmo tempo. Assim, você pode estabelecer uma comunicação bidirecional entre placas.
    Por exemplo, você pode ter duas placas se comunicando.
    Você pode adicionar mais placas a essa configuração e ter algo parecido com uma rede (todas as placas u-BLOX NINA W106 se comunicam).

    Em resumo, o ESP-NOW é ideal para construir uma rede na qual você pode ter várias placas u-BLOX NINA W106 trocando dados entre si.

    u-BLOX ninaW106: Obtendo o endereço MAC da placa

    Para se comunicar via ESP-NOW, você precisa saber o endereço MAC do receptor u-BLOX NINA W106 . É assim que você sabe para qual dispositivo enviará as informações.
    Cada u-BLOX NINA W106 possui um endereço de MAC exclusivo e é assim que identificamos cada placa para enviar dados usando o ESP-NOW 
    Para obter o endereço MAC da sua placa, carregue o código BASIC a seguir.

    Print MAC$

    62:01:94:5E:37:8D

    Comunicação ponto a ponto unidirecional ESP-NOW

    Para começar com a comunicação sem fio ESP-NOW, criaremos um projeto simples que mostra como enviar uma mensagem de um u-BLOX NINA W106 para outro. Um u-BLOX NINA W106 será o "remetente" e o outro u-BLOX NINA W106 será o "receptor".
    SENSOR AND RECEIVER

    CÓDIGO DO MÓDULO RECEIVER


    'ESP-NOW receiver example

    print "init " ; espnow.begin  ' should print 0 if all OK

    onEspNowMsg message ' set the place where jump in case of message reception

    wait

     

    message:

    print "RX:"espnow.read$" from "espnow.remote$ ' print the message

    return


    CÓDIGO DO MÓDULO SENSOR


    'ESP-NOW sensor example

    RECEIVER_MAC$ = "60:01:94:51:D0:7D" ' MAC address of the receiver

    print "init " ; espnow.begin  ' should print 0 if all OK

    espnow.add_peer RECEIVER_MAC$    ' set the address of the receiver

    onEspNowError status ' set the place where jump in case of TX error

    timer0 1000, sendMessage ' trigger a message at each second

    wait

     

    sendMessage:

    espnow.write "Sensor 1 : " + str$(rnd(1000)) ' send the message

    return

     

    status:

    print "TX error on "espnow.error$  ' print the error

     return


    Agora um exemplo em que um Sensor manda um dado para um Receiver e o mesmo responde com o dado recebido.
    Sensor  e Receiver
    'ESP-NOW receiver example RECEIVER_MAC$ = "A4:CF:12:75:31:C8" ' MAC address of the receiver print "init " ; espnow.begin ' should print 0 if all OK espnow.add_peer RECEIVER_MAC$ ' set the address of the receiver onEspNowMsg message ' set the place where jump in case of message reception wait message: print espnow.read$; " from "; espnow.remote$ ' print the message espnow.write espnow.read$ ' send the message return








    'ESP-NOW sensor example RECEIVER_MAC$ = "F0:08:D1:C8:9D:D8" ' MAC address of the receiver print "init " ; espnow.begin ' should print 0 if all OK espnow.add_peer RECEIVER_MAC$ ' set the address of the receiver onEspNowError status ' set the place where jump in case of TX error timer0 1000, sendMessage ' trigger a message at each second onEspNowMsg message ' set the place where jump in case of message reception wait message: print "Receive " + espnow.read$; " from "; espnow.remote$ ' print the message return sendMessage: rand = rnd(1000) print "Transmit " + str$(rand) espnow.write str$(rand) ' send the message return status: print "TX error on "; espnow.error$ ' print the error return










    Vejamos um exemplo com 3 módulos com 2 atuando como sensores e o terceiro como receptor.

    Os módulos sensores enviarão uma mensagem a cada segundo para o receptor.


    O receptor imprimirá essas mensagens no console.


    Figura Adaptada


    Código para o módulo SENSOR1


    'ESP-NOW sensor1 example

    RECEIVER_MAC$ = "60:01:94:51:D0:7D" ' MAC address of the receiver

    print "init " ; espnow.begin  ' should print 0 if all OK

    espnow.add_peer RECEIVER_MAC$    ' set the address of the receiver

    onEspNowError status ' set the place where jump in case of TX error

    timer0 1000, sendMessage ' trigger a message at each second

    wait

     

    sendMessage:

    espnow.write "Sensor 1 : " + str$(rnd(1000)) ' send the message

    return

     

    status:

    print "TX error on "espnow.error$  ' print the error

    return


    Código para o módulo SENSOR2


    'ESP-NOW sensor2 example

    RECEIVER_MAC$ = "60:01:94:51:D0:7D" ' MAC address of the receiver

    print "init " ; espnow.begin  ' should print 0 if all OK

    espnow.add_peer RECEIVER_MAC$    ' set the address of the receiver

    onEspNowError status ' set the place where jump in case of TX error

    timer0 1000, sendMessage ' trigger a message at each second

    wait

     

    sendMessage:

    espnow.write "Sensor 1 : " + str$(rnd(1000)) ' send the message

    return

     

    status:

    print "TX error on "espnow.error$  ' print the error

    return

     

    Código para o módulo RECEIVER


    'ESP-NOW receiver example

    print "init " ; espnow.begin  ' should print 0 if all OK

    onEspNowMsg message ' set the place where jump in case of message reception

    wait

     

    message:

    print "RX:"espnow.read$" from "espnow.remote$ ' print the message

    return


    Vamos ver outro exemplo sempre com 2 sensores e um receptor.

    Neste caso, o receptor retransmitirá de volta ao sensor 1 a mensagem recebida.

    Isso significa que o sensor 1 receberá a mensagem vinda do sensor 2 e também sua própria mensagem.

    O sensor 1 e o receptor irão imprimir as mensagens recebidas no console


    Figura Adaptada


    Código para o módulo SENSOR1


    'ESP-NOW sensor example

    RECEIVER_MAC$ = "60:01:94:51:D0:7D"

    print "init " ; espnow.begin  ' should print 0 if all OK

    espnow.add_peer RECEIVER_MAC$    ' set the address of the receiver

    onEspNowMsg message ' set the place where jump in case of message reception

    onEspNowError status ' set the place where jump in case of TX error

    timer0 1000, sendMessage ' trigger a message at each second

    wait

     

    sendMessage:

    espnow.write "Sensor 1 : " + str$(rnd(1000)) ' send the message

    return

     

    message:

    print "RX:"espnow.read$" from "espnow.remote$ ' print message

    return

     

    status:

    print "TX error on "espnow.error$  ' print the error

    return

      

    Código para o módulo SENSOR2


    'ESP-NOW sensor2 example

    RECEIVER_MAC$ = "60:01:94:51:D0:7D" ' MAC address of the receiver

    print "init " ; espnow.begin  ' should print 0 if all OK

    espnow.add_peer RECEIVER_MAC$    ' set the address of the receiver

    onEspNowError status ' set the place where jump in case of TX error

    timer0 1000, sendMessage ' trigger a message at each second

    wait

     

    sendMessage:

    espnow.write "Sensor 1 : " + str$(rnd(1000)) ' send the message

    return

     

    status:

    print "TX error on "espnow.error$  ' print the error

    return


    Código para o módulo RECEIVER


    'ESP-NOW receiver example #2

    SENSOR1_MAC$ = "68:C6:3A:C3:06:DB"

    print "init " ; espnow.begin  ' should print 0 if all OK

    espnow.add_peer SENSOR1_MAC$    ' set the address of the sensor 1

    onEspNowMsg message ' set the place where jump in case of message reception

    wait

     

    message:

    msg$ = espnow.read$

    rem$ = espnow.remote$

    print "RX:"; msg$; " from "; rem$

    ret = espnow.write( msg$ + " Transferred from " + rem$ ) ' transfer the message received

    return

     

    status:

    print "TX error on "espnow.error$ ' print the message

    return


    Vejamos agora outro exemplo em que um sensor enviará uma mensagem para 2 destinatários:

     

    Figura Adaptada

    Código para o módulo SENSOR


    'ESP-NOW sensor example

    RECEIVER1_MAC$ = "60:01:94:51:D0:7D"

    RECEIVER2_MAC$ = "68:C6:3A:C3:06:DB"

    print "init " ; espnow.begin  ' should print 0 if all OK

    espnow.add_peer RECEIVER1_MAC$    ' set the address of the receiver 1

    espnow.add_peer RECEIVER2_MAC$    ' set the address of the receiver 2

    onEspNowError status ' set the place where jump in case of TX error

    timer0 1000, sendMessage ' trigger a message at each second

    wait

     

    sendMessage:

    espnow.write "Sensor : " + str$(rnd(1000)) ' send the message

    return

     

    status:

    print "TX error on "espnow.error$  'print the error

    return

     

    Código para o módulo RECEIVER 1


    'ESP-NOW receiver example

    print "init " ; espnow.begin  ' should print 0 if all OK

    onEspNowMsg message ' set the place where jump in case of message reception

    wait

     

    message:

    print "RX:"espnow.read$" from "espnow.remote$ ' print the message

    return 


    Código para o módulo RECEIVER 2


    'ESP-NOW receiver example

    print "init " ; espnow.begin  ' should print 0 if all OK

    onEspNowMsg message ' set the place where jump in case of message reception

    wait

     

    message:

    print "RX:"espnow.read$" from "espnow.remote$ ' print the message

    return


    DÚVIDAS

    suporte@smartcore.com.br

    REFERÊNCIAS

    Sobre a SMARTCORE

    A SmartCore fornece módulos para comunicação wireless, biometria, conectividade, rastreamento e automação.
    Nosso portfólio inclui modem 2G/3G/4G/NB-IoT/Cat.M, satelital, módulos WiFi, Bluetooth, GNSS / GPS, Sigfox, LoRa, leitor de cartão, leitor QR code, mecanismo de impressão, mini-board PC, antena, pigtail, LCD, bateria, repetidor GPS e sensores.
    Mais detalhes em www.smartcore.com.br

    Nenhum comentário:

    Postar um comentário