Zlecę wykonanie/modyfikację skryptu dla Arduino Uno
Hardware:
- Arduino Uno
- Ethernet Shield W5100 dla Arduino (https://botland.com.pl/pl/arduino-shield-komunikacja/16559-ethernet-shield-w5100-dla-arduino-czytnik-kart-microsd-okystar-oky2101.html)
- Czytnik RFID ID-12LA 125kHz SparkFun SEN-11827 (https://botland.com.pl/pl/moduly-i-tagi-rfid/1757-czytnik-rfid-id-12la-125khz-sparkfun-sen-11827.html)
Software:
- Debian 10.5.0
- MySQL 10.3.23-MariaDB
Działanie skryptu:
- Odczyt 12-znakowego tagu RFID
- Porównanie odczytanego tagu z listą tagów w tabeli "uprawnienia" bazy MySQL
- W przypadku zgodności odczytanego tagu z tagiem, znajdującym się w tabeli "uprawienia" - podanie na jeden z pinów Arduino na X sekund stanu wysokiego, w celu wysterowania przekaźnika 5V zamka elektromagnetycznego
- Zapis odczytanego tagu bezpośrednio do tabeli "zdarzenia" w bazie MySQL wraz z aktualną datą i godziną
Połączenie pomiędzy Arduino a bazą MySQL musi odbywać się z wykorzystaniem bibliotek MySQL_Connection.h i MySQL_Cursor.h (nie poprzez skrypt PHP).
Dołączam skrypt kod.ino, który do tej pory udało mi się "wdrożyć". Odczyt RFID i zapis tagu do bazy MySQL działa, jednakże na końcu tagu doklejają się jakieś śmieci w stylu 010AC7973863⸮⸮⸮ i taki zapis idzie do bazy. W skrypcie brakuje odczytu z bazy "uprawnienia" i sterowania pinem wyjściowym.
Oferty z ceną i terminem realizacji proszę przesłać na adres: [email protected]
#include <SPI.h>
#include <Ethernet.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress server_addr(192,168,1,14); // IP of the MySQL *server* here
char user[] = "test"; // MySQL user login username
char password[] = "test"; // MySQL user login password
EthernetClient client;
MySQL_Connection conn((Client *)&client);
void setup() {
Serial.begin(9600);
if (Ethernet.begin(mac) == 0) {
Ethernet.begin(mac);
}
}
void loop() {
char tagString[12];
int index = 0;
boolean reading = false;
while (Serial.available()) {
int readByte = Serial.read(); //read next available byte
if (readByte == 2) reading = true; //begining of tag
if (readByte == 3) reading = false; //end of tag
if (reading && readByte != 2 && readByte != 10 && readByte != 13) {
//store the tag
tagString[index] = readByte;
index ++;
}
}
checkTag(tagString);
clearTag(tagString);
delay(500);
}
void checkTag(char tag[]) {
if (strlen(tag) == 0) return;
if (conn.connect(server_addr, 3306, user, password)) {
Serial.println(tag);
char INSERT_SQL[] = "INSERT INTO rfid.zdarzenia (RFID_odczytany, date, time) VALUES ('%s', curdate(), curtime())";
char query[255];
sprintf(query, INSERT_SQL, tag);
MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
cur_mem->execute(query);
delete cur_mem;
}
}
void clearTag(char one[]) {
///////////////////////////////////
//clear the char array by filling with null - ASCII 0
//Will think same tag has been read otherwise
///////////////////////////////////
for (int i = 0; i < strlen(one); i++) {
one[i] = 0;
}
}