Ich habe auf meinem Arduino UNO ein Ethernet und RFID Modul
Es wird mittels Mysql Connector eine Abfrage an eine Mysql db gesendet ob die RFID gespeichert ist oder nicht, und dementsprechend ausgegeben.
Soweit so gut kommt das Richtige ergebniss.
Aber nach +/- 3 Abfragen bekomme ich im Serial Monitor
Bad mojo. EOF found reading column header.
ERROR: You must read the columns first!
hier mal der Aktuelle Skatch
#include <Ethernet.h>
#include <MySQL_Connection.h>
#include <SPI.h>
#include <RFID.h>
#include <MySQL_Cursor.h>
//Ethernet Shield Konfiguration
byte mac_addr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,177);
//Mysql Datenbank Konfiguration
IPAddress server_addr(192,168,0,245); // IP of the MySQL *server* here
char user[] = "arduino"; // MySQL user login username
char password[] = "123456"; // MySQL user login password
EthernetClient client;
MySQL_Connection conn((Client *)&client);
//Pin belegung für das RFID Shield
#define SS_PIN 8 //SDA
#define RST_PIN 9 //RST
RFID rfid(SS_PIN, RST_PIN);
void setup()
{
Serial.begin(115200); // Aufbau der Seriellen verbindung für den Monitor
SPI.begin();
rfid.init();
Ethernet.begin(mac_addr,ip); // Starten der IP Configuration
Serial.println("Connecting...");
if (conn.connect(server_addr, 3306, user, password)) {
delay(1000);
Serial.println("Verbindung hergestellt.");
}
else
{
Serial.println("Connection failed.");
}
}
void soft_reset() {
asm volatile("jmp 0");
}
int num_fails;
void loop() {
//Mysql Verbindung Prüfen und bei bedarf den Arduino Neu Starten
if(conn.connected()){
num_fails = 0;
}
else
{
conn.close(); //Verbindung wird geschlossen
Serial.println("neue Verbindung");
if (conn.connect(server_addr, 3306, user, password)){
delay(500);
num_fails++;
if(num_fails == 5){
delay(2000);
Serial.println("Reset");
soft_reset();
}
}
}
row_values *row = NULL;
if (rfid.isCard() && rfid.readCardSerial()) {
String serial = parseId(rfid);
Serial.print("RFID Nummer: ");
Serial.println(serial);
//EIntrag in die Mysql Datenbank
Serial.println("Recording data.");
//Eintrag der RFID in die Datenbank
char serialArray[64];
char INSERT_SQL[128];
serial.toCharArray(serialArray, serial.length()+1);
sprintf (INSERT_SQL, "INSERT INTO arduino.rfid_log (message) VALUES ('%s')", serialArray);
MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
// Execute the query
cur_mem->execute(INSERT_SQL);
//Abfrage ob die RFID in der Datenbank vorhanden ist
char QUERY_POP[128];
sprintf(QUERY_POP,"SELECT member_rfid from arduino.member WHERE member_rfid = '%s'", serialArray);
MySQL_Cursor *cur_mem_1 = new MySQL_Cursor(&conn);
cur_mem_1->execute(QUERY_POP);
// Fetch the columns (required) but we don't use them.
column_names *cols = cur_mem_1->get_columns();
// Read the row (we are only expecting one)
row = cur_mem_1->get_next_row();
if (row == NULL) {
Serial.println("Kein User gefunden!");
delay(500);
// soft_reset();
} else {
Serial.println("Ein User gefunden!");
delay(500);
//soft_reset();
}
delete cur_mem_1;
delete cur_mem;
}
rfid.halt();
}
String parseId(RFID rfid) {
String result = "";
int position = 0;
//Anzahl der Bytes die ausgelesen werden sollen
for (position = 0; position <= 3; position++) {
String pos = getid(rfid, position);
result = result + pos;
}
result.toUpperCase();
return result;
}
String getid(RFID rfid, int position) {
return String(rfid.serNum[position], HEX);
}
und hier die
MySql
CREATE TABLE `member` (
`id` int(255) NOT NULL,
`member_rfid` varchar(15) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `rfid_log` (
`id` int(255) NOT NULL,
`message` varchar(128) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Eventuell jemand von euch einen Tip was ich da machen kann.
Es wirkt sich jetzt nicht extrem auf die einsatz funktion aus... aber lieber wäre mir natürlich ihne Fehlermeldung.
LG