Hallo,
ich habe auf youtube ( RFID Süßigkeitenbox (+ Twitter) folgenden Code gefunden.
/* BunteKiste Source.
Some code to handle a crate full of sweets, to open and close it via RFID tokens
by Christian Figge - info ät flazer punked net (flazer.com)
*/
#include <Arduino.h>
#include <SPI.h>
#include <MFRC522.h>
#include <Servo.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
ESP8266WiFiMulti WiFiMulti;
//RFID SPI
#define RST_PIN D0
#define SS_PIN D8
//SERVO
#define SRV_PIN D1
//REED SWITCH
#define REED_SW D2
//STATUS LEDS
#define LED_RED D4
#define LED_GRN D3
MFRC522 mfrc522(SS_PIN, RST_PIN);
boolean doorState = false;
boolean isOpen = false;
int loopWaitDoorCheck = 0;
int blameCount = 0;
Servo servo;
/**
* Initialize.
*/
void setup() {
Serial.begin(57600);
while (!Serial);
SPI.begin();
mfrc522.PCD_Init();
WiFiMulti.addAP("YOUR_AP_SSID", "YOUR_AP_PASSWORD");
servo.attach(SRV_PIN);
pinMode(REED_SW, INPUT);
pinMode(LED_RED, OUTPUT);
pinMode(LED_GRN, OUTPUT);
//Just light both LEDs for 2 secs
displayWelcome();
displayBlame();
delay(2000);
ledsOut();
handleServo(false);
doorState = getCurrentDoorState();
}
/**
* Main loop.
*/
void loop() {
delay(100);
if(waitForDoorStatusChange()) {
delay(2000);
if(!doorState) {
if(isOpen) {
handleServo(false);
isOpen = false;
ledsOut();
}
}
}
if(blameCount > 0) {
blameCounter();
}
// Look for new cards
if (!mfrc522.PICC_IsNewCardPresent())
return;
// Select one of the cards
if (!mfrc522.PICC_ReadCardSerial())
return;
MFRC522::PICC_Type piccType = mfrc522.PICC_GetType(mfrc522.uid.sak);
// Check for compatibility
if (piccType != MFRC522::PICC_TYPE_MIFARE_MINI
&& piccType != MFRC522::PICC_TYPE_MIFARE_1K
&& piccType != MFRC522::PICC_TYPE_MIFARE_4K) {
Serial.println(F("No MIFARE Classic card."));
return;
}
String uid = getID();
Serial.print("UID: "); Serial.print(uid);
Serial.println("");
if(uid != "") {
if(check(uid)) {
Serial.println("Simsalabim");
handleServo(true);
isOpen = true;
displayWelcome();
}else{
blameCount = 1;
displayBlame();
}
}
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
/**
* handles time for showing blame led
*/
void blameCounter() {
blameCount++;
if(blameCount > 10) {
ledsOut();
blameCount = 0;
}
}
/**
* fires green led
*/
void displayWelcome() {
digitalWrite(LED_GRN, 1);
}
/**
* fires red led
*/
void displayBlame() {
digitalWrite(LED_RED, 1);
}
/**
* just blackout both leds
*/
void ledsOut() {
digitalWrite(LED_RED, 0);
digitalWrite(LED_GRN, 0);
}
/**
* returns current lid's state
*/
boolean getCurrentDoorState() {
boolean status = false;
if(digitalRead(REED_SW) < 1) {
status = true;
}
return status;
}
/**
* checks if status of lid changes
**/
boolean waitForDoorStatusChange() {
if(doorState != getCurrentDoorState()) {
doorState = getCurrentDoorState();
if(!doorState) {
Serial.println("CLOSED!!!!");
}else{
Serial.println("OPENED!!!!");
}
return true;
}
return false;
}
/**
* Sends request to server
*/
boolean check(String uid) {
boolean result = false;
if(WiFiMulti.run() != WL_CONNECTED) {
Serial.println("NOT CONNECTED!");
return false;
}
HTTPClient http;
Serial.println("[HTTP] begin...");
http.begin("http:///PATH_TO_YOUR_CONTROLLSERVER/api/crate/" + uid); //HTTP
Serial.println("[HTTP] GET...");
int httpCode = http.GET();
if(httpCode > 0) {
Serial.printf("[HTTP] GET... code: %d\n", httpCode);
Serial.println("");
if(httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println(payload);
if(payload == "granted") {
result = true;
}
}
}else{
Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
return result;
}
/**
* Handles Servo to open/close the crate
*/
void handleServo(boolean direction) {
int pos;
if(direction) {
for(pos = 0; pos <= 120; pos += 1) {
servo.write(pos);
delay(1);
}
}else if(!direction) {
for(pos = 180; pos>=0; pos-=1) {
servo.write(pos);
delay(1);
}
}
}
/**
* Get Uid and transform to uppercase
*/
String getID(){
String code ="";
for (byte i = 0; i < mfrc522.uid.size; i++) {
code += String(mfrc522.uid.uidByte[i], HEX) + ":";
}
code.remove(code.length()-1);
code.toUpperCase();
return code;
}
/**
* Helper routine to dump a byte array as hex values to Serial.
*/
void dump_byte_array(byte *buffer, byte bufferSize) {
for (byte i = 0; i < bufferSize; i++) {
Serial.print(buffer[i] < 0x10 ? " 0" : " ");
Serial.print(buffer[i], HEX);
}
}
Mir fehlt aber leider die API und Datenbank in der Anleitung um es nachzumachen steht:
"Der Webserver ist ein Nginx mit PHP-extension auf einem Raspberry Pi. Als Datenbank läuft eine MariaDB. Da ich das Rad nicht (mehr) andauernd neu erfinden möchte, dient Laravel 5.3 als Framework.
Das Theme kommt auch nicht von mir, sondern ist ein freies Admin-Theme namens "Matrix". Dieses habe ich mir mittels Bootstrap und etwas Javascript (JQuery) zurecht gebogen. Nach erfolgreicher Arbeit sieht das Ganze dann so aus:"
Gibt es da welche die mir helfen können?
Liebe Grüße