Я воссоздаю программу, которую я нашел на этот сайт. Я редактировал некоторые части кода на PHP и Arduino. Но код Arduino для выполнения HTTP-запросов не работает, потому что таблица в базе данных не имеет вновь добавленной строки. Я знаю, что код PHP работает хорошо, потому что, когда я делаю это вручную, как это
localhost/thesisbla/trials_rfid/rfid_read2.php?allow=1&id=67656
новая строка будет добавлена в мою базу данных. Я использую xampp в качестве своего веб-сервера.
Код PHP:
<?php
class rfid {
public $link='';
function __construct($allow, $id) {
$this->connect();
$this->storeInDB($allow, $id);
}
function connect() {
$mysqli = mysqli_connect('localhost','admin2','qazwsx','deligenc_rfid') or die($mysqli->error);
$this->link = mysqli_connect('localhost','admin2','qazwsx','deligenc_rfid') or die('Cannot connect to the DB');
mysqli_select_db($mysqli, 'deligenc_rfid') or die('Cannot select the DB');
}
function storeInDB($allow, $id) {
$mysqli = mysqli_connect('localhost','admin2','qazwsx','deligenc_rfid') or die($mysqli->error);
$query = "insert into rfid set rfid='".$id."', allow='".$allow."'";
$result = mysqli_query($mysqli, $query) or die('Errant query: '.$query);
if($result) {
echo "Added successfully";
}
}
}
if($_GET['allow'] != '' and $_GET['id'] != '') {
$rfid=new rfid($_GET['allow'],$_GET['id']);
}
?>
Код Arduino:
#include<SPI.h>
#include<MFRC522.h>
#include<SoftwareSerial.h>
#include <Ethernet.h>
#include <HttpClient.h>
#define SS_PIN 4 //FOR RFID SS PIN BECASUSE WE ARE USING BOTH ETHERNET SHIELD AND RS-522
#define RST_PIN 5
#define No_Of_Card 3
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char server[] = "localhost"; //YOUR SERVER
IPAddress ip(192, 168, 137, 2);
EthernetClient client;
SoftwareSerial mySerial(8,9);
MFRC522 rfid(SS_PIN,RST_PIN);
MFRC522::MIFARE_Key key;
byte id[No_Of_Card][4]={
{44,153,22,219}, //RFID NO-1
{112,224,72,84}, //RFID NO-2
{151,94,80,84} //RFID NO-3
};
byte id_temp[3][3];
byte i;
int j=0;
void setup() {
Serial.begin(9600);
mySerial.begin(9600);
SPI.begin();
rfid.PCD_Init();
for(byte i=0;i<6;i++) {
key.keyByte[i]=0xFF;
}
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
Ethernet.begin(mac, ip);
}
delay(1000);
Serial.println("connecting...");
}
void loop() {
int m=0;
if(!rfid.PICC_IsNewCardPresent())
return;
if(!rfid.PICC_ReadCardSerial())
return;
for(i=0;i<4;i++) {
id_temp[0][i]=rfid.uid.uidByte[i];
delay(50);
}
for(i=0;i<No_Of_Card;i++) {
if(id[i][0]==id_temp[0][0]) {
if(id[i][1]==id_temp[0][1]) {
if(id[i][2]==id_temp[0][2]) {
if(id[i][3]==id_temp[0][3]) {
Serial.print("your card no :");
for(int s=0;s<4;s++) {
Serial.print(rfid.uid.uidByte[s]);
Serial.print(" ");
}
Serial.println("\nVALID");
Sending_To_DB();
j=0;
rfid.PICC_HaltA();
rfid.PCD_StopCrypto1();
return;
}
}
}
} else {
j++;
if(j==No_Of_Card) {
Serial.println("inVALID");
Sending_To_DB();
j=0;
}
}
}
// Halt PICC
rfid.PICC_HaltA();
// Stop encryption on PCD
rfid.PCD_StopCrypto1();
}
void Sending_To_DB() {
//CONNECTING WITH MYSQL
if (client.connect(server, 80)) {
Serial.println("connected");
// Make a HTTP request:
client.print("GET /rfid_read2.php?allow="); //YOUR URL
if(j!=No_Of_Card) {
client.print('1');
} else {
client.print('0');
}
client.print("&id=");
for(int s=0;s<4;s++) {
client.print(rfid.uid.uidByte[s]);
}
client.print(" "); // SPACE BEFORE HTTP/1.1
client.print("HTTP/1.1");
client.println();
client.println("Host: localhost");
client.print("User-Agent: arduino-ethernet");
client.println("Connection: close");
client.println();
printDec(rfid.uid.uidByte,rfid.uid.size);
Serial.println();
Serial.println("added to database");
} else {
// if you didn't get a connection to the server:
Serial.println("connection failed");
}
client.stop();
}
void printDec(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], DEC);
}
}
Задача ещё не решена.
Других решений пока нет …