Olá, boa tarde!!
Estou com um projeto de automação e preciso que o arduino interprete alguns dados que estarão salvos no micro sd junto ao arduino...
Pesquisei e achei uma biblicoteca que usa um banco de dados para essa interpretação, como posso fazer pra usa-la e que ela interprete executando uma ação de ligar um rele em determinada hora caso leia "Rele, 1, 13:10" ou desligue lendo "Rele, 0, 13:20" por exemplo?

Link dos exemplos da biblioteca EDB:

https://github.com/jwhiddon/EDB/blob/master/examples/EDB_SDCARD/EDB...

https://github.com/jwhiddon/EDB/blob/master/examples/EDB_Simple/EDB...

Exibições: 768

Responder esta

Respostas a este tópico

Boa noite Filipi,

Já pensou em usar a biblioteca <IniFile.h>?

Eu uso ela num projeto que inclusive obtive ajuda aqui no fórum para completar ele.

Uso ele para ler de um de um arquivo .ini gravado no SD as configurações de Rede (ip e mascara) para setar nas configurações do shield de ethernet em tempo de execução.

Enfim, acho que ela te atenderá.

Chegou a pesquisar algo referente a ela?

Abraços.

Olá Oziris, então pelo o que você falou consigo setar comandos direto desse arquivo .ini? Seria ótimo pra colocar agendas de execução no .ini pro arduino executar sem ter que compilar o codigo toda vez... Obrigado, espero sua resposta

Boa tarde Filipi, vamos ver se consigo te ajudar melhor.

Exemplo de utilização.

Arquivo .ini:

[rele]
canal1=Sala
canal2=Cozinha

Arquivo Sketch:

#include <SPI.h>
#include <IniFile.h>
#include <utility/w5100.h>
#define SD_SELECT 4
#define ETHERNET_SELECT 10
#define W5100_ETHERNET_SHIELD

String can1;
String can2;

void setup(){
const size_t bufferLen = 200;
char buffer[bufferLen];

const char *filename = "/net.ini";
SPI.begin();
SD.begin(SD_SELECT);
IniFile ini(filename);
ini.open();

if (ini.getValue("rele", "canal1", buffer, bufferLen)) {
can1 = String(buffer);
Serial.println(can1);
}

if (ini.getValue("rele", "canal2", buffer, bufferLen)) {
can2 = String(buffer);
Serial.println(can2);
}

}

void loop(){
Serial.println(can1);
Serial.println(can2);
delay(2000);

}

Nesse exemplo, crie um arquivo chamado net.ini e cole nele o dados citados acima e coloque esse arquivo no SD.

Depois compile o sketch citado, coloque o SD no arduino e monitore a Serial.

Cara, espero que ajude.

Aguardo comentários.

Bom dia Filipi, tudo certo?

Conseguiu testar?

Abraços.

Opa, Oziris
Bom dia!!!
Não testei ainda, tô sem adaptador pra passar o arquivo pro micro sd :/
Vou arranjar um e testar logo, to curioso pra saber como esse código funciona!
Me tira uma duvida, as linhas no arquivo .ini tem que ficar como?

Nossa, desculpa minha desatenção!!! Não vi no começo do código o que vai no .ini! Vou testar aqui e retorno aqui

Filipi, ajustei e testei o código.

Faltou inicializar a Serial no Setup.

Aproveitei e coloquei uma linha para printar na serial que está iniciando o programa e também comentei dois blocos do codigo. Coisa simples.

Um detalhe importante, o SD deve estar formatado em fat32. Para formatar o cartão eu uso o programinha chamado SD Formatter.

Segue código:

#include <SPI.h>
#include <IniFile.h>
#include <utility/w5100.h>
#define SD_SELECT 4
#define ETHERNET_SELECT 10
#define W5100_ETHERNET_SHIELD

String can1;
String can2;

void setup(){
Serial.begin(9600);
Serial.println("INICIALIZACAO");
const size_t bufferLen = 200;
char buffer[bufferLen];
const char *filename = "/net.ini";
SPI.begin();
SD.begin(SD_SELECT);
IniFile ini(filename);
ini.open();

//o parametro "rele" dentro da chamada ini.getValue é o nome do bloco onde está o parametro canal1)
//aqui le o valor do parametro canal1 do .ini e armazena na variaval can1
if (ini.getValue("rele", "canal1", buffer, bufferLen)) {
can1 = String(buffer);
Serial.println(can1);
}

//aqui le o valor do parametro canal1 do .ini e armazena na variaval can1
if (ini.getValue("rele", "canal2", buffer, bufferLen)) {
can2 = String(buffer);
Serial.println(can2);
}
}

void loop(){
Serial.println(can1);
Serial.println(can2);
delay(2000);
}

Depois de testar comenta aí.

Abraços e obrigado.

Boa tarde Filipi, tudo certo?

Conseguiu testar o código atualizado?

Abraços.

Boa tarde Oziris, tudo certinho!!!

Testei aqui e ele printa no serial "INICIALIZACAO" mas nao printa o resto das coisas... Acho que nao tá reconhecendo o cartao... To usando um de 32gb... Será isso?

Opa, tudo certo também!...

Cara, agora com certeza tem algo de errado com o SD, no meu teste eu usei um de 1gb, no formato Fat32. Não tens um SD menor pra testar?

Tais usando um shield ethernet w5100? ele tem um probleminha de travamento, as vezes é necessário dar um reset para ele voltar a funcionar. Eu sempre faço o seguinte:

- compilo o sketch;

- depois abro a serial, se ficar só na INICIALIZAÇÃO, feche o monitor serial e abra novamente em seguida.

Aguardo comentários.

Abraços.

Olá, usei a library que já usava antes e deu certo mas não consegui ligar o rele dependendo da leitura do .ini!

Como posso tratar o .ini para que determinado comando ligue ou desligue um rele?

Segue o Código:

    #include <SPI.h>
    #include <IniFile.h>
    #include <Ethernet.h>
    #include <RelayBoard.h>
    #define SD_SELECT 4
   // #define ETHERNET_SELECT 10
    //#define W5100_ETHERNET_SHIELD
   #define date    6
   #define strobe  3
   #define clock   2
   #define numberboards 1

    RelayBoard relay(date, strobe, clock, numberboards);

    int i;
    int j;

    String can1;
    String can2;

    void setup(){
    Serial.begin(9600);
    Serial.println("INICIALIZACAO");
    const size_t bufferLen = 200;
    char buffer[bufferLen];
    const char *filename = "/net.ini";
    SPI.begin();
    SD.begin(SD_SELECT);
    IniFile ini(filename);
    ini.open();

    //o parametro "rele" dentro da chamada ini.getValue é o nome do bloco onde está o parametro canal1)
    //aqui le o valor do parametro canal1 do .ini e armazena na variaval can1
    if (ini.getValue("rele", "canal1", buffer, bufferLen)) {
    can1 = String(buffer);
    Serial.println(can1);
    relay.set(0,0,1);        
    }

    //aqui le o valor do parametro canal1 do .ini e armazena na variaval can1
    if (ini.getValue("rele", "canal2", buffer, bufferLen)) {
    can2 = String(buffer);
    Serial.println(can2);
    relay.set(0,1,1);
    }
    }

    void loop(){
    Serial.println("can1");
    Serial.println("can2");
    delay(2000);
    }

Bom dia Filipi,

Que tipo de placa de rele você está usando?

Eu uso placas com 1 rele, com 4 e até com 8, e nunca usei essa biblioteca aí.

Vou testar algumas coisas desse seu codigo e te retorno.

Abraços.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço