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.
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 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)
Suporte: suporte@smartcore.com.br
Fontes:
Fontes: