sábado, 5 de setembro de 2020

NINA B112 - PROGRAMANDO EM PYTHON - ZERYNTH

 

O objetivo deste BLOG é demonstrar de forma resumida como é possível fazer com que o módulo NINA B112 possa ser programado em Python mediante a plataforma Zerynth.

Neste projeto, construiremos um dispositivo BLE (Bluetooth Low Energy) que transmite dados da Bateria (65%) a cada 1 segundo.

Foi utilizado o ST-LINK para gravação da aplicação no NINA B112. Sem tenha a versão do ST-LINK atualizado!




Sobre a Zerynth

Zerynth simplifica o desenvolvimento de IoT fornecendo uma maneira fácil e eficiente de programar os microcontroladores de 32 bits mais populares em Python e conectá-los às principais infraestruturas de nuvem, com padrões de segurança de alto nível. Com P&D em Pisa, Itália, e uma equipe de vendas global, Zerynth está ajudando milhares de desenvolvedores em todo o mundo a desenvolver novos produtos de IoT e aplicativos da Indústria 4.0 com custos reduzidos e melhor tempo de colocação no mercado.

Zerynth compreende um conjunto de ferramentas de desenvolvimento de software que aceleram o design do produto IoT, simplificando a programação de firmware de microprocessadores de 32 bits - como o dispositivo Arm® Cortex ™ de 64 MHz do SoC nRF52840 - usando Python ou C / Python “híbrido”. (A programação C / Python é útil para codificação de baixo nível para tarefas críticas de tempo, ao mesmo tempo que mantém a flexibilidade e legibilidade do Python para tarefas não críticas.) O produto também oferece suporte à conexão segura com os principais serviços de nuvem e facilita a integração de hardware com sensores, atuadores, e protocolos industriais. O design e o desenvolvimento são ainda mais simplificados pela disponibilidade de uma lista crescente de bibliotecas de código aberto disponíveis no GitHub.
 
As ferramentas de software compreendem ‘Zerynth Virtual Machine’ e ‘Zerynth Studio’. Zerynth Virtual Machine é uma máquina virtual multithread, baseada em pilha, construída em cima de um sistema operacional em tempo real (RTOS). A máquina virtual é independente do hardware, permitindo a reutilização de código em uma ampla gama de microcontroladores de 32 bits. Quando executado no NINA B112, a máquina virtual usa apenas 60 a 80kB da alocação de Flash de 1 MB do chip e 3 a 5kB de sua alocação de 256kB de RAM.

Zerynth Studio é um ambiente de desenvolvimento integrado (IDE) poderoso e gratuito para o desenvolvimento de aplicativos Python ou híbridos C/Python. O IDE inclui um compilador, um depurador e um editor de código avançado, juntamente com tutoriais e projetos de exemplo para aprendizado rápido.
 
Zerynth Virtual Machine foi desenvolvido com o objetivo de trazer a linguagem de programação de alto nível, Python, para o mundo embarcado com suporte para compatibilidade multithread e cross board. A máquina virtual oferece suporte à maioria dos recursos de alto nível do Python, incluindo módulos, classes, multithreading, retorno de chamada, temporizadores e exceções. Além disso, a máquina virtual permite o uso de recursos personalizados relacionados ao hardware, como interrupções, modulação por largura de pulso (PWM) e E/S digital.



 Uma licença gratuita para acessar a Máquina Virtual Zerynth é concedida uma vez que o desenvolvedor cria uma conta Zerynth. A máquina virtual é então instalada no NINA B112 permitindo que o desenvolvedor comece a programar usando o Zerynth Studio. O recurso de atualização de firmware de dispositivo over-the-air (OTA-DFU) do Nordic SoC garante que a máquina virtual incorporada possa ser atualizada regularmente. Os serviços de nuvem com suporte - por exemplo, AWS, Google Cloud Platform e IBM Cloud - permitem ao desenvolvedor visualizar seus dados usando o aplicativo Zerynth ou um painel IoT de terceiros.

Python é uma linguagem de programação interpretada, orientada a objetos e de alto nível com semântica dinâmica. As estruturas de dados de alto nível da linguagem de programação, combinadas com tipagem dinâmica e vinculação dinâmica, tornam-na útil para o desenvolvimento rápido de aplicativos, bem como para uso como linguagem de script para conectar componentes existentes.

Stack Zerynth

Habilitando o uso de Python para microcontroladores e soluções incorporadas, Zerynth permite:

Redução do tempo de comercialização
Flexibilidade
Escalabilidade
Tudo isso é possível graças ao Zerynth Stack. Os principais componentes são:

MAIS SOBRE ZERYNTH STUDIO: um IDE multiplataforma para desenvolver seu código Python ou híbrido C / Python e gerenciar suas placas. Inclui um compilador, um depurador e um editor, além de tutoriais e projetos de exemplo para uma experiência de aprendizado fácil. Você pode baixar Zerynth Studio e começar com uma das placas suportadas gratuitamente!



MAIS SOBRE ZERYNTH VIRTUAL MACHINE: um sistema operacional multithread em tempo real que fornece independência de hardware real, permitindo a reutilização de código em um amplo conjunto de microcontroladores de 32 bits. A VM oferece suporte à maioria dos recursos de alto nível do Python, como módulos, classes, multithreading, callback, temporizadores e exceções. Além disso, permite o uso de recursos personalizados relacionados ao hardware, como interrupções, PWM, E / S digital e um grande número de bibliotecas: de conectividade a sensores e atuadores.

ZERYNTH ADVANCED DEVICE MANAGER: um gerenciador de dispositivos compatível com muitos provedores de nuvem (como Azure, Kinetis, Bluemix, Amazon), expondo uma interface simples baseada em API para coleta de dados, atuação e integração móvel.

ZERYNTH APP: uma interface de propósito geral para objetos movidos a Zerynth que transforma qualquer dispositivo móvel em controlador e display para objetos inteligentes e sistemas IoT. Você não precisa escrever nenhum código separado para Android ou iOS.


Do protótipo à produção

A versão gratuita do Zerynth Studio permite que você use todos os recursos necessários para criar um protótipo de suas soluções BLE, mas você pode programar gratuitamente até 5 unidades de cada placa suportada. Você pode desbloquear esse limite com a versão Zerynth Studio PRO (disponível a partir de 28 de junho de 2017), que também incluirá recursos de nível industrial como:

RTOS selecionável;
Desenvolvimento de atualização Over the Air;
Firmware protegido por hardware gravado no dispositivo em volumes industriais;
… e muito mais

O fluxo para criação de um projeto é o seguinte:

Crie um projeto;
Escolhe o hardware que será conectado;
Preparação do hardware para executar o código Zerynth carregando a máquina virtual nele, um processo chamado “virtualização”;
Adicione os arquivos Python ao projeto;
Compilação do projeto para o hardware em questão, obtendo o bytecode executável;
Uplink o bytecode para o device “virtualizado”;
Inspecione a saída do dispositivo pelo monitor serial.

Middleware Zerynth

O middleware Zerynth possibilita aos desenvolvedores programar microcontroladores 32 bits e poder conectá-los à nuvem (os que possuem hardware para isso, é claro). As principais características são:

Misturar Python 3 e C para um desenvolvimento eficiente;
Footprint pequeno: Zerynth requer apenas 60 à 80kB de memória Flash e de 3 à 5kB de memória RAM;
Integra um RTOS de sua escolha (FreeRTOS ou ChibiOS), pois isto é possível durante a virtualização do device. Com suporte a multithreading;
Conectividade: permite uma fácil integração com serviços de Cloud e Firmware Over the Air (FOTA).
Tudo isso é possível graças ao conjunto modular Zerynth de ferramenta de software que forma o ecossistema Zerynth:

Zerynth Virtual Machine;
Zerynth Studio;
Zerynth ADM;
Zerynth App.
O acesso a este middleware Zerynth é feito quando o kit / placa é virtualizado.

Bibliotecas

Zerynth Studio possui a própria biblioteca composta por vários módulos variando desde interrupções, PWM, GPIOs e característica de alto nível Python como: módulos, classes, multithreading, callbacks, timers e exceptions.

Adicionando, a IDE utiliza bibliotecas oficiais de parceiros / fabricantes. Ambas bibliotecas estão incluídas no Zerynth e possam ser utilizados conforme o hardware do projeto. Neste link, você tem acesso a todas bibliotecas possíveis.

Código fonte
################################################################################ # BLE Battery Service # # Created by Zerynth Team 2016 CC # Author: G. Baldi ############################################################################### import streams # import a BLE driver: in this example we use NRF52 from nordic.nrf52_ble import nrf52_ble as bledrv # then import the BLE modue from wireless import ble streams.serial() # initialize NRF52 driver bledrv.init() # Set GAP name ble.gap("Zerynth") # Create a GATT Service: let's try a Battery Service (uuid is 0x180F) s = ble.Service(0x180F) # Create a GATT Characteristic: (uuid for Battery Level is 0x2A19, and it is an 8-bit number) c = ble.Characteristic(0x2A19,ble.NOTIFY | ble.READ,1,"Battery Level",ble.NUMBER) # Add the GATT Characteristic to the Service s.add_characteristic(c) # Add the Service ble.add_service(s) # Start the BLE stack ble.start() # Begin advertising ble.start_advertising() while True: print(".") sleep(1000) # Let's update the Characteristic Value c.set_value(65)





















CÓDIGO PYTHON

REGISTRANDO DISPOSITIVO

VIRTUALIZANDO

COMPILANDO

GRAVANDO COM ST-LINK

DEBUGANDO


Dicas importantes

-Foi utilizado como gravador o ST-LINK.
-Foi utilizado como Hardware similar ao NINA B112, por conter o NRF52832, o Nordic NRF52 DK
-Foi alterado o arquivo C:\Users\USER\zerynth2\dist\r2.3.0\sys\openocd\scripts\board\nordic_nrf52_dk.cfg para

#
# Nordic Semiconductor NRF52 Development Kit (nRF52832)
#
source [find interface/jlink.cfg]
transport select hla_swd
source [find target/nrf52.cfg]
-Use arquivo port.def para ver o mapa de GPIOS e adequar com o módulo NINA B112



UTILIZANDO BLE SCANNER



TESTES COM BLE E PLACA


Alterei o código para piscar o LED no PINO 5 (D3, P0.14)

pinMode(D3,OUTPUT) while True: # Let's update the Characteristic Value c.set_value(65) digitalWrite(D3, HIGH) # turn the LED ON by setting the voltage HIGH sleep(500) # wait for a second digitalWrite(D3, LOW) # turn the LED OFF by setting the voltage LOW sleep(500)







 

Sobre a 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

 

Nenhum comentário:

Postar um comentário