domingo, 18 de abril de 2021

U-BLOX NINA W106 SENDO PROGRAMADO EM B4R - Blink LED

U-BLOX NINA W106 SENDO PROGRAMADO EM B4R


O objetivo deste BLOG é demonstrar como é possível utilizar programar o módulo u-BLOX NINA W106 no starter kit EVK-NINA-W1 com a linguagem B4R então fazer com que um LED fique piscar a cada 1 segundo.
UBLOX NINA W106

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

SMARTCORE

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

SOBRE A LINGUAGEM BASIC

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

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

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

Simple, powerful and modern
development tools.
With B4X, anyone who wants to, can develop real-world solutions.

B4X suite supports more platforms than any other tool
ANDROID | IOS | WINDOWS | MAC | LINUX 



B4R é uma ferramenta de desenvolvimento 100% gratuita para programas nativos como o U-BLOX NINA W106.
O B4R segue os mesmos conceitos das outras ferramentas B4X, fornecendo uma ferramenta de desenvolvimento simples e poderosa.
B4R, B4A, B4J e B4i juntos fazem a melhor solução de desenvolvimento para a Internet das Coisas (IoT).

B4R é uma ferramenta de desenvolvimento do fabricante do basic4Android.

Você baixa a ferramenta de https://www.b4x.com/b4r.html e os requisitos  são Arduino 1.8+ e o pacote ESP32 que devem ser instalados no seu PC de desenvolvimento, depois de instalar o B4R você configurar o caminho para o IDE Arduino para que eles possa utilizar as ferramentas Arduino que estão instaladas para compilação e programação.

Com B4R você pode Programar (Compilar) em BASIC e C++ juntos!!!

B4R é 100% free!


Instalação








u-BLOX NINA W106 é baseado no ESP32, escolha "ESP32 Dev Module"



Copie e cole o programa abaixo

#Region Project Attributes #AutoFlushLogs: True #CheckArrayBounds: True #StackBufferSize: 600 #End Region 'Ctrl+Click to open the C code folder: ide://run?File=%WINDIR%\System32\explorer.exe&Args=%PROJECT%\Objects\Src Sub Process_Globals Private pinTest As Pin End Sub Private Sub AppStart pinTest.Initialize(2, pinTest.MODE_OUTPUT) Do While True == True pinTest.DigitalWrite(True) Delay(100) pinTest.DigitalWrite(False) Delay(100) Loop End Sub
O programa configura o GPIO2 como saída e manda a cada segundo nível lógico ALTO e então nível lógico BAIXO. Também programa a UART (Log) para enviar uma mensagem "Blink" (a cada 2 segundos).

Pressione F5 para iniciar a compilação

Compilando

Então o programa será transferido para o U-blox NINA W106 (coloque no modo de BOOT)

Transferindo

Execução

Veja o LED piscando

Placa com U-blox NINA W106


Bibliotecas Disponíveis para IoT (veja nos forums para BLE)

Core - v2.00
rAdafruit_ILI9341 - v1.00
rAdafruit_MCP4725 - v1.00
rAdafruit_PWMServoDriver - v1.00
rAdafruit_STMPE610 - v1.00
rAdafruitBMP280 - v1.00
rAdafruitGFX - v1.01
rAdafruitMotorShieldV2 - v1.00
rAdafruitNeoPixel - v1.00
rAdafruitRGBMatrix - v1.00
rAdafruitSSD1306 - v1.10
rAPDS9960 - v1.00
rCurieBLE - v1.00
rDht - v2.00
rDS1302 - v1.00
rEEPROM - v1.20
rESP8266 - v1.00
rESP8266FastSSD1331 - v1.32 - Written by Massimo Meli
rESP8266FileSystem - v1.00
rESP8266Ping - v1.00
rESP8266WiFi - v1.30
rEthernet - v1.11
rIRremote - v1.00
rIRremoteESP8266 - v1.12
rKeypad - v1.00
rLedControl - v1.00
rLiquidCrystal - v1.00
rLiquidCrystal_I2C - v1.01
rMAX7219LedMatrix - v1.01
rMCP2515 - v1.00
rMCUFRIEND_kbv - v1.00
rMFRC522 - v1.01
rMQTT - v1.30
rNSRainbow - v1.00
rOneWire - v1.00
rRandomAccessFile - v1.80
rRF24 - v1.00
rSD - v1.03
rSeeedOLED - v1.00
rServo - v0.90
rSFE_BMP180 - v1.10
rSoftwareSerial - v1.00
rStepper - v1.00
rTM1637 - v1.10
rTTP229 - v1.00
rWebSocketClient - v1.20
rWiFi101 - v1.00
rWire - v1.10

Perguntas frequentes sobre o B4R

P: O B4R é totalmente gratuito, inclusive para fins comerciais?
R: Sim.

P: Posso acessar o código-fonte C e os objetos gerados?
R: Sim. O código e os objetos compilados estão disponíveis na pasta Objetos.

P: As bibliotecas são de código aberto?
R: Sim. As bibliotecas B4R são de código aberto (licença MIT). O código está disponível no GitHub.

P: Estou recebendo este erro na inicialização: "O aplicativo não pôde ser inicializado corretamente, erro 0xc0000135".
Windows Vista +: .Net Framework 4.5.2.
Windows XP: .Net Framework 4.0.

DÚVIDAS

suporte@smartcore.com.br

REFERÊNCIAS

Sobre a SMARTCORE

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

quarta-feira, 7 de abril de 2021

U-BLOX NINA W106 SENDO PROGRAMADO EM BASIC ANNEX RDS - MANDANDO E RECEBENDO TEXTO

U-BLOX NINA W106 SENDO PROGRAMADO EM BASIC ANNEX RDS  - MANDANDO E RECEBENDO TEXTO


O objetivo deste BLOG é demonstrar como é possível utilizar programar o módulo u-BLOX NINA W106 (ESP32) no starter kit EVK-NINA-W1 com a linguagem BASIC ANNEX WiFi RDS (1.43 Beta) e para enviar e receber dados via BLE.
UBLOX NINA W106

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

SMARTCORE

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

SOBRE A LINGUAGEM BASIC

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

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

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

BASIC ANNEX RDS

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

Veja o HELP  do BASIC ANNEX RDS

Veja também FAQ


SOBRE BLE

Esta é uma breve introdução ao BLE e não chega perto de toda a história.

O BLE não é uma atualização para o Bluetooth Classic, é um sistema diferente com diferentes usos pretendidos. O BLE funciona de uma maneira muito diferente do Bluetooth anterior. O BLE foi projetado para aplicações de baixa consumo e consegue isso usando pacotes de dados pequenos e pouco frequentes. Na verdade, ele não foi projetado para conexões contínuas e grandes quantidades de dados. Para isso, o Bluetooth Classic é uma escolha melhor. Em essência, o BLE atinge seu baixo consumo de energia por não estar conectado com muita frequência, ao contrário do Bluetooth Classic, que mantém uma conexão constante.

Existem duas maneiras pelas quais os dispositivos BLE podem se comunicar; Emissora + Observadora e Central + Periférica.

Com o Broadcaster + Observer, não há uma conexão padrão, o Broadcaster, geralmente algum tipo de sensor, envia sinais periódicos (pacotes de publicidade) que o Observer escuta. O radiodifusor normalmente não sabe se algo está escutando ou não.
O cenário Central + Periférico é mais parecido (mas não exatamente o mesmo) que a conexão clássica. Quando o dispositivo central (mestre) encontra um dispositivo periférico (escravo) ao qual deseja se conectar, inicia uma conexão e assume a função principal de gerenciar a conexão e os tempos.
Como o Bluetooth Classic pressupõe que você usará uma única conexão, a conexão será estabelecida por um tempo e não precisará ser particularmente rápida na conexão. O BLE, por outro lado, foi projetado para fazer muitas conexões de curto prazo e, portanto, foi projetado para conectar e desconectar muito rapidamente.

BLE é tudo sobre serviços e características. Um serviço é uma coleção de características relacionadas e uma característica é onde os dados estão. Em um dispositivo BLE típico, você pode ter um serviço que contém características relacionadas às propriedades dos módulos, como; o nome do fabricante, o nome do dispositivo, o ID do firmware e / ou o número da versão. Também pode ter um segundo serviço que agrupa as características que mantêm os dados reais. Podem ser coisas como temperatura, umidade, brilho. Isso significa que, para usar o BLE, você geralmente precisa conhecer as características que deseja usar (mais especificamente os UUIDs para as características).

Com o BLE, os valores dessas propriedades estão disponíveis o tempo todo. Se você quiser saber o nome do fabricante, leia a válvula na característica do nome do fabricante. Se você quiser saber a temperatura, leia o valor da característica de temperatura. Isso é muito diferente de como o Bluetooth clássico funciona. Com o Bluetooth clássico, você tem apenas um canal de comunicação e todos os dados são enviados por um canal.

BLE NO BASIC Annex RDS

O BLE funciona em paralelo com o Wi-Fi. É possível ligar dispositivos móveis (como smartphones, tablets, computadores) ao ESP32.

O acesso gratuito e protegido por palavra-chave é suportado (PIN).
  • O modo servidor significa que um dispositivo pode ligar-se ao módulo.
  • O modo cliente significa que o ESP32 pode ligar-se por si só a outro dispositivo de servidor.
  • Scan significa que é possível pesquisar todos os dispositivos BLE presentes em torno do ESP32
O modo cliente não é suportado.

INTERPRETADOR ?

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

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

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

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

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

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

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

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


Comandos/Eventos BLE do BASIC Annex RDS


Comandos

BLUETOOTH. CONFIGURAÇÃO "nome de dispositivo" [, código] ' definir o nome do dispositivo BLE e opcionalmente o código pin

Atenção: o pino é um número de 6 dígitos e até mesmo a definição 1 será necessária para introduzir 000001 como código pin.

O u-BLOX NINA W106 é visto como um dispositivo UART NORDIC com os seguintes UUIDs:

SERVICE_UUID 6E400001-B5A3-F393-E0A9-E50E24DCCA9E CHARACTERISTIC_UUID_RX 6E400002-B5A3-F393-E0A9-E50E24DCCA9E
CHARACTERISTIC_UUID_TX 6E400003-B5A3-F393-E0A9-E50E24DCCA9E

BLUETOOTH.CLEAR ' limpar o BLE libertando cerca de 20KB de RAM ' há uma mensagem de erro que aparece no console mas está OK 

BLUETOOTH.DELETE ' eliminar o BLE liberando em torno de 40KB de RAM; após este comando o BLE não pode ser usado novamente e requer um reinício do módulo

BLUETOOTH.POWER ' definir a potência de saída de 0 a 7 -> -12dmb para +9dbm

BLUETOOTH.PRINT "texto" ' escrever uma mensagem de texto para o dispositivo conectado

BLUETOOTH.WRITE "texto" escreva uma mensagem de texto para o dispositivo conectado

A$ = BLUETOOTH.READ$ ' devolve uma mensagem de texto do BUFFER DE IO em A$

a = BLUETOOTH.LEN ' devolve o tamanho da mensagem recebida do dispositivo conectado

a = BLUETOOTH.CONNECTED' devolve 1 se houver um dispositivo conectado ou 0 se não

BLUETOOTH.STATUS ' útil para o evento (ver abaixo); devolve o tipo de evento gerado: 0= nenhum, 1 = dispositivo conectado, 2= dispositivo desconectado, 3=mensagem recebida, 4=Scan finalizado

BLUETOOTH.WRITE_IOBUFF(buff_num [, iniciar [, tamanho]] ' escrever no BUFFER DE IO para o dispositivo conectado

BLUETOOTH.READ_IOBUFF(buff_num) lê dentro do BUFFER DE IO do dispositivo ligado 

A$ = BLUETOOTH.SCANRESULT$ ' devolve a lista dos dispositivos encontrados durante um SCAN em formato json

Eventos

ONBLUETOOTH Label' define a rotina do evento para o bluetooth (BLE);  BLUETOOTH.STATUS é muito útil aqui

Obtendo MAC ADDRESS

Print MAC$

Exemplo

O exemplo abaixo:
  • Define Label a ser chamado quando o Peripheral detectar algum Evento (conexão, desconexão,etc);
  • Cria um Cliente BLE (Peripheral) chamado SmartCore;
  • Define tamanho do IOBUFF (BUFFER DE IO) para 10 bytes;
  • Programa o TIMER para enviar a cada 500ms para a Central, um número Randômico seguido de LINE FEED;
  • No Label é analizado se o evento é mensagem recebida e então é impressa.

onbluetooth ble_receive

'Atenção : o pino é um número de 6 dígitos e até mesmo a configuração 1 será necessária para inserir 000001 como código de pino.

bluetooth.setup "SmartCore"000001

 

IOBUFF.DIM(1, 10) = 65, 66, 67, 68, 69, 70, 71, 72, 73, 74

 

timer0 500, send_msg

 

wait

 

send_msg:

  bluetooth.write "_" + str$(rnd(1000)) + chr$(10)

return

   

ble_receive:

  print bluetooth.len, bluetooth.status

  if bluetooth.status = 3 then

    bluetooth.read_iobuff(0)

    for z = 1 to iobuff.len(0)

      print iobuff.read(0, z-1),

    next z

    print

  end if

return


Execução


APP detectando Smartcore

Descobrindo que é um serviço - "BLE SERIAL"
É o pin 000001 quando pedir

Conectando ao Servidor e Recebendo os números Random

Mandando um "Ola" para a Central

Mensagem "Ola" recebida

DÚVIDAS

suporte@smartcore.com.br

REFERÊNCIAS

Sobre a SMARTCORE

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

segunda-feira, 5 de abril de 2021

U-BLOX NINA W106 SENDO PROGRAMADO Sming

 U-BLOX NINA W106 SENDO PROGRAMADO Sming


O objetivo deste BLOG é demonstrar como é possível utilizar programar o módulo u-BLOX NINA W106 (ESP32) no starter kit EVK-NINA-W1 com o Framework Sming
UBLOX NINA W106

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

SMARTCORE

A SmartCore fornece módulos para comunicação wireless, biometria, conectividade, rastreamento e automação.
Nosso portifólio inclui modem 2G/3G/4G/NB-IoT/Cat.M, satelital, módulos WiFi, Bluetooth, GNSS/GPS, Sigfox, LoRa, leitor de cartão, leitor QR code, mecanismo de impressão, mini-board PC, antena, pigtail, LCD, bateria, repetidor GPS e sensores.
Mais detalhes em www.smartcore.com.br
 
Sming
 
Características
Excelente desempenho e uso da memória (Sming compila para firmware nativo!).
Desenvolvimento rápido e amigável.
Invólucros de API de hardware simples, mas poderosos.
Compatível com bibliotecas Arduino padrão - use qualquer hardware popular em poucas linhas de código.
Sistema de arquivos embutido: spiffs.
Módulos sem fio poderosos embutidos.
Poderosa pilha de rede assíncrona.

-Pilha Async TCP e UDP baseada em LWIP.
-Com suporte a clientes: HTTP, MQTT, WebSockets e SMTP.
-E servidores para: DNS, FTP, HTTP(+ WebSockets), Telnet.
-Com suporte SSL para todos os clientes e servidores da rede. Baseado em axTLS e BearSSL.
-Atualizações de firmware over-The-Air (OTA) via HTTP(S) e MQTT(S).
O Sming tem um emulador de host que permite que bibliotecas e aplicativos de amostra sejam compilados em um sistema de 
host Linux/Windows e sejam testados antes de enviá-los para um microcontrolador real.
Sming X Arduino
Sming não é um-para-um compatível com o arduino.
Sming é totalmente "baseado em evento" versus o conceito "baseado em loop" do Arduino -> os aplicativos são escritos como
callbacks.
Sming tem suporte completo e pronto para uso para http/tcp/ntp/telnet/mqtt conectividade IP, timers, pwm, gpio, 
json e muito mais. 
Programação
Todos os programas baseados na estrutura Sming devem fornecer uma função init(), que é chamada na inicialização do u-BLOX NINA W106.
Não há funções setup() ou loop(). A última função não faz sentido, pois para programar o u-BLOX NINA W106, registramos uma função para um evento, e essa função é chamada quando o evento é acionado. Não há necessidade de pooling e/ou looping. Portanto, nenhuma função loop(). A função de sketch setup() do Arduino está em nosso framework Sming, nossa função init() ...
Na função init(), podemos configurar várias coisas como modos de pin, porta serial e, claro, conectividade Wifi.
Programar com um IDE que oferece autocomplete de código nos permite ver a API disponível e adivinhar algumas das
funcionalidades, mesmo sem documentação (observe que a maior parte da API é idêntica/semelhante ao Arduino).
Instalação
osboxes@osboxes:~$ sudo chown $USER:$USER /opt
osboxes@osboxes:~$ sudo apt-get install -y git
osboxes@osboxes:~$ git clone https://github.com/SmingHub/Sming /opt/sming
osboxes@osboxes:~$ cd /opt/sming
osboxes@osboxes:~$ git checkout master
osboxes@osboxes:~$ git pull 
osboxes@osboxes:~$ ./opt/sming/Tools/export.sh
osboxes@osboxes:~$ ./opt/sming/Tools/install.sh
Instalando...
[sudo] password for osboxes: 
Hit:1 http://us.archive.ubuntu.com/ubuntu focal InRelease
Hit:2 http://security.ubuntu.com/ubuntu focal-security InRelease
Hit:3 http://us.archive.ubuntu.com/ubuntu focal-updates InRelease
Hit:4 http://us.archive.ubuntu.com/ubuntu focal-backports InRelease
Reading package lists... Done
Reading package lists... Done
Building dependency tree       
Reading state information... Done
python3 is already the newest version (3.8.2-0ubuntu2).
python3 set to manually installed.
unzip is already the newest version (6.0-25ubuntu1).
unzip set to manually installed.
wget is already the newest version (1.20.3-1ubuntu1).
wget set to manually installed.
git is already the newest version (1:2.25.1-1ubuntu3.1).
The following additional packages will be installed:
  binutils binutils-common binutils-x86-64-linux-gnu build-essential
  cmake-data cpp-9 dpkg-dev fakeroot g++-9 g++-9-multilib gcc gcc-10-base
  gcc-9 gcc-9-base gcc-9-multilib gcc-multilib lib32asan5 lib32atomic1
  lib32gcc-9-dev lib32gcc-s1 lib32gomp1 lib32itm1 lib32quadmath0
  lib32stdc++-9-dev lib32stdc++6 lib32ubsan1 libalgorithm-diff-perl
  libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan5 libatomic1
  libbinutils libc-dev-bin libc6 libc6-dbg libc6-dev libc6-dev-i386
  libc6-dev-x32 libc6-i386 libc6-x32 libcc1-0 libcrypt-dev libctf-nobfd0
  libctf0 libcurl4 libexpat1-dev libfakeroot libgcc-9-dev libgcc-s1 libgomp1
  libitm1 libjsoncpp1 libllvm8 liblsan0 libpython3-dev libpython3.8
  libpython3.8-dev libpython3.8-minimal libpython3.8-stdlib libquadmath0
  librhash0 libstdc++-9-dev libstdc++6 libtsan0 libubsan1 libx32asan5
  libx32atomic1 libx32gcc-9-dev libx32gcc-s1 libx32gomp1 libx32itm1
  libx32quadmath0 libx32stdc++-9-dev libx32stdc++6 libx32ubsan1 linux-libc-dev
  manpages-dev python-pip-whl python3-dev python3-distutils python3-wheel
  python3.8 python3.8-dev python3.8-minimal zlib1g zlib1g-dev
Suggested packages:
  binutils-doc cmake-doc ninja-build gcc-9-locales debian-keyring gcc-9-doc
  lib32stdc++6-9-dbg libx32stdc++6-9-dbg autoconf automake libtool flex bison
  gcc-doc glibc-doc libstdc++-9-doc make-doc python-setuptools-doc
  python3.8-venv python3.8-doc binfmt-support
The following NEW packages will be installed:
  binutils binutils-common binutils-x86-64-linux-gnu build-essential
  clang-format-8 cmake cmake-data curl dpkg-dev fakeroot g++ g++-9
  g++-9-multilib g++-multilib gcc gcc-9 gcc-9-multilib gcc-multilib lib32asan5
  lib32atomic1 lib32gcc-9-dev lib32gcc-s1 lib32gomp1 lib32itm1 lib32quadmath0
  lib32stdc++-9-dev lib32stdc++6 lib32ubsan1 libalgorithm-diff-perl
  libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan5 libatomic1
  libbinutils libc-dev-bin libc6-dev libc6-dev-i386 libc6-dev-x32 libc6-i386
  libc6-x32 libcrypt-dev libctf-nobfd0 libctf0 libexpat1-dev libfakeroot
  libgcc-9-dev libitm1 libjsoncpp1 libllvm8 liblsan0 libpython3-dev
  libpython3.8-dev libquadmath0 librhash0 libstdc++-9-dev libtsan0 libubsan1
  libx32asan5 libx32atomic1 libx32gcc-9-dev libx32gcc-s1 libx32gomp1
  libx32itm1 libx32quadmath0 libx32stdc++-9-dev libx32stdc++6 libx32ubsan1
  linux-libc-dev make manpages-dev python-pip-whl python3-dev
  python3-distutils python3-pip python3-setuptools python3-wheel python3.8-dev
  zlib1g-dev
The following packages will be upgraded:
  cpp-9 gcc-10-base gcc-9-base libc6 libc6-dbg libcc1-0 libcurl4 libgcc-s1
  libgomp1 libpython3.8 libpython3.8-minimal libpython3.8-stdlib libstdc++6
  python3.8 python3.8-minimal zlib1g
16 upgraded, 78 newly installed, 0 to remove and 461 not upgraded.
Need to get 104 MB of archives.
After this operation, 398 MB of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 libc6-dbg amd64 2.31-0ubuntu9.2 [10.5 MB]
Get:2 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 libgomp1 amd64 10.2.0-5ubuntu1~20.04 [102 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 gcc-10-base amd64 10.2.0-5ubuntu1~20.04 [19.7 kB]
Get:4 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 libgcc-s1 amd64 10.2.0-5ubuntu1~20.04 [41.6 kB]
.
.
.
Installing collected packages: pyparsing, pyelftools, click
Successfully installed click-7.1.2 pyelftools-0.27 pyparsing-2.3.1

Installation complete

You may need to set environment variables:
  source /opt/sming/Sming/../Tools/export.sh
osboxes@osboxes:/opt/sming$ cd Tools
osboxes@osboxes:/opt/sming/Tools$ source export.sh
osboxes@osboxes:/opt/sming/Tools$
Arquitetura ESP32 (u-blox NINA W106)
Arquitetura Sming Esp32
Suporte à construção de Sming para a arquitetura Esp32.

Variáveis de Build
IDF_PATH
Ele contém o diretório base para o conjunto de ferramentas ESP-IDF usado para construir a estrutura. Esta variável 
é necessária e deve ser definida de acordo.

Requisitos
Para poder compilar para a arquitetura ESP32, você deve ter o ESP-IDF v4.1 instalado. Os instaladores do Sming podem 
fazer isso por você.

Você pode encontrar mais detalhes na documentação do ESP-IDF.

Bulding
Certifique-se de que o IDF_PATH esteja definido. Certifique-se também de que as outras variáveis de ambiente ESP-IDF 
estão definidas.

No Linux, isso pode ser feito usando o seguinte comando:

source $SMING_HOME/Tools/export.sh
Construa a estrutura e o aplicativo como de costume, especificando SMING_ARCH = Esp32. Por exemplo:

cd $SMING_HOME/../samples/Basic_Serial
make SMING_ARCH=Esp32
Isso cria o aplicativo. Depois de construído, o aplicativo precisa ser instalado em um microcontrolador Esp32 real para 
ser executado. O piscar pode ser feito usando o seguinte comando:

make flash
SDK
Sming vem com bibliotecas pré-compiladas e arquivos de configuração. Se necessário, você pode reconfigurar o ESP-IDF usando 
o comando abaixo:

make SMING_ARCH=Esp32 sdk-menuconfig
Uma recompilação é necessária após a alteração da configuração. Isso pode ser feito com o seguinte comando:

make SMING_ARCH=Esp32 sdk-build
Se você quiser voltar a usar o SDK pré-compilado padrão, emita o seguinte comando:

make SMING_ARCH = Esp32 sdk-default
Exemplo
make SMING_ARCH=Esp32 COM_PORT=/dev/ttyUSB3 COM_SPEED_ESPTOOL=921600
Compilando o exemplo Blink
Código
#include <SmingCore.h>

#define LED_PIN 2 // GPIO2

Timer procTimer;
bool state = true;

void blink()
{
        digitalWrite(LED_PIN, state);
        state = !state;
}

void init()
{
        pinMode(LED_PIN, OUTPUT);
        procTimer.initializeMs(1000, blink).start();
}
osboxes@osboxes:/opt/sming/samples/Basic_Blink$ ls /dev/ttyU*
/dev/ttyUSB0
osboxes@osboxes:/opt/sming/samples/Basic_Blink$ make flash SMING_ARCH=Esp32 COM_PORT=/dev/ttyUSB0 COM_SPEED_ESPTOOL=921600

Basic_Blink: Invoking 'flash' for Esp32 (debug) architecture
make components application
make[1]: Entering directory '/opt/sming/samples/Basic_Blink'

Building /opt/sming/samples/Basic_Blink/out/Esp32/debug/lib/clib-App-4861c1f9ec77f6a75680a417f6cbe1c6.a
make[2]: Nothing to be done for 'build'.
Validating hardware config 'standard'
Verifying partition table...
Writing to 'out/Esp32/debug/firmware/partitions.bin'
SSL support disabled
Basic_Blink: Linking out/Esp32/debug/build/app.out
   Section|                   Description| Start (hex)|   End (hex)|Used space
------------------------------------------------------------------------------
      data|        Initialized Data (RAM)|    3FFB0000|    3FFB317D|   12669
    rodata|           ReadOnly Data (SPI)|    3F400020|    3F4160E4|   90308
       bss|      Uninitialized Data (RAM)|    3FFB3180|    3FFB82A8|   20776
 iram_text|            Cached Code (IRAM)|    40080400|    4009505C|   85084
      text|           Uncached Code (SPI)|    400D0020|    4013FCAB|  457867
Total Used RAM : 33445
Free RAM : 302427
Free IRam : 45988
esptool.py v3.0
make[1]: Leaving directory '/opt/sming/samples/Basic_Blink'
Killing Terminal to free /dev/ttyUSB0
make: [/opt/sming/Sming/Components/terminal/component.mk:32: kill_term] Killed (ignored)
WriteFlash 0x1000=/opt/sming/Sming/out/Esp32/debug/build/esp32/sdk/bootloader/bootloader.bin 
0x00008000=out/Esp32/debug/firmware/partitions.bin   0x00010000=out/Esp32/debug/firmware/app.bin
/usr/bin/python3 /opt/sming/Sming/Components/esptool/esptool/esptool.py -p /dev/ttyUSB0 -b 921600 --chip esp32 --before 
default_reset --after hard_reset write_flash -z -fs 4MB -ff 40m -fm dio 0x1000
/opt/sming/Sming/out/Esp32/debug/build/esp32/sdk/bootloader/bootloader.bin 0x00008000
out/Esp32/debug/firmware/partitions.bin 0x00010000 out/Esp32/debug/firmware/app.bin esptool.py v3.0 Serial port /dev/ttyUSB0 Connecting........_____....._ Chip is ESP32-D0WDQ6 (revision 1) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz MAC: a4:cf:12:75:31:c8 Uploading stub... Running stub... Stub running... Changing baud rate to 921600 Changed. Configuring flash size... Flash params set to 0x0220 Compressed 23952 bytes to 14906... Wrote 23952 bytes (14906 compressed) at 0x00001000 in 0.2 seconds (effective 887.1 kbit/s)... Hash of data verified. Compressed 3072 bytes to 121... Wrote 3072 bytes (121 compressed) at 0x00008000 in 0.0 seconds (effective 2182.3 kbit/s)... Hash of data verified. Compressed 647072 bytes to 416450... Wrote 647072 bytes (416450 compressed) at 0x00010000 in 5.6 seconds (effective 927.7 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin... /usr/bin/python3 -m serial.tools.miniterm --raw --encoding ascii /dev/ttyUSB0 115200 --- Miniterm on /dev/ttyUSB0 115200,8,N,1 --- --- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- I (357) esp_image: segment 5: paddr=0x0009fcb4 vaddr=0x40086d9c size=0x0e2c0 ( 58048) load I (394) boot: Loaded app from partition at offset 0x10000 I (394) boot: Disabling RNG early entropy source... I (394) cpu_start: Pro cpu up. I (398) cpu_start: Application information: I (403) cpu_start: Project name: Sming I (408) cpu_start: App version: 4.3.0 I (412) cpu_start: Compile time: Apr 5 2021 15:50:07 I (418) cpu_start: ELF file SHA256: 179a9d0196742c03... I (424) cpu_start: ESP-IDF: v4.1.1-250-ga92185263 I (431) cpu_start: Starting app cpu, entry point is 0x400811f0 I (0) cpu_start: App cpu up. I (441) heap_init: Initializing. RAM available for dynamic allocation: I (448) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM I (454) heap_init: At 3FFB82A8 len 00027D58 (159 KiB): DRAM I (460) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM I (466) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM I (473) heap_init: At 4009505C len 0000AFA4 (43 KiB): IRAM I (479) cpu_start: Pro cpu start user code I (497) spi_flash: detected chip: generic I (498) spi_flash: flash io: dio I (498) cpu_start: Starting scheduler on PRO CPU. I (0) cpu_start: Starting scheduler on APP CPU. I (60) wifi:wifi driver task: 3ffbb1c4, prio:23, stack:6656, core=0 I (627) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE I (637) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE I (667) wifi:wifi firmware version: ce1f327 I (667) wifi:config NVS flash: enabled I (667) wifi:config nano formating: disabled I (667) wifi:Init data frame dynamic rx buffer num: 32 I (667) wifi:Init management frame dynamic rx buffer num: 32 I (677) wifi:Init management short buffer num: 32 I (677) wifi:Init dynamic tx buffer num: 32 I (687) wifi:Init static rx buffer size: 1600 I (687) wifi:Init static rx buffer num: 10 I (687) wifi:Init dynamic rx buffer num: 32 I (697) wifi_init: rx ba win: 6 I (697) wifi_init: tcpip mbox: 32 I (707) wifi_init: udp mbox: 6 I (707) wifi_init: tcp mbox: 6 I (707) wifi_init: tcp tx win: 5744 I (717) wifi_init: tcp rx win: 5744 I (717) wifi_init: tcp mss: 1440 I (727) wifi_init: WiFi IRAM OP enabled I (727) wifi_init: WiFi RX IRAM OP enabled 
Para sair do TERMINAL (CRTL-T Q) 
Execução
 
 
Exemplos
https://github.com/SmingHub/Sming 

Basic Blink

Blinking é alguma coisa como "Hello World".

Simple GPIO Input/Output

#define LED_PIN 2 // GPIO2
...
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, HIGH);

Start Serial Communication

Serial.begin(9600);
Serial.println("Hello Sming! Let's do smart things.");

Connect to WiFi

WifiStation.enable(true);
WifiStation.config("LOCAL-NETWORK", "123456789087"); // Put your SSID and password here

Read DHT22 sensor

#include <Libraries/DHTesp/DHTesp.h> // This is just a popular Arduino library!

#define DHT_PIN 0 // GPIO0
DHTesp dht;

void init()
{
  dht.setup(DHT_PIN, DHTesp::DHT22);

  float h = dht.getHumidity();
  float t = dht.getTemperature();
}

HTTP Client

HttpClient thingSpeak;
...
thingSpeak.downloadString("http://api.thingspeak.com/update?key=XXXXXXX&field1=" + String(sensorValue), onDataSent);

void onDataSent(HttpClient& client, bool successful)
{
  if (successful) {
    Serial.println("Successful!");
  }
  else {
    Serial.println("Failed");
  }
}

OTA Application Update Based on rBoot

void OtaUpdate()
{
  uint8 slot;
  rboot_config bootconf;

  Serial.println("Updating...");

  // need a clean object, otherwise if run before and failed will not run again
  if (otaUpdater) {
    delete otaUpdater;
  }

  otaUpdater = new RbootHttpUpdater();

  // select rom slot to flash
  bootconf = rboot_get_config();
  slot = bootconf.current_rom;
  if (slot == 0) {
    slot = 1;
  }
  else {
    slot = 0;
  }

  // flash rom to position indicated in the rBoot config rom table
  otaUpdater->addItem(bootconf.roms[slot], ROM_0_URL);

  // and/or set a callback (called on failure or success without switching requested)
  otaUpdater->setCallback(OtaUpdate_CallBack);

  // start update
  otaUpdater->start();
}

HTTP Server

server.listen(80);
server.paths.set("/", onIndex);
server.paths.set("/hello", onHello);
server.paths.setDefault(onFile);

Serial.println("=== WEB SERVER STARTED ===");
Serial.println(WifiStation.getIP());

...

void onIndex(HttpRequest &request, HttpResponse &response)
{
  TemplateFileStream *tmpl = new TemplateFileStream("index.html");
  auto &vars = tmpl->variables();
  vars["counter"] = String(counter);
  vars["IP"] = WifiStation.getIP().toString();
  vars["MAC"] = WifiStation.getMAC();
  response.sendTemplate(tmpl);
}

void onFile(HttpRequest &request, HttpResponse &response)
{
  String file = request.getPath();
  if (file[0] == '/')
    file = file.substring(1);

  response.setCache(86400, true);
  response.sendFile(file);
}

For more examples take a look at the HttpServer_ConfigNetwork, HttpServer_Bootstrap, HttpServer_WebSockets and HttpServer_AJAX samples.

Email Client

SmtpClient emailClient;

emailClient.connect(Url("smtp://user:password@domain.com"));

MailMessage* mail = new MailMessage();
mail->from = "developers@sming";
mail->to = "iot-developers@world";
mail->subject = "Greetings from Sming";
mail->setBody("Hello");

FileStream* file= new FileStream("image.png");
mail->addAttachment(file);

emailClient.onMessageSent(onMailSent);
emailClient.send(mail);

...

int onMailSent(SmtpClient& client, int code, char* status)
{
    MailMessage* mail = client.getCurrentMessage();

    ...

    if(!client.countPending()) {
        client.quit();
    }

    return 0;
}
DÚVIDAS 
suporte@smartcore.com.br

REFERÊNCIAS


Sobre a SMARTCORE

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