Arduino Wemo D1 - Esp8266 - RfID RC522

Mifare RFID kartlar ile uygulama yapmak ne zamandır aklımdaydı. Daha önce yapmış olduğum sıcaklık nem bilgilerini post  ettiğim uygulamaya , rfıd bilgilerini alarak gönderebilirmiyim diye düşünüyordum.

Küçük bir araştırmadan sonra  RFID olarak eger MİFARE kart kullancaksak  Buradaki  gibi bir kart  okuyucu amam gerektiğini farkettim. diğer RFID kartlardan farklı olarak RC522 RFID Okuyucu Kartı, NFC frekansı olan 13,56 MHz frekansında çalışan olmasıydı.

 

İlk olarak yazılımı toparlaması biraz zor oldu. RC522 SPI modda calısıyor ve Elimdeki w1demos kartının pinleri Uno dan farklı oldugunu anlamak kolay olmadı. :) 

Kart uzerindeki bilgilerde biraz yanıltıcı oldu tabi. Nihayetinde aşağıdaki kod ila uygulamayı calıstırmayı başardım  :)

WEMOS D1(esp8266) için SPI haberleşme için kullanılacak pin baglantıları 

SS-D8

SCK-D5

MOSI-D7

MISO-D6

#include <SPI.h>                          //SPI kütüphanemizi tanımlıyoruz.
#include <MFRC522.h>                      //MFRC522 kütüphanemizi tanımlıyoruz.


#include <ESP8266WiFi.h>                  //wifi libraray

const char* ssid = "VFD 900";             //wifi network name
const char* password = "qwerty1234";      //wifi pass
const char* server = "178.20.229.22";     //host IP or host domain name
WiFiClient client;                        // wifi object tanımalam



int RST_PIN = D9;                          //RC522 modülü reset pinini tanımlıyoruz.
int SS_PIN = D8;                          //RC522 modülü chip select pinini tanımlıyoruz.



MFRC522 rfid(SS_PIN, RST_PIN);            //RC522 modülü ayarlarını yapıyoruz.
byte ID[4] = {97, 76, 67, 9};             //Yetkili kart ID'sini tanımlıyoruz.

void setup() {

  Serial.begin(9600);                     //Seri haberleşmeyi başlatıyoruz.
  SPI.begin();                            //SPI iletişimini başlatıyoruz.
  rfid.PCD_Init();                        //RC522 modülünü başlatıyoruz.

  WiFi.begin(ssid, password);             //wifi modul baslatıyoruz
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED){
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi Connected");
}

void loop() {
  //Serial.println("kart bekleniyor");
  if ( ! rfid.PICC_IsNewCardPresent())    //Yeni kartın okunmasını bekliyoruz.
    return;
  Serial.println("kart bekleniyor 2");
  if ( ! rfid.PICC_ReadCardSerial())      //Kart okunmadığı zaman bekliyoruz.
    return;

    Serial.println("kart bekleniyor 3");
    ekranaYazdir();  
    rfid.PICC_HaltA();
}
void ekranaYazdir() {
  String deger ="";
  Serial.print("ID Numarasi: ");
  for (int sayac = 0; sayac < 4; sayac++) {
    deger= deger + rfid.uid.uidByte[sayac];
    Serial.print(rfid.uid.uidByte[sayac]);
    Serial.print(" ");
  }

  insertToDb(10,20,deger);
  Serial.println("");
}

void insertToDb(float sicaklik,float nem,String sensor) {
 

  String data1 = "{\"nem\": "+ String(nem) +" ,\"sicaklik\":"+ String(sicaklik) + ",\"sensor\":"+ String(sensor) +   " }";
  Serial.println(data1);
  Serial.println("connecting...");
  if (client.connect(server, 80)) {
    Serial.println("connected");
    client.println("POST /Home/Save/ HTTP/1.1");
    client.println("Host: api.husrevyildiz.com");
    client.println("Content-Type: application/json");
    client.print("Content-Length: ");
    client.println(data1.length());
    client.println();
    client.print(data1);
    Serial.println("insert conmplete");
    
    /*while (client.connected())
    {
      
      if (client.available()) {
        char c = client.read();
        Serial.print(c);
      }
    }
    Serial.println();*/
  }
  else {
    Serial.println("connection failed");
  }

  Serial.println("client Stop");
  client.stop();
}

 

 

 

 

Müellifi: Hüsrev YILDIZ
Yayın Tarihi : 5.2.2020

Hüsrev YILDIZ