Boa tarde!

Fiz um controle de acesso via rfid com arduino está funcionando 100%, mas estou com dúvida como fazer com consulta mysql.

Exibições: 1166

Responder esta

Respostas a este tópico

 

e....?

Diga lá, companheiro: qual sua dúvida exatamente? pense que não fazemos a mínima idéia daquilo que vc quer fazer

Danilo, ta estranho uma coisa, as aspas dentro da sentença:

buf = "select id from cssarf.rfid where ativo = 1 and tag= '"+String(caracter)+"';";
buf.toCharArray(query, 128);
id= 
Serial.println("rfid: "+ id);

Você abre aspas duplas ( buf = "se ... ) da na hora de concatenar você com as aspas simples ( tag= '"+S ), se você colar a sentença em um editor de texto puro tipo NOTEPAD ++ vai notar isso.

Conselho faz a sentença num mysql depois só cola no codigo e faz o concatenamento.

Tem mais uma coisa que notei, aqui ó:

buf = "select id from cssarf.rfid where ativo = 1 and tag= '"+String(caracter)+"';";
buf.toCharArray(query, 128);
id= 
Serial.println("rfid: "+ id);

Você tem uma variável para pegar o id ( id = ) e termina ai e logo abaixo você manda imprimir ela, não ta faltando colocar valor nela ??

Espero ter ajudado

Abraço

Boa noite.

Preciso fazer um controle de usuário por meio de cartões de acesso.

O meu sistema ele pega a tag o RFID e envia como consulta em MySql para retornar primeiro o id da tag. Depois envia outra consulta para retornar se a tag está liberada ou não para acessar a área. Meu ambiente de trabalho é um clube e o controle de acesso é para entrada de carros. O sócio posiciona a tag no leitor e o mesmo libera a entrada. Sendo que, fazemos o cadastro do sócio e informamos ao sistema a tag e a liberação para os setores atribuidos a sua tag. Preciso que o arduino via ethernet faça uma busca via mysql para verificar e autorizar.

está faltando no teu sketch os trechos de código referente ao ethernet shield, mais especificamente para ele se tornar webclient. Sem tornar seu arduino um webclient, não tem como vc fazer consultas ao banco de dados mysql

outra coisa: vc poderia economizar uma transação (consulta) nesse seu projeto. Por exemplo já na primeira consulta, onde é retornado o id da tag, vc poderia aproveitar e já retornar também o status de acesso (liberado ou não liberado)

mas como eu faria para realizar esta consulta?

este é meu problema.

No mysql é simples :

select cancela_1 from acesso where rfid_id=(select id from rfid where ativo = 1 and tag= ' "+String(caracter)" ');"

ele funciona na moral, mas o que usar?

comando?

my_conn.cmd_query(consulta); //Como irei declarar a consulta

resultado = my_conn.get_next_row(); // como pegarei o resultado para comparar?

contudo não consigo fazer o arduino rodar a consulta.

Duvidas:

Como irei declarar esta consulta?

para que eu possa carregar o valor da tag

antes de pensar em fazer consulta ao servidor mysql, vc precisa resolver um passo importante, que é permitir ao arduino conectividade à rede

esse seu servidor mysql está acessível na rede, estou correto?

agora vc precisa colocar o arduino nessa mesma rede para só então vc poder fazer consultas ao mysql

vc tem o ethernet shield?

aqui tem um tutorial que irá elucidar essa conexão do arduino ao banco de dados mysql:

http://drcharlesbell.blogspot.com.br/2013/04/introducing-mysql-conn...

CÓDIGO ATUALIZADO:

#include <SoftwareSerial.h>
#include <Ethernet.h>
#include <SPI.h>
#include <Wire.h>
#include <LiquidCrystal.h>
#include <sha1.h>
#include <avr/pgmspace.h>
//#include <avr/dtostrf.h> // Add this for the Due
#include <stdlib.h>
#include <mysql.h>
#define RX 9
#define TX 10
#define PIN_RELAY A4
#define PIN_RELAY2 A5
#define PIN_BUZZER A3
#define PIN_NEGADO A2
#define PIN_SINAL A0
#define PIN_PERMITIDO A1
#define stx 2
#define etx 3
#define ON 1
#define OFF 0
char local[] ="cancela_1";
int counter;
byte data[14];


SoftwareSerial rfidReader(8, 9); // RX, TX
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); //pinos do lcd

String buf;
String buf2;
String caracter;
#define query[]="select id from cssarf.rfid where ativo = 1 and tag= '";
#define query1[]="";
int id;
int acesso=0;

byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,175); //Define o endereco IP
IPAddress gateway(192,168,1,1); //Define o gateway
IPAddress subnet(255, 255, 255, 0); //Define a máscara de rede
IPAddress server_addr(192,168,1,2);
char user[] = "cssarf";
char password[] = "******";
Connector my_conn;
EthernetClient cliente;
void setup()
{

lcd.begin(16, 2); // Informa a area do display lcd
lcd.setCursor(0,0); //primeira linha do display
digitalWrite(PIN_RELAY, OFF);
digitalWrite(PIN_RELAY2, OFF);
digitalWrite(PIN_BUZZER,OFF);
digitalWrite(PIN_SINAL,OFF);
digitalWrite(PIN_PERMITIDO,OFF);
digitalWrite(PIN_NEGADO,OFF);
pinMode(PIN_BUZZER, OUTPUT);
pinMode(PIN_NEGADO, OUTPUT);
pinMode(PIN_SINAL, OUTPUT);
pinMode(PIN_PERMITIDO, OUTPUT);
pinMode(PIN_RELAY, OUTPUT);
pinMode(PIN_RELAY2, OUTPUT);
rfidReader.begin(9600);
Serial.begin(9600);
SPI.begin();
mensageminicial();
Ethernet.begin(mac);
if (my_conn.mysql_connect(server_addr, 3306, user, password)) {
servidorencontrado();
}
else
servidornaoencontrado();
}

void loop()
{
if (rfidReader.available() > 0) {

data[counter] = rfidReader.read();
counter++;
if(counter > 13) {
counter = 0;
if(data[0] == stx && data[13] == etx) {
for(int x = 1; x < 11; x++) {
caracter=caracter+data[x];
}
digitalWrite(PIN_BUZZER,ON);
delay(100);
digitalWrite(PIN_BUZZER,OFF);
Serial.print(caracter);
}
}
}
if(caracter!=""){
if(cliente.available()){
verificaacessocombanco();
}else{
verificaacessosembanco();
}
}

}

void servidornaoencontrado(){
digitalWrite(PIN_PERMITIDO,ON);
delay(300);
digitalWrite(PIN_PERMITIDO,OFF);
delay(300);
digitalWrite(PIN_PERMITIDO,ON);
delay(300);
digitalWrite(PIN_PERMITIDO,OFF);
delay(300);
digitalWrite(PIN_PERMITIDO,ON);
delay(300);
digitalWrite(PIN_PERMITIDO,OFF);
delay(300);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" SERVIDOR ");
lcd.setCursor(0,1);
lcd.print(" NAO ENCONTRADO ");
delay(5000);
mensageminicial();
}
void servidorencontrado(){
digitalWrite(PIN_PERMITIDO,ON);
delay(300);
lcd.clear();
lcd.setCursor(0,0);
lcd.print(" SERVIDOR ");
lcd.setCursor(0,1);
lcd.print(" ENCONTRADO ");
delay(5000);
mensageminicial();
}


void verificaacessocombanco(){

// preciso implementar


}

void verificaacessosembanco(){


if(caracter=="50564848566753676654"||caracter=="50564848566755565270"||caracter=="50564848566753705557"){
acesso=1;
}else{
acesso=0;
}



//validações
if(acesso==1){
digitalWrite(PIN_PERMITIDO, ON);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("ACESSO LIBERADO");
lcd.setCursor(0,1);// segunda linha do display
lcd.print(" SEJA BEM VINDO ");
delay(3000);
lcd.clear();
lcd.setCursor(0,0);
digitalWrite(PIN_PERMITIDO, OFF);
digitalWrite(PIN_NEGADO, ON);
lcd.print(" AGUARDE ");
lcd.setCursor(0,1);// segunda linha do display
lcd.print(" A LIBERACAO ");

digitalWrite(PIN_RELAY, ON); //Aciona o rele 1
delay(1000);
digitalWrite(PIN_RELAY, OFF); //Desliga o rele 1
delay(2000);
digitalWrite(PIN_RELAY2, ON); //Aciona o rele 2
delay(1000);
digitalWrite(PIN_RELAY2, OFF); //Desliga o rele 2
caracter="";
rfidReader.flush();
lcd.clear();
digitalWrite(PIN_NEGADO, OFF);

mensageminicial();
digitalWrite(PIN_PERMITIDO, ON);
delay(1000);
digitalWrite(PIN_PERMITIDO, OFF);
acesso=0;
}else{
lcd.clear();
lcd.setCursor(0,0);
digitalWrite(PIN_NEGADO, ON);
lcd.print("ACESSO BLOQUEADO");
lcd.setCursor(0,1);// segunda linha do display
lcd.print("TENTE NOVAMENTE!");

delay(1000);
digitalWrite(PIN_NEGADO, OFF);
caracter="";
rfidReader.flush();
acesso=0;
lcd.clear();

mensageminicial();
}


}

void mensageminicial(){
lcd.clear();
lcd.setCursor(0,0); //primeira linha do display
lcd.print("CLUBE DAS AGUIAS"); //
lcd.setCursor(0,1);// segunda linha do display
lcd.print(" Passe o Cartao ");
}

Preciso de ajuda para implementar  o método void verificaacessocombanco()

Consulta em banco mysql para retornar se o acesso está liberado ou não.

pesquisa a ser implementada:

select cancela_1 from cssarf.acesso where rfid_id=(select id from cssarf.rfid where ativo = 1 and tag= 'informar tag')

ao invés de tentar já colocar a consulta ao mysql no teu sketch de controle de acesso, comece aprendendo com código pequeno, escrito apenas para implementar o ethernet shield + consulta ao banco de dados

depois que vc pegar as manhas do funcionamento é que vc deveria juntar ao sketch de controle de acesso.

portanto, sugiro criar um banco de dados teste com poucos usuários cadastrados e aprender como faz a consulta

vc leu o tutorial que te informei? ali ensina  a fazer o básico pra permitir ao arduino consultar um banco de dados mysql. Dá perfeitamente pra vc adaptar aquilo que está no tutorial no teu projeto

http://drcharlesbell.blogspot.com.br/2013/04/introducing-mysql-conn...

.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço