NINA W106 - PROGRAMANDO EM PYTHON - ZERYNTH
O objetivo deste BLOG é demonstrar de forma resumida como é possível fazer com que o módulo NINA W106 possa ser programado em Python mediante a plataforma Zerynth.
Neste projeto, construiremos um dispositivo BLE (Bluetooth Low Energy) com a função de um beacon EDDYSTONE. Ao aproximar um celular com BLE SCANNER, você poderá entrar em uma página clicando na URL.
Neste projeto, construiremos um dispositivo BLE (Bluetooth Low Energy) com a função de um beacon EDDYSTONE. Ao aproximar um celular com BLE SCANNER, você poderá entrar em uma página clicando na URL.
EVK NINA W106
EDDYSTONE
Com o Eddystone, você ainda pode criar funcionalidades semelhantes para incluir dois níveis de hierarquia. Isso inclui um Beacon ID de 16 bytes, composto por um namespace de 10 bytes e uma instância de 6 bytes.
O Eddystone fornece quatro tipos de quadros:
- Eddystone-UID : esse tipo é semelhante à configuração de UUID + Maior + Menor do iBeacon. Ele define um Beacon ID de 16 bytes composto por um namespace de 10 bytes e uma instância de 6 bytes. Por exemplo, o espaço para nome poderia definir o ID de um varejista nacional para suas lojas e a instância se referiria a cada loja exclusivamente.
- Eddystone-URL : esse tipo fornece uma maneira de transmitir um URL a ser descoberto por um dispositivo de scanner BLE, que por sua vez pode navegar até o URL e apresentar a página da Web ao usuário.
- Eddystone-TLM : esse tipo fornece informações de telemetria sobre o dispositivo, como nível da bateria, temperatura e um contador de pacotes anunciados.
- Eddystone-EID : esse tipo fornece uma estrutura para atingir um certo nível de segurança e privacidade de um dispositivo. EID significa ID Efêmero, que é um identificador que muda periodicamente a uma taxa determinada durante a fase de implantação, registrando-a em um serviço da web confiável.
NOTA: Embora o Google tenha praticamente abandonado o padrão Eddystone em smartphones (especificamente Android e Chrome), ele ainda pode servir como um bom formato para aplicativos em que você controla os dois lados (dispositivos de radiodifusão + dispositivos de scanner) e que não dependem do smartphone aplicativos. Também serve como um ótimo exercício para aprender mais sobre como os anúncios Bluetooth funcionam e como utilizá-los para seu próprio aplicativo.
Neste tutorial, focaremos nos tipos de quadro Eddystone-UID e Eddystone-URL .
Aqui está o que abordaremos hoje:
Dados de serviço
Eddystone-UID
Eddystone-URL
Eddystone-TLM e Eddystone-EID
Implementando Eddystone no NINA B302 usando Zephyr RTOS
Exemplo de Eddystone-UID
Formato Eddystone
A parte mostrada na figura acima é constante para todos os pacotes de anúncios do Eddystone, exceto para a parte de Dados do Serviço .
Os dados do anúncio seguem o formato Comprimento-Tipo-Valor (semelhante ao formato TLV popular ). O valor Comprimento indica o comprimento dos dados que incluem o Tipo e a Carga útil .
O padrão Eddystone utiliza o tipo de dados Anúncio de Dados de Serviço para enviar os dados para os dispositivos de scanner BLE. O iBeacon, por outro lado, utiliza o tipo de dados Anúncio de Dados do Fabricante.
Agora, vejamos a parte de dados de serviço, que inclui as informações que estamos interessados em analisar no final do receptor.
Dados de serviço
O formato da porção de dados de serviço depende do tipo de quadro usado (Eddystone-UID, Eddystone-URL, Eddystone-TLM ou Eddystone-EID).
Eddystone-UID
Como mencionamos anteriormente, esse tipo de quadro é usado de maneira semelhante ao iBeacon da Apple. Inclui o seguinte:
Ao usar esse tipo de quadro, podemos utilizar o namespace de 10 bytes para um ID exclusivo de nossa escolha (por exemplo, para indicar um identificador de loja específico) e, em seguida, usar o 6 bytes como uma identificação de um subconjunto do namespace (por exemplo, para identificar um corredor dentro da loja).
Notas:
- Esse tipo de quadro utiliza no máximo 31 bytes de dados de anúncio disponíveis em um pacote de anúncio BLE (primário).
- O campo Ranging Data é a potência Tx medida em 0 metros do transmissor (-100 dBm a +20 dBm).De acordo com a especificação Eddystone, a melhor maneira de determinar o valor a ser incluído nesse campo é medir o RSSI real em 1 metro e adicionar 41 dBm ao valor (com base na suposição de que 41 dBm é a perda de sinal que ocorre acima de 1 metro).
- Para obter mais informações e recomendações sobre a geração do ID do espaço para nome e da instância, consulte a especificação Eddystone aqui .
Nota importante : O valor da potência Tx usa um formato de complemento de dois para representar valores assinados. Para obter mais informações sobre esse cálculo, consulte a seção do artigo da Wikipedia sobre o complemento de dois: https://en.wikipedia.org/wiki/Two%27s_complement#Converting_to_two's_complement_representation
Eddystone-URL
O tipo de quadro Eddystone-URL é único e diferente do uso do Eddystone-UID ou do formato iBeacon da Apple. É usado para anunciar um URL para o scanner descobrir e analisar e, potencialmente, apontar para um navegador da Web.
Esse tipo de quadro é usado principalmente em aplicativos e implementações da " Physical Web ".
Como o comprimento máximo dos dados do anúncio BLE é de 31 bytes, isso limita os URLs que podem ser transmitidos usando esse tipo de quadro. No entanto, o formato fornece algum nível de codificação compactada para aproveitar ao máximo o espaço limitado disponível para os dados do anúncio.
Aqui está o formato usado para esse tipo de quadro:
O valor da potência Tx é representado da mesma maneira que descrevemos na seção Eddystone-UID acima.
O esquema de URL é definido da seguinte maneira:
- Diferentes prefixos para URLs são representados da seguinte maneira
- A parte principal do URL é incluída como uma sequência de caracteres. Por exemplo, "google" seria representado como uma sequência de 'g' 'o' 'o' 'g' 'l' 'e', que seria convertida em seus valores ASCII.
- Finalmente, a expansão do URL (por exemplo, .com / ou .com ) é representada da seguinte maneira:
Por exemplo, se quiséssemos representar "https://www.google.com/" com uma potência Tx de 0 dBm, a matriz de dados de serviço ficaria assim:
Tipo de quadro (URL) | Potência Tx | https: // www. | g | o | o | g | eu | e | .com / |
0x10 | 0x00 | 0x01 | 0x67 | 0x6f | 0x6f | 0x67 | 0x6c | 0x65 | 0x00 |
Eddystone-TLM e Eddystone-EID
Os quadros Eddystone-TLM são usados para transmitir dados de telemetria úteis para monitorar a saúde dos beacons em campo. Esse quadro não contém nenhum identificador, portanto é emparelhado com os quadros Eddystone-URL, Eddystone-UID ou Eddystone-EID.
Quando emparelhado com quadros EID, o pacote Eddystone-TLM é criptografado. Quando emparelhados com quadros de URL ou UID, no entanto, os pacotes TLM não são criptografados.
Para saber mais sobre esses tipos, consulte os seguintes links:
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 W106, 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 W106 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
################################################################################
# Eddystone Beacon
#
# Created by Zerynth Team 2019 CC
# Author: G. Baldi
###############################################################################
import streams
import timers
#import the ESP32 BLE driver: a BLE capable VM is also needed!
from espressif.esp32ble import esp32ble as bledrv
# then import the BLE module and beacons
from wireless import ble
from wireless import ble_beacons as bb
streams.serial()
adv_content = 0
battery_level = 40
temperature = 23.2
pdu_count = 0
uptime = timers.timer()
uptime.start()
# create payloads to cycle through
payloads = [
bb.eddy_encode_uid("Zerynth","Python",-69), # UID Eddystone payload
bb.eddy_encode_url("https://www.smartcore.com.br",-69), # URL Eddystone payload
bb.eddy_encode_tlm(battery_level,temperature,pdu_count,uptime.get()/1000) # TLM Eddystone payload
]
# this callback will be called at the end of an advertising cycle.
# it is used to switch to the next content
def adv_stop_cb(data):
global pdu_count,adv_content
print("Advertising stopped")
adv_content = (adv_content+1)%3
if adv_content == 0:
# advertise UID
interval = 100
timeout = 10000
elif adv_content == 1:
# advertise URL
interval = 100
timeout = 15000
else:
# advertise TLM
interval = 100
timeout = 150
pdu_count+=1
payloads[2] = bb.eddy_encode_tlm(battery_level,temperature,pdu_count,uptime.get()/1000) # TLM Eddystone payload
payload = payloads[adv_content]
ble.advertising(interval,timeout=timeout,payload=payload,mode=ble.ADV_UNCN_UND)
ble.start_advertising()
print("Advertising restarted with",ble.btos(payload))
try:
# initialize BLE driver
bledrv.init()
# Set GAP name and no security
ble.gap("Zerynth",security=(ble.SECURITY_MODE_1,ble.SECURITY_LEVEL_1))
ble.add_callback(ble.EVT_ADV_STOPPED,adv_stop_cb)
# set advertising options: advertise every second with custom payload in non connectable undirected mode
# after 10 seconds, stop and change payload
ble.advertising(100,timeout=10000,payload=payloads[adv_content],mode=ble.ADV_UNCN_UND)
# Start the BLE stack
ble.start()
# Now start scanning for 30 seconds
ble.start_advertising()
except Exception as e:
print(e)
# loop forever
while True:
print(".")
sleep(10000)
REGISTRANDO DISPOSITIVO
VIRTUALIZANDO
Loading settings...
Switched to auto mode
Ready!
Checking for updates...
Retrying authorization...
Can't erase flash
[info] Cloning from C:\Users\Usuario\zerynth2\dist\r2.6.3\libs\official\espressif\esp32ble\examples\Eddystone_Beacon
[info] Project Eddystone Beacon created with uid: PF6UmwkgQpmCgIVX7Kt2NQ
[info] Downloading package sys.zerynth.esptool-windows64
[info] Downloading package sys.zerynth.xtensalx6-windows64
[info] Downloading package vhal.zerynth.xtensalx6_esp32
[info] Installing package sys.zerynth.esptool-windows64
[info] Installing package sys.zerynth.xtensalx6-windows64
[info] Installing package vhal.zerynth.xtensalx6_esp32
[info] All dependencies installed!
Can't erase flash
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\__builtins__.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__builtins__.py
[info] ########## STEP 0 - first pass
[info] Compiling module: __main__ @ C:\Users\Usuario\Eddystone_Beacon\main.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\__builtins__.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__builtins__.py
[info] Compiling module: __builtins__ @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__builtins__.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\streams.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\streams.py
[info] Compiling module: streams @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\streams.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\timers.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\timers.py
[info] Compiling module: timers @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\timers.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\libs\official\espressif\esp32ble\esp32ble.py
[info] Compiling module: espressif.esp32ble.esp32ble @ C:\Users\Usuario\zerynth2\dist\r2.6.3\libs\official\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\wireless\ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble.py
[info] Compiling module: wireless.ble @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\wireless\ble_beacons.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble_beacons.py
[info] Compiling module: wireless.ble_beacons @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble_beacons.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\urlparse.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\urlparse.py
[info] Compiling module: urlparse @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\urlparse.py
[info] ########## STEP 0 - second pass
[info] Compiling module: __main__ @ C:\Users\Usuario\Eddystone_Beacon\main.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\__builtins__.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__builtins__.py
[info] Compiling module: __builtins__ @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__builtins__.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\streams.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\streams.py
[info] Compiling module: streams @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\streams.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\timers.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\timers.py
[info] Compiling module: timers @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\timers.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\libs\official\espressif\esp32ble\esp32ble.py
[info] Compiling module: espressif.esp32ble.esp32ble @ C:\Users\Usuario\zerynth2\dist\r2.6.3\libs\official\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\wireless\ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble.py
[info] Compiling module: wireless.ble @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\wireless\ble_beacons.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble_beacons.py
[info] Compiling module: wireless.ble_beacons @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble_beacons.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\urlparse.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\urlparse.py
[info] Compiling module: urlparse @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\urlparse.py
[info] ########## STEP 1 - C code compilation
[info] Compiling C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c
[warning] C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c => line 533 : passing argument 1 of 'esp_ble_gap_set_prefer_conn_params' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
[warning] C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c => line 547 : initialization from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c => line 604 : assignment from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c => line 650 : assignment from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c => line 654 : assignment from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c => line 669 : assignment from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c => line 691 : assignment from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c => line 768 : assignment from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c => line 796 : assignment from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c => line 1042 : assignment from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__lang/psequence.h => line 104 : initialization from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__lang/psequence.h => line 103 : initialization from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__lang/psequence.h => line 104 : initialization from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__lang/psequence.h => line 103 : initialization from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:\Users\Usuario\zerynth2\dist\r2.6.3\vhal\xtensa-lx6\esp32\ble/bt.h => line 2 : #warning "This header is deprecated, please use functions defined in esp_bt.h instead." [-Wcpp]
[warning] C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__cdefs/zerynth.h => line 33 : "printf" redefined
[warning] C:\Users\Usuario\zerynth2\dist\r2.6.3\vhal\xtensa-lx6\esp32\ble\bluedroid\common\include/common/bt_trace.h => line 44 : "MAX" redefined
[info] Linking...
[info] ########## STEP 4 - generate binary
[info] Resource table at 1360 0x550
[info] Saving to C:\Users\Usuario\zerynth2\tmp\zstudio.vbo
[info] Compilation Ok
Only devices supporting JTAG probes can be debugged!
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\__builtins__.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__builtins__.py
[info] ########## STEP 0 - first pass
[info] Compiling module: __main__ @ C:\Users\Usuario\Eddystone_Beacon\main.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\__builtins__.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__builtins__.py
[info] Compiling module: __builtins__ @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__builtins__.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\streams.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\streams.py
[info] Compiling module: streams @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\streams.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\timers.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\timers.py
[info] Compiling module: timers @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\timers.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\libs\official\espressif\esp32ble\esp32ble.py
[info] Compiling module: espressif.esp32ble.esp32ble @ C:\Users\Usuario\zerynth2\dist\r2.6.3\libs\official\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\wireless\ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble.py
[info] Compiling module: wireless.ble @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\wireless\ble_beacons.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble_beacons.py
[info] Compiling module: wireless.ble_beacons @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble_beacons.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\urlparse.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\urlparse.py
[info] Compiling module: urlparse @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\urlparse.py
[info] ########## STEP 0 - second pass
[info] Compiling module: __main__ @ C:\Users\Usuario\Eddystone_Beacon\main.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\__builtins__.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__builtins__.py
[info] Compiling module: __builtins__ @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__builtins__.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\streams.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\streams.py
[info] Compiling module: streams @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\streams.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\timers.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\timers.py
[info] Compiling module: timers @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\timers.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\libs\official\espressif\esp32ble\esp32ble.py
[info] Compiling module: espressif.esp32ble.esp32ble @ C:\Users\Usuario\zerynth2\dist\r2.6.3\libs\official\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\wireless\ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble.py
[info] Compiling module: wireless.ble @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\wireless\ble_beacons.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble_beacons.py
[info] Compiling module: wireless.ble_beacons @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble_beacons.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\urlparse.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\urlparse.py
[info] Compiling module: urlparse @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\urlparse.py
[info] ########## STEP 1 - C code compilation
[info] Getting C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c from cache
[info] Linking...
[info] ########## STEP 4 - generate binary
[info] Resource table at 1360 0x550
[info] Saving to C:\Users\Usuario\zerynth2\tmp\zstudio.vbo
[info] Compilation Ok
Switched to advanced mode
Switched to auto mode
Can't erase flash
Only devices supporting JTAG probes can be debugged!
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\__builtins__.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__builtins__.py
[info] ########## STEP 0 - first pass
[info] Compiling module: __main__ @ C:\Users\Usuario\Eddystone_Beacon\main.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\__builtins__.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__builtins__.py
[info] Compiling module: __builtins__ @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__builtins__.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\streams.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\streams.py
[info] Compiling module: streams @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\streams.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\timers.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\timers.py
[info] Compiling module: timers @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\timers.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\libs\official\espressif\esp32ble\esp32ble.py
[info] Compiling module: espressif.esp32ble.esp32ble @ C:\Users\Usuario\zerynth2\dist\r2.6.3\libs\official\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\wireless\ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble.py
[info] Compiling module: wireless.ble @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\wireless\ble_beacons.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble_beacons.py
[info] Compiling module: wireless.ble_beacons @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble_beacons.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\urlparse.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\urlparse.py
[info] Compiling module: urlparse @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\urlparse.py
[info] ########## STEP 0 - second pass
[info] Compiling module: __main__ @ C:\Users\Usuario\Eddystone_Beacon\main.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\__builtins__.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__builtins__.py
[info] Compiling module: __builtins__ @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__builtins__.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\streams.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\streams.py
[info] Compiling module: streams @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\streams.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\timers.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\timers.py
[info] Compiling module: timers @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\timers.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\libs\official\espressif\esp32ble\esp32ble.py
[info] Compiling module: espressif.esp32ble.esp32ble @ C:\Users\Usuario\zerynth2\dist\r2.6.3\libs\official\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\wireless\ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble.py
[info] Compiling module: wireless.ble @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\wireless\ble_beacons.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble_beacons.py
[info] Compiling module: wireless.ble_beacons @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble_beacons.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\urlparse.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\urlparse.py
[info] Compiling module: urlparse @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\urlparse.py
[info] ########## STEP 1 - C code compilation
[info] Compiling C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c
[warning] C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__cdefs/zerynth.h => line 33 : "printf" redefined
[warning] C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c => line 533 : passing argument 1 of 'esp_ble_gap_set_prefer_conn_params' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers]
[warning] C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c => line 547 : initialization from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c => line 604 : assignment from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c => line 650 : assignment from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c => line 654 : assignment from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c => line 669 : assignment from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c => line 691 : assignment from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c => line 768 : assignment from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c => line 796 : assignment from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c => line 1042 : assignment from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__lang/psequence.h => line 104 : initialization from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__lang/psequence.h => line 103 : initialization from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__lang/psequence.h => line 104 : initialization from incompatible pointer type [-Wincompatible-pointer-types]
[info] Linking...
[warning] C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__lang/psequence.h => line 103 : initialization from incompatible pointer type [-Wincompatible-pointer-types]
[warning] C:\Users\Usuario\zerynth2\dist\r2.6.3\vhal\xtensa-lx6\esp32\ble/bt.h => line 2 : #warning "This header is deprecated, please use functions defined in esp_bt.h instead." [-Wcpp]
[warning] C:\Users\Usuario\zerynth2\dist\r2.6.3\vhal\xtensa-lx6\esp32\ble\bluedroid\common\include/common/bt_trace.h => line 44 : "MAX" redefined
[info] ########## STEP 4 - generate binary
[info] Resource table at 1360 0x550
[info] Saving to C:\Users\Usuario\zerynth2\tmp\zstudio.vbo
[info] Compilation Ok
[info] Searching for device e7a4bc050dddcfcc95a52881d92f1d4634052f87 with alias zs:doit_esp32:e7a4bc050dddcfcc95a52881d92f1d4634052f87
[info] Checking layout...
[info] No active layout found
[info] Got header: Wversion: v7.0
[info] Got header: I (1411) wifi:config NVS flash: enabled
[info] Got header: I (1411) wifi:config nano formating: disabled
[info] Got header: I (1411) wifi:Init data frame dynamic rx buffer num: 16
[info] Got header: I (1421) wifi:Init management frame dynamic rx buffer num: 16
[info] Got header: I (1421) wifi:Init management short buffer num: 32
[info] Got header: I (1431) wifi:Init dynamic tx buffer num: 16
[info] Got header: I (1431) wifi:Init static rx buffer size: 1600
[info] Got header: I (1441) wifi:Init static rx buffer num: 4
[info] Got header: I (1441) wifi:Init dynamic rx buffer num: 16
[info] Got header: I (1451) wifi_init: rx ba win: 4
[info] Got header: I (1451) wifi_init: tcpip mbox: 32
[info] Got header: I (1451) wifi_init: udp mbox: 6
[info] Got header: I (1461) wifi_init: tcp mbox: 6
[info] Got header: I (1461) wifi_init: tcp tx win: 5744
[info] Got header: I (1471) wifi_init: tcp rx win: 5744
[info] Got header: I (1471) wifi_init: tcp mss: 1440
[info] Got header: I (1471) wifi_init: WiFi IRAM OP enabled
[info] Got header: I (1481) wifi_init: WiFi RX IRAM OP enabled
[info] Got header: esp32_wifi.c:670 WiFi STA: protocol BGN (0x7)
[info] Got header: mgos_wifi.c:270 WiFi STA: Connecting to Andreia Oi Miguel 2.4G
[info] Got header: I (1581) phy: phy_version: 4500, 0cd6843, Sep 17 2020, 15:37:07, 0, 0
[info] Got header: I (1581) wifi:mode : sta (f0:08:d1:c8:cf:98)
[info] Got header: I (1591) wifi:Set ps type: 0
[info] Got header: mgos_http_server.c:368 HTTP server started on [80]
[info] Got header: mgos_dash.c:203 Dash init ok, server: wss://mdash.net/api/v2/rpc)
[info] Got header: mgos_provision_btn.c:90 Factory reset button: pin 0, pull up, hold_ms 0 (hold on boot)
[info] Got header: mgos_provision_stat:120 Max state: 3
[info] Got header: mgos_rpc_channel_mq:203 0x3ffb3a80 esp32_C8CF98/rpc
[info] Got header: mgos_rpc_channel_ua:313 0x3ffb3ea4 UART0
[info] Got header: mgos_init.c:36 Init done, RAM: 295400 total, 239068 free, 234500 min free
[info] Got header: mgos_mongoose.c:66 New heap free LWM: 227708
[info] Got header: mgos_ota_core.c:1330 UID: 0fef52e4924af156, license: none
[info] Got header: mgos_net.c:86 WiFi STA: connecting
[info] Got header: mgos_provision_state:44 Current state: 0 -> 1
[info] Got header: Hello From Smartcore
[info] Probe sent
[info] Got header: I (3641) wifi:new:<6,0>, old:<1,0>, ap:<255,255>, sta:<6,0>, prof:1
[info] Got header: I (4161) wifi:state: init -> auth (b0)
[info] Got header: Hello From Smartcore
[info] Got header: mgos_mongoose.c:66 New heap free LWM: 223776
[info] Got header: I (4171) wifi:state: auth -> assoc (0)
[info] Got header: I (4191) wifi:state: assoc -> run (10)
[info] Got header: I (4221) wifi:connected with Andreia Oi Miguel 2.4G, aid = 1, channel 6, BW20, bssid = 9c:52:f8:43:7a:e0
[info] Got header: I (4231) wifi:security: WPA2-PSK, phy: bgn, rssi: -31
[info] Got header: I (4241) wifi:pm start, type: 0
[info] Got header: mgos_wifi.c:136 WiFi STA: Connected, BSSID 9c:52:f8:43:7a:e0 ch 6 RSSI -31
[info] Got header: mgos_net.c:90 WiFi STA: connected
[info] Got header: I (4261) wifi:AP's beacon interval = 102400 us, DTIM period = 1
[info] Got header: Hello From Smartcore
[info] Got header: Hello From Smartcore
[info] Got header: I (6431) esp_netif_handlers: sta ip: 192.168.100.116, mask: 255.255.255.0, gw: 192.168.100.1
[error] No answer to probe
[info] Writing C:\Users\Usuario\zerynth2\tmp\doit_esp32\main.py
[info] Writing C:\Users\Usuario\zerynth2\tmp\doit_esp32\Makefile
Project config file missing
[info] Writing C:\Users\Usuario\zerynth2\tmp\doit_esp32\project.yml
[warning] Trying to search attached device
[info] Preparing doit_esp32
[info] Rewriting C:\Users\Usuario\zerynth2\tmp\doit_esp32\project.yml
[warning] Trying to get latest available vm
{'version': 'r20.09.17', 'xfeatures': [], 'target': 'doit_esp32', 'features': [], 'description': 'Standard', 'rtos': 'esp32-rtos'}
[info] Rewriting C:\Users\Usuario\zerynth2\tmp\doit_esp32\project.yml
[info] Burning bootloader...
[info] Burning bin
[info] esptool.py v2.0
[info] Connecting....
[info] Chip is ESP32D0WDQ6 (revision (unknown 0xa))
[info] Uploading stub...
[info] Running stub...
[info] Stub running...
[info] Configuring flash size...
[info] Auto-detected Flash size: 4MB
[info] Compressed 19584 bytes to 12813...
[info]
[info] Writing at 0x00001000... (100 %)
[info] Wrote 19584 bytes (12813 compressed) at 0x00001000 in 1.1 seconds (effective 137.6 kbit/s)...
[info] Hash of data verified.
[info] Compressed 305280 bytes to 181775...
[info]
[info] Writing at 0x00010000... (8 %)
[info] Writing at 0x00014000... (16 %)
[info] Writing at 0x00018000... (25 %)
[info] Writing at 0x0001c000... (33 %)
[info] Writing at 0x00020000... (41 %)
[info] Writing at 0x00024000... (50 %)
[info] Writing at 0x00028000... (58 %)
[info] Writing at 0x0002c000... (66 %)
[info] Writing at 0x00030000... (75 %)
[info] Writing at 0x00034000... (83 %)
[info] Writing at 0x00038000... (91 %)
[info] Writing at 0x0003c000... (100 %)
[info] Wrote 305280 bytes (181775 compressed) at 0x00010000 in 16.1 seconds (effective 151.8 kbit/s)...
[info] Hash of data verified.
[info] Compressed 3072 bytes to 156...
[info]
[info] Writing at 0x00008000... (100 %)
[info] Wrote 3072 bytes (156 compressed) at 0x00008000 in 0.0 seconds (effective 999.5 kbit/s)...
[info] Hash of data verified.
[info] Compressed 1024 bytes to 32...
[info]
[info] Writing at 0x00390000... (100 %)
[info] Wrote 1024 bytes (32 compressed) at 0x00390000 in 0.0 seconds (effective 605.7 kbit/s)...
[info] Hash of data verified.
[info]
[info] Leaving...
[info] Hard resetting...
[info] Chip id retrieved: 0f801d8cfc89
[info] Device registered with uid: 5Xf25PtWReKw7NShBuDsfg
[info] Creating vm for device 5Xf25PtWReKw7NShBuDsfg
[info] VM DOIT Esp32 DevKit v1 r20.09.17 created with uid: QFKmjuQITPSPOGn4GFsG5A
[info] Downloaded Virtual Machine in C:\Users\Usuario\zerynth2\vms\doit_esp32\0f801d8cfc89 with uid QFKmjuQITPSPOGn4GFsG5A
[info] Starting Virtualization...
[info] Burning bin
[info] esptool.py v2.0
[info] Connecting........_____....._____....._____....._____....._
[info] Chip is ESP32D0WDQ6 (revision (unknown 0xa))
[info] Uploading stub...
[info] Running stub...
[info] Stub running...
[info] Configuring flash size...
[info] Auto-detected Flash size: 4MB
[info] Compressed 19472 bytes to 12785...
[info]
[info] Writing at 0x00001000... (100 %)
[info] Wrote 19472 bytes (12785 compressed) at 0x00001000 in 1.1 seconds (effective 136.9 kbit/s)...
[info] Hash of data verified.
[info] Compressed 800896 bytes to 517663...
[info]
[info] Writing at 0x00010000... (3 %)
[info] Writing at 0x00014000... (6 %)
[info] Writing at 0x00018000... (9 %)
[info] Writing at 0x0001c000... (12 %)
[info] Writing at 0x00020000... (15 %)
[info] Writing at 0x00024000... (18 %)
[info] Writing at 0x00028000... (21 %)
[info] Writing at 0x0002c000... (25 %)
[info] Writing at 0x00030000... (28 %)
[info] Writing at 0x00034000... (31 %)
[info] Writing at 0x00038000... (34 %)
[info] Writing at 0x0003c000... (37 %)
[info] Writing at 0x00040000... (40 %)
[info] Writing at 0x00044000... (43 %)
[info] Writing at 0x00048000... (46 %)
[info] Writing at 0x0004c000... (50 %)
[info] Writing at 0x00050000... (53 %)
[info] Writing at 0x00054000... (56 %)
[info] Writing at 0x00058000... (59 %)
[info] Writing at 0x0005c000... (62 %)
[info] Writing at 0x00060000... (65 %)
[info] Writing at 0x00064000... (68 %)
[info] Writing at 0x00068000... (71 %)
[info] Writing at 0x0006c000... (75 %)
[info] Writing at 0x00070000... (78 %)
[info] Writing at 0x00074000... (81 %)
[info] Writing at 0x00078000... (84 %)
[info] Writing at 0x0007c000... (87 %)
[info] Writing at 0x00080000... (90 %)
[info] Writing at 0x00084000... (93 %)
[info] Writing at 0x00088000... (96 %)
[info] Writing at 0x0008c000... (100 %)
[info] Wrote 800896 bytes (517663 compressed) at 0x00010000 in 45.8 seconds (effective 139.9 kbit/s)...
[info] Hash of data verified.
[info] Compressed 3072 bytes to 156...
[info]
[info] Writing at 0x00008000... (100 %)
[info] Wrote 3072 bytes (156 compressed) at 0x00008000 in 0.0 seconds (effective 1009.9 kbit/s)...
[info] Hash of data verified.
[info] Compressed 1024 bytes to 1035...
[info]
[info] Writing at 0x00390000... (100 %)
[info] Wrote 1024 bytes (1035 compressed) at 0x00390000 in 0.1 seconds (effective 80.2 kbit/s)...
[info] Hash of data verified.
[info]
[info] Leaving...
[info] Hard resetting...
[info] Virtualization Ok
Operation successful! Now you can Uplink your code into your doit_esp32
COMPILANDO
UPLOAD
Compiling module: urlparse @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\urlparse.py
[info] ########## STEP 1 - C code compilation
[info] Getting C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c from cache
[info] Linking...
[info] ########## STEP 4 - generate binary
[info] Resource table at 1360 0x550
[info] Saving to C:\Users\Usuario\zerynth2\tmp\zstudio.vbo
[info] Compilation Ok
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\__builtins__.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__builtins__.py
[info] ########## STEP 0 - first pass
[info] Compiling module: __main__ @ C:\Users\Usuario\Eddystone_Beacon\main.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\__builtins__.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__builtins__.py
[info] Compiling module: __builtins__ @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__builtins__.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\streams.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\streams.py
[info] Compiling module: streams @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\streams.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\timers.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\timers.py
[info] Compiling module: timers @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\timers.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\libs\official\espressif\esp32ble\esp32ble.py
[info] Compiling module: espressif.esp32ble.esp32ble @ C:\Users\Usuario\zerynth2\dist\r2.6.3\libs\official\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\wireless\ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble.py
[info] Compiling module: wireless.ble @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\wireless\ble_beacons.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble_beacons.py
[info] Compiling module: wireless.ble_beacons @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble_beacons.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\urlparse.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\urlparse.py
[info] Compiling module: urlparse @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\urlparse.py
[info] ########## STEP 0 - second pass
[info] Compiling module: __main__ @ C:\Users\Usuario\Eddystone_Beacon\main.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\__builtins__.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__builtins__.py
[info] Compiling module: __builtins__ @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\__builtins__.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\streams.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\streams.py
[info] Compiling module: streams @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\streams.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\timers.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\timers.py
[info] Compiling module: timers @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\timers.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\libs\official\espressif\esp32ble\esp32ble.py
[info] Compiling module: espressif.esp32ble.esp32ble @ C:\Users\Usuario\zerynth2\dist\r2.6.3\libs\official\espressif\esp32ble\esp32ble.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\wireless\ble.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble.py
[info] Compiling module: wireless.ble @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\wireless\ble_beacons.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble_beacons.py
[info] Compiling module: wireless.ble_beacons @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\wireless\ble_beacons.py
[info] Searching for C:\Users\Usuario\Eddystone_Beacon\urlparse.py
[info] Searching for C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\urlparse.py
[info] Compiling module: urlparse @ C:\Users\Usuario\zerynth2\dist\r2.6.3\stdlib\urlparse.py
[info] ########## STEP 1 - C code compilation
[info] Getting C:/Users/Usuario/zerynth2/dist/r2.6.3/libs/official/espressif/esp32ble/csrc/ble_ifc.c from cache
[info] Linking...
[info] ########## STEP 4 - generate binary
[info] Resource table at 1360 0x550
[info] Saving to C:\Users\Usuario\zerynth2\tmp\zstudio.vbo
[info] Compilation Ok
[info] Searching for device e7a4bc050dddcfcc95a52881d92f1d4634052f87 with alias zs:doit_esp32:e7a4bc050dddcfcc95a52881d92f1d4634052f87
[info] Checking layout...
[info] No active layout found
[info] Probe sent
[info] Got header: r20.09.17 dst-1svXQ5CfqqVQDCEeCQ doit_esp32 0f801d8cfc89 ZERYNTH
[info] Found VM dst-1svXQ5CfqqVQDCEeCQ for doit_esp32
[info] Handshake
[info] membase @3FFD9CE8
[info] romstart @401B0000
[info] flash @00080000
[info] Erasing flash
[info] Sending Bytecode: 24742 bytes ( available 524288 )
[info] Uplink done
Dicas importantes
-Foi utilizado como a opção ESP32 DEV KIT o qual é similar ao NINA W106
-Foi utilizado o mapa de IOS do módulo U-blox NINA W106 para especificar os GPIOS do ESP32
EXECUÇÃO
Utilizando BLE SCANNER - URL Smartcore
Resultado ao clicar na URL