terça-feira, 23 de março de 2021

Programando u-blox NINA-W102 IoT Ladder Editor

 Programando u-blox NINA-W102 com IoT Ladder Editor


O objetivo deste BLOG é demonstrar como é possível utilizar o LADDER para programação do u-blox NINA W102. O exemplo em LADDER fará um LED piscar em uma GPIO. Foi utilizado o IoT Ladder Editor criado por Leonardo Fernandes o qual gera o código .INO o qual pode ser compilado para o u-blox NINA W102 via Arduino.

Foi utilizado o EVK-NINA-W para o teste.


IoT LADDER EDITOR



Este projeto é um editor de código-fonte aberto que gera código para dispositivos IoT. Através do protocolo MQTT é possível interagir com as variáveis do programa. A versão atual gera código Arduino (.INO) para u-blox NINA W102.

É um aplicativo Java de desktop desenvolvido com o plug-in Eclipse IDE + WindowBuilder.

Como executar:
  1. Instale o Java 8 (JRE) da Oracle se ainda não estiver instalado
  2. Para compilar o código gerado e carregá-lo na placa u-blox NINA W102 instale o IDE Arduino e configure-o, leia README_arduino_ide_setup.md para fazer isso
  3. Baixe o arquivo Jar mais recente executável (aqui) e clique duas vezes para executá-lo.
Utilizando IoT Ladder Editor
  1. Use arrastar e soltar para colocar instruções no Rung e associar variáveis de entrada/saída às instruções
  2. Vá para Project>Build para gerar o código de saída
  3. O arquivo de saída plc.ino será criado na pasta "pasta atual"/out/plc
  4. Clique duas vezes para abrir Arduino IDE
  5. Coloque a placa u-blox NINA W102 no modo de programação
  6. Clique no ícone Atualizar no IDE Arduino para carregar o programa na placa u-blox NINA W102
  7. Após o sucesso, reinicie a placa u-blox NINA W102 para executar o programa
Circuito de teste


INSTALAÇÃO ARDUINO

Baixe e instale a última versão da IDE do Arduino

https://www.arduino.cc/en/Main/Software

Execute a IDE do Arduino e click em files-->preferences


e digite
https://dl.espressif.com/dl/package_esp32_index.json e click OK

Vá agora em Tools > Board > Boards Manager



Procure por "ESP32 by Espressif" e instale


Aguarde alguns minutos para instalação do SDK. 

Selecione em tools-->board o módulo u-blox NINA-W10 series



LED BLINK COM IoT Ladder Editor


O exemplo abaixo fará o LED piscar no Q1 (GPIO 25 - ESP32 - IO25) a cada 1000ms



Código Gerado

// IoT Ladder Editor (0.0.2) // // Copyright (C) 2021 Leonardo Fernandes // // https://github.com/leofds/iot-ladder-editor // // Project: Blink Led #if CONFIG_FREERTOS_UNICORE #define ARDUINO_RUNNING_CORE 0 #else #define ARDUINO_RUNNING_CORE 1 #endif #define PIN_Q01 2 #define PIN_Q02 4 #define PIN_Q03 12 #define PIN_Q04 13 #define PIN_Q05 33 #define PIN_Q06 25 #define PIN_Q07 26 #define PIN_Q08 27 #define PIN_I01 14 #define PIN_I02 16 #define PIN_I03 17 #define PIN_I04 18 #define PIN_I05 19 #define PIN_I06 21 #define PIN_I07 22 #define PIN_I08 23 // Timer struct typedef struct { int32_t PRE; int32_t AC; int32_t B; int32_t DN; int32_t EN; uint64_t TT; } LD_TIMER; union { uint32_t p[2]; uint64_t v; } LD_TIME; uint64_t getTime(){ return LD_TIME.v; } uint8_t LD_Q6 = 0; LD_TIMER LD_T1; LD_TIMER LD_T2; void refreshTime64bit(){ unsigned long now = millis(); if(now < LD_TIME.p[0]){ LD_TIME.p[1]++; } LD_TIME.p[0] = now; } void readInputs(){ } void writeOutputs(){ digitalWrite(PIN_Q06, LD_Q6); } void rung001(void){ uint8_t _LD_S0; uint64_t _LD_T1; uint64_t _LD_T2; uint64_t _LD_T3; uint64_t _LD_T4; _LD_S0 = 1; LD_T1.EN = _LD_S0; if(!_LD_S0){ LD_T1.DN = 0; LD_T1.AC = 0; LD_T1.TT = getTime(); }else{ if(!LD_T1.DN){ _LD_T1 = getTime(); _LD_T2 = _LD_T1 - LD_T1.TT; if(_LD_T2 >= LD_T1.B){ LD_T1.TT = _LD_T1; LD_T1.AC = LD_T1.AC + 1; if(LD_T1.AC >= LD_T1.PRE){ LD_T1.DN = 1; } } } } _LD_S0 = LD_T1.DN; LD_Q6 = _LD_S0; LD_T2.EN = _LD_S0; if(!_LD_S0){ LD_T2.DN = 0; LD_T2.AC = 0; LD_T2.TT = getTime(); }else{ if(!LD_T2.DN){ _LD_T3 = getTime(); _LD_T4 = _LD_T3 - LD_T2.TT; if(_LD_T4 >= LD_T2.B){ LD_T2.TT = _LD_T3; LD_T2.AC = LD_T2.AC + 1; if(LD_T2.AC >= LD_T2.PRE){ LD_T2.DN = 1; } } } } _LD_S0 = LD_T2.DN; if(_LD_S0){ LD_T1.DN = 0; LD_T1.AC = 0; LD_T1.EN = 0; LD_T1.TT = getTime(); } } void initContext(void){ LD_T2.EN = 0; LD_T2.AC = 0; LD_T2.PRE = 1; LD_T2.B = 1000; LD_T2.DN = 0; LD_T2.TT = getTime(); LD_T1.EN = 0; LD_T1.AC = 0; LD_T1.PRE = 1; LD_T1.B = 1000; LD_T1.DN = 0; LD_T1.TT = getTime(); } void init(){ LD_TIME.v = 0; refreshTime64bit(); pinMode(PIN_Q06, OUTPUT); } void TaskScan(void *pvParameters){ for(;;){ vTaskDelay(1); readInputs(); refreshTime64bit(); rung001(); writeOutputs(); } } void setup() { Serial.begin(115200); init(); initContext(); xTaskCreatePinnedToCore(TaskScan,"TaskScan",4096,NULL,2,NULL,ARDUINO_RUNNING_CORE); } void loop() { }

Agora compile no Arduino


Transfira para o u-blox NINA W102


Execução



Você verá o LED alterando de estado a cada 1000ms!

DÚVIDAS

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

Nenhum comentário:

Postar um comentário