Also: Mit JSON und nem PHP-Script läuft es nun genau so wie ich es mir vorgestellt habe.
Zunächst ein Blick in die MySQL-Tabelle der bekannten Nutzer mit RFID-Tags. Aktuell sind zwei Nutzer angelegt.
Der Arduino empfängt per 433 MHz (der Aufbau stand bei mir noch so rum, deshalb) das RFID-Tag.
Das Arduino-Script sendet eine Anfrage an den Server. In der URL wird die RFID übermittelt.
Das PHP-Script startet eine SQL-Abfrage und gibt den zur RFID gehörigen Nutzer per JSON zurück.
Die Verarbeitung und Ausgabe kann dann beliebig erfolgen. Zur Demonstration ist die Ausgabe im seriellen Monitor abgebildet.
Arduino Code
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>
#include <RCSwitch.h> //433 MHz
RCSwitch mySwitch = RCSwitch(); //433 MHz
// WiFi Parameters
const char* ssid = "SSID eintragen";
const char* password = "Passwort eintragen";
void setup() {
Serial.begin(115200);
// WiFi-Initialisierung##############################
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED){
delay(1000);
Serial.println("Connecting to WiFi...");}
if (WiFi.status() == WL_CONNECTED){
Serial.println("WiFi Connected");
Serial.println();}
//433 MHz Receiver PIN Belegung##########
mySwitch.enableReceive(D4); // Empfänger ist an Interrupt-Pin "0" - Das ist am UNO der Pin2
//##########################
} //void Setup end
void loop() {
// Check WiFi Status
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http; //Object of class HTTPClient
if (mySwitch.available()) // Wenn ein Code Empfangen wird...
{
Serial.println("RFID-Tag empfangen");
int value = mySwitch.getReceivedValue(); // Empfangene Daten werden unter der Variable "value" gespeichert.
if (value == 0) // Wenn die Empfangenen Daten "0" sind, wird "Unbekannter Code" angezeigt.
{
Serial.println("Unbekannter Code");
}
else // Wenn der Empfangene Code brauchbar ist, wird er hier an den Serial Monitor gesendet.
{
Serial.print("Via 433 MHz Empfangener RFID-Tag: ");
Serial.println( mySwitch.getReceivedValue() );
Serial.println();
}
int inrfid = mySwitch.getReceivedValue(); //Variable inrfid wird beschrieben
mySwitch.resetAvailable(); // Hier wird der 433 MHz-Empfänger "resettet"
String url = "http://192.168.178.46/jsonRFIDcheck.php?RFID=";
url += inrfid;
Serial.println("Serverabfrage....");
http.begin(url);
int httpCode = http.GET();
//Check the returning code
if (httpCode > 0) {
// Parsing
const size_t bufferSize = JSON_OBJECT_SIZE(2) + JSON_OBJECT_SIZE(3) + JSON_OBJECT_SIZE(5) + JSON_OBJECT_SIZE(8) + 370;
DynamicJsonBuffer jsonBuffer(bufferSize);
JsonObject& root = jsonBuffer.parseObject(http.getString());
// Parameters
int id = root["id"]; // 1
const char* name = root["NAME"];
const char* rfid = root["RFID"];
// Output to serial monitor
Serial.print("RFID: ");
Serial.println(rfid);
Serial.print("Name: ");
Serial.println(name);
Serial.println();
}
http.end(); //Close connection
}
}
// Delay
delay(1000);
}
PHP-Script
<?php
$host="192.168.178.46";
$username="arduino";
$password="codearduino";
$db_name="db_arduino";
$tbl_name="tbl_user";
//Get Values from URL
$RFID = $_GET['RFID'];
//open connection to mysql db
$connection = mysqli_connect("$host","$username","$password","$db_name") or die("Error " . mysqli_error($conne$
//fetch table rows from mysql db
//SQL Select wird nach input RFID gefiltert
$sql = "select * from $tbl_name WHERE RFID=$RFID";
$result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));
//create an array
$emparray = array();
while($row =mysqli_fetch_assoc($result))
{
// $emparray[] = $row;
$emparray = $row;
}
echo json_encode($emparray);
//close the db connection
mysqli_close($connection);
?>