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

 

quinta-feira, 3 de setembro de 2020

NINA B112 - zephyr - Platformio - lendo CCS811 e acessando via BLE

 

O objetivo deste BLOG é demonstrar de forma resumida como é possível fazer com que o módulo NINA B112 possa rodar o RTOS Zephry, mas utilizando o Framework Platformio. 

Neste projeto, construiremos um dispositivo BLE (Bluetooth Low Energy) que transmite dados de um Sensor de Qualidade do Ar - CO2 e TVOC - CCS811. Para isso, utilizaremos o Zephyr RTOS na placa EVK-NINA-B112 com base no Nordic nRF52832 SoC. Para programar o utilizaremos o J-LINK.


Sobre RTOS Zephyr

O sistema operacional Zephyr é baseado em um kernel de pequena dimensão projetado para uso em sistemas com recursos restritos e embarcados: de sensores ambientais incorporados simples e wearables de LED a sofisticados controladores embarcados, relógios inteligentes e aplicativos sem fio IoT.

O Projeto Zephyr RTOS é um esforço recente da Fundação Linux para fornecer ao mundo embarcado um Sistema Operacional em Tempo Real gratuito, seguro e completo. Ele foi projetado desde o início para ser um RTOS moderno, escalável, seguro e responsivo com um foco claro em protocolos e fundações de IoT. Este RTOS de código aberto é licenciado pelo Apache 2.0 e possui um modelo de desenvolvimento totalmente aberto

Recentemente, a Nordic contribuiu com portas para todos os CIs baseados em Cortex-M (nRF51, nRF52832  (NINA B1) e nRF52840 (NINA B3), bem como um Controlador BLE de fonte aberta (Link Layer + HCI) totalmente funcional, altamente otimizado para a família de ICs nRF5x. Isto significa que você pode clonar, construir e executar o Zephyr hoje e aproveitar todos os recursos que ele permite, incluindo muitos perfis BLE padrão, IPv6 sobre BLE e um conjunto rico de APIs e funcionalidades que se esperaria de um RTOS moderno. Além disso, todas as linhas de código, incluindo o Host e o Controlador BLE, são totalmente de código aberto, permitindo que você modifique e modifique seu comportamento ou até mesmo estenda isso à vontade. Você pode até mesmo construir seu próprio controlador e depois usá-lo para controlá-lo de uma pilha Host externa ou executar o resto do RTOS em seu computador utilizando o QEMU!

Características


O Zephyr oferece um grande e crescente número de recursos, incluindo:

Extenso conjunto de serviços do kernel

A Zephyr oferece vários serviços familiares para desenvolvimento:

Serviços de multiencadeamento para encadeamentos cooperativos, com base em prioridade, não preemptivos e preemptivos, com fatiamento de tempo round-robin opcional. Inclui suporte à API compatível com POSIX pthreads.
Serviços de interrupção para registro em tempo de compilação de manipuladores de interrupção.
Serviços de alocação de memória para alocação dinâmica e liberação de blocos de memória de tamanho fixo ou variável.
Serviços de Sincronização Inter-thread para semáforos binários, semáforos de contagem e semáforos mutex.
Serviços de transmissão de dados entre threads para filas de mensagens básicas, filas de mensagens aprimoradas e fluxos de bytes.
Serviços de gerenciamento de energia, como inatividade sem marcas e uma infraestrutura avançada inativa.

Algoritmos de Agendamento Múltiplos

O Zephyr fornece um conjunto abrangente de opções de agendamento de threads:

Programação Cooperativa e Preemptiva
Primeiro Prazo Primeiro (EDF)
Programação de meta-IRQ implementando o comportamento “interromper a metade inferior” ou “tarefa”
Timeslicing: permite a divisão de tempo entre encadeamentos preemptivos de prioridade igual
Várias estratégias de enfileiramento:
Fila pronta de lista vinculada simples
Fila pronta de árvore vermelha / preta
Fila pronta multi-fila tradicional

Altamente configurável / modular para flexibilidade

Permite que um aplicativo incorpore somente os recursos de que precisa, conforme necessário, e especifique sua quantidade e tamanho.

Arquitetura Cruzada

Suporta uma ampla variedade de placas suportadas com diferentes arquiteturas de CPU e ferramentas de desenvolvedor. Contribuições adicionaram suporte para um número crescente de SoCs, plataformas e drivers.

Proteção de Memória

Implementa proteção de estouro de pilha específica para arquitetura configurável, rastreamento de permissão de objeto de kernel e driver de dispositivo e isolamento de thread com proteção de memória em nível de encadeamento em arquiteturas x86, ARC e ARM, espaço de usuário e domínios de memória.

Para plataformas sem MMU / MPU e dispositivos com memória restrita, suporta a combinação de código específico de aplicativo com um kernel personalizado para criar uma imagem monolítica que seja carregada e executada no hardware de um sistema. Tanto o código do aplicativo quanto o código do kernel são executados em um único espaço de endereçamento compartilhado.

Definição de Recurso em Tempo de Compilação

Permite que os recursos do sistema sejam definidos em tempo de compilação, o que reduz o tamanho do código e aumenta o desempenho de sistemas com recursos limitados.

Modelo de driver de dispositivo otimizado

Fornece um modelo de dispositivo consistente para configurar os drivers que fazem parte da plataforma / sistema e um modelo consistente para inicializar todos os drivers configurados no sistema e permite a reutilização de drivers em plataformas que possuem dispositivos comuns / bloqueios de IP

Suporte a árvore de dispositivos

Uso de Device Tree (DTS) para descrever informações de hardware e configuração para placas. As informações do DTS serão usadas somente durante o tempo de compilação. Informações sobre o sistema são extraídas do DTS compilado e usadas para criar a imagem do aplicativo.

Rede Nativa Stack suportando vários protocolos

O suporte de rede é totalmente caracterizado e otimizado, incluindo suporte compatível com sockets LwM2M e BSD. O suporte a OpenThread (em chipsets NORDIC) também é fornecido - uma rede em malha projetada para conectar de forma segura e confiável centenas de produtos ao redor da casa.

Suporte para Bluetooth Low Energy 5.0


Compatível com Bluetooth 5.0 (ESR10) e suporte a controlador de baixa energia Bluetooth (LE Link Layer). Inclui BLE Mesh e um controlador BLE pronto para qualificação Bluetooth.

Perfil genérico de acesso (GAP) com todas as funções possíveis de LE.
GATT (Perfil de Atributo Genérico)
Suporte de emparelhamento, incluindo o recurso Conexões seguras do Bluetooth 4.2
Clara a abstração do driver de HCI
Interface HCI bruta para executar o Zephyr como um Controlador em vez de uma pilha Host completa
Verificado com vários controladores populares
Altamente configurável

Suporte de malha (MESH)

Recursos de relé, nó de amigo, nó de baixa potência (LPN) e proxy do GATT
Ambos os portadores de provisionamento suportados (PB-ADV e PB-GATT)
Altamente configurável, encaixando em dispositivos com pelo menos 16k de RAM

Linux nativo, macOS e Windows Development


Um ambiente de compilação CMake de linha de comando é executado em sistemas populares de sistemas operacionais de desenvolvedores. Uma porta POSIX nativa, permite criar e executar o Zephyr como um aplicativo nativo no Linux e em outros sistemas operacionais, auxiliando no desenvolvimento e nos testes.

Interface de sistema de arquivos virtual com suporte a NFFS e FATFS

Sistema de arquivos Flash Newtron (NFFS) e suporte a FATFS, FCB (Flash Circular Buffer) para aplicativos com restrições de memória e aprimoramentos do sistema de arquivos para criação de log e configuração.

Estrutura poderosa de log de vários back-ends

Suporte para filtragem de log, despejo de objetos, modo de pânico, múltiplos backends (memória, rede, sistema de arquivos, console, ..) e integração com o subsistema shell.

Interface amigável e cheia de recursos do Shell

Um subsistema de shell de várias instâncias com recursos fáceis de usar, como autocompletar, curingas, coloração, metacarys (setas, backspace, ctrl + u, etc.) e histórico. Suporte para comandos estáticos e subcomandos dinâmicos.


Configurações no armazenamento não volátil

O subsistema de configurações fornece aos módulos uma maneira de armazenar a configuração persistente por dispositivo e o estado de tempo de execução. Os itens de configurações são armazenados como sequências de pares de valores-chave.

Armazenamento não volátil (NVS)

O NVS permite o armazenamento de blobs binários, strings, inteiros, longs e qualquer combinação destes.

Porta POSIX nativa


Suporta rodar o Zephyr como um aplicativo Linux com suporte para vários subsistemas e redes.

CCS811

O CCS811 é um sensor digital de gás miniatura de baixa potência para monitoramento da qualidade do ar. Um sensor de óxido de metal (MOX) é integrado para medir o total de compostos orgânicos voláteis equivalentes de TVOCs e CO2, com isso, é possível realizar o monitoramento da qualidade do ar, quando funcionando em conjunto com um microcontrolador Arduino, Raspberry, Pic, ou outros. O módulo é baseado na tecnologia exclusiva de microplacas, ou seja, a placa apresenta uma solução altamente confiável para projetos que exigem o sensor de gás, tempos de ciclo rápidos e uma redução significativa na potência média de consumo. O MCU integrado gerencia os modos de acionamento do sensor e dos dados medidos. O CCS811 suporta algoritmos inteligentes para processar as medições e emitir um valor TVOC ou CO2 equivalentes, além de suportar múltiplos modos de medição que são otimizados para baixo consumo de energia, prolongando assim a vida útil da bateria em dispositivos portáteis.

Principais Características:

Tensão de alimentação: 1,8 à 3,6VDC;
Corrente de alimentação: 30mA;
Potência consumida: 60mW;
Temperatura de operação: -5º ~ 50°C;
Temperatura de armazenamento: -40º ~ 125ºC;
Humidade relativa: 10 ~ 95%;
Interface: I2C;
Datasheet: Sensor de Qualidade do Ar - CO2 e TVOC - CCS811
ESPECIFICAÇÕES:

Principais Características:

Tensão de alimentação: 1,8 à 3,6VDC;
Corrente de alimentação: 30mA;
Potência consumida: 60mW;
Temperatura de operação: -5º ~ 50°C;
Temperatura de armazenamento: -40º ~ 125ºC;
Humidade relativa: 10 ~ 95%;
Interface: I2C;
Datasheet: Sensor de Qualidade do Ar - CO2 e TVOC - CCS811

SOBRE PLATFORMIO

O PlatformIO IDE é um ecossistema de código-aberto para desenvolvimento em IoT. Tem suporte para diversos tipos de placas, entre elas Arduino e Raspberry Pi. Permite, portanto, que se use uma única ferramenta de desenvolvimento para diferentes microcontroladores. É escrito em Python e não necessita de nenhuma biblioteca ou ferramenta adicional. Foi nomeado para "Best Software and Tools in the 2015/16 IoT Awards".

Resumo de Instalação (PLATFORMIO) e PROJETO ZEPHYR BLE

1) Instale o Platformio em sua máquina
2) Importe o projeto
https://github.com/tcpipchip/zephyr_linux_to_platfomio/tree/master/zephyr-ble-beacon
3) Aguarde Platformio incluir os pacotes do Zephyr
4) Compile
5) Transfira para o NINA B112

Código fonte
/* main.c - Application main entry point */ /* * Copyright (c) 2015-2016 Intel Corporation * * SPDX-License-Identifier: Apache-2.0 */ //#define BME680_CHIP true #define CCS811_CHIP true #include <zephyr/types.h> #include <stddef.h> #include <sys/printk.h> #include <sys/util.h> #include <sensor.h> #include <gpio.h> #include <bluetooth/bluetooth.h> #include <bluetooth/hci.h> #include <device.h> #include <drivers/i2c.h> #include <stdio.h> struct device* port0; #define DEVICE_NAME CONFIG_BT_DEVICE_NAME #define DEVICE_NAME_LEN (sizeof(DEVICE_NAME) - 1) static volatile u8_t mfg_data[] = { 0x00, 0x00, 0xaa, 0xbb }; static const struct bt_data ad[] = { BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)), BT_DATA(BT_DATA_MANUFACTURER_DATA, mfg_data, 4) }; /* Set Scan Response data */ static const struct bt_data sd[] = { BT_DATA(BT_DATA_NAME_COMPLETE, DEVICE_NAME, DEVICE_NAME_LEN), }; static void bt_ready(int err) { if (err) { return; } /* Start advertising */ err = bt_le_adv_start(BT_LE_ADV_NCONN, ad, ARRAY_SIZE(ad), sd, ARRAY_SIZE(sd)); if (err) { return; } } #ifdef CCS811_CHIP static struct device* dev_ccs811; struct sensor_value co2, voc, voltage, current; // print CSS811 data void update_sensor_data() { sensor_sample_fetch(dev_ccs811); sensor_channel_get(dev_ccs811, SENSOR_CHAN_CO2, &co2); sensor_channel_get(dev_ccs811, SENSOR_CHAN_VOC, &voc); sensor_channel_get(dev_ccs811, SENSOR_CHAN_VOLTAGE, &voltage); sensor_channel_get(dev_ccs811, SENSOR_CHAN_CURRENT, &current); printk("Co2: %d.%06dppm; VOC: %d.%06dppb\n", co2.val1, co2.val2, voc.val1, voc.val2); printk("Voltage: %d.%06dV; Current: %d.%06dA\n\n", voltage.val1, voltage.val2, current.val1, current.val2); mfg_data[0] = (uint8_t) co2.val1; mfg_data[1] = (uint8_t) co2.val2; mfg_data[2] = (uint8_t) voc.val1; mfg_data[3] = (uint8_t) voc.val2; // flash LED gpio_pin_write(port0, 18, 0); k_sleep(100); gpio_pin_write(port0, 18, 1); k_sleep(100); gpio_pin_write(port0, 18, 0); k_sleep(1000); } void main(void) { int err; port0 = device_get_binding("GPIO_0"); gpio_pin_configure(port0, 18, GPIO_DIR_OUT); //NINA B112 GPIO // flash LED gpio_pin_write(port0, 18, 0); //NINA B112 GPIO k_sleep(100); gpio_pin_write(port0, 18, 1); //NINA B112 GPIO k_sleep(100); gpio_pin_write(port0, 18, 0); //NINA B112 GPIO k_sleep(1000); dev_ccs811 = device_get_binding("CCS811"); /* Initialize the Bluetooth Subsystem */ err = bt_enable(bt_ready); if (err) { } while(1) { k_sleep(K_MSEC(4000)); update_sensor_data(); bt_le_adv_update_data(ad, ARRAY_SIZE(ad), NULL, 0); } }



















EDITANDO

COMPILANDO

TRANSFERINDO PARA NINA B112

PROJETO

GPIOS DO NINA B112 PARA I2C

prj.conf

UTILIZANDO BLE SCANNER

TESTES NA PLACA





 

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