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.
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:
- Instale o Java 8 (JRE) da Oracle se ainda não estiver instalado
- 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
- Baixe o arquivo Jar mais recente executável (aqui) e clique duas vezes para executá-lo.
Utilizando IoT Ladder Editor
- Use arrastar e soltar para colocar instruções no Rung e associar variáveis de entrada/saída às instruções
- Vá para Project>Build para gerar o código de saída
- O arquivo de saída plc.ino será criado na pasta "pasta atual"/out/plc
- Clique duas vezes para abrir Arduino IDE
- Coloque a placa u-blox NINA W102 no modo de programação
- Clique no ícone Atualizar no IDE Arduino para carregar o programa na placa u-blox NINA W102
- Após o sucesso, reinicie a placa u-blox NINA W102 para executar o programa
Circuito de teste
INSTALAÇÃO ARDUINO
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
Execução
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
Nenhum comentário:
Postar um comentário