rfid

Dependencies:   MFRC522 MQTT WIZnetInterface mbed-src

main.cpp

Committer:
Rajib
Date:
2018-06-07
Revision:
0:1fdb07d055b9

File content as of revision 0:1fdb07d055b9:

//Test of cheap 13.56 Mhz RFID-RC522 module from eBay
//This code is based on Martin Olejar's MFRC522 library. Minimal changes
//Adapted for Nucleo STM32 F401RE. Should work on other Nucleos too
 
//Connect as follows:
//RFID pins        ->  Nucleo header CN5 (Arduino-compatible header)
//----------------------------------------
//RFID IRQ=pin5    ->   Not used. Leave open
//RFID MISO=pin4   ->   Nucleo SPI_MISO=PA_6=D12
//RFID MOSI=pin3   ->   Nucleo SPI_MOSI=PA_7=D11
//RFID SCK=pin2    ->   Nucleo SPI_SCK =PA_5=D13
//RFID SDA=pin1    ->   Nucleo SPI_CS  =PB_6=D10
//RFID RST=pin7    ->   Nucleo         =PA_9=D8
//3.3V and Gnd to the respective pins                              
                              
#include "mbed.h"
#include "MFRC522.h"
#include "SPI.h"
#include "MQTTEthernet.h"
#include "MQTTClient.h"

#define ECHO_SERVER_PORT   7
 
// Nucleo Pin for MFRC522 reset (pick another D pin if you need D8)
//#define MF_RESET    D8
 
#define SPI_MOSI D11
#define SPI_MISO D12
#define SPI_SCK D13
#define SPI_CS D10
#define MF_RESET D9
DigitalOut l1(D4);
DigitalOut l2(D5);
DigitalOut LedGreen(LED1);
 
//Serial connection to PC for output
//Serial pc(USBTX, USBRX);
 
MFRC522    RfChip   (SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, MF_RESET);
 
int main(void) {
    //pc.printf("starting...\n");
    
    Serial pc(USBTX, USBRX);
    pc.baud(115200);
    printf("Wait a second...\r\n");
    char* topic = "openhab/parents/command";
    MQTTEthernet ipstack = MQTTEthernet();
    
    MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
    
    char* hostname = "172.16.73.4";
    int port = 1883;
    
    int rc = ipstack.connect(hostname, port);
    if (rc != 0)
        printf("rc from TCP connect is %d\n", rc);
        
    printf("Topic: %s\r\n",topic);
    
    MQTTPacket_connectData data = MQTTPacket_connectData_initializer;       
    data.MQTTVersion = 3;
    data.clientID.cstring = "parents";

    if ((rc = client.connect(data)) == 0)
        printf("rc from MQTT connect is %d\n", rc);
 
  //Init. RC522 Chip
  RfChip.PCD_Init();
 
  while (true) {
    //LedGreen = 1;
    pc.printf("enterd loop...\n");
    // Look for new cards
    if ( ! RfChip.PICC_IsNewCardPresent())
    {
      wait_ms(500);
      continue;
    }
 
    // Select one of the cards
    if ( ! RfChip.PICC_ReadCardSerial())
    {
      wait_ms(500);
      continue;
    }
 
    //LedGreen = 0;
    char data[20]="";
    char data1[20]="";
    
    // Print Card UID
    pc.printf("Card UID: ");
    printf("Size of UID: %d \n",RfChip.uid.size);
    for (uint8_t i = 0; i < RfChip.uid.size; i++)
    {
      char temp[5];
      pc.printf(" %X02", RfChip.uid.uidByte[i]);
      sprintf(temp,"%X02", RfChip.uid.uidByte[i]);
      strcat(data,temp);
    }
    
    /*    
    pc.printf("\n\r");
    printf("%s\n\r",data);
    */
 
    // Print Card type
    uint8_t piccType = RfChip.PICC_GetType(RfChip.uid.sak);
    pc.printf(" \nPICC Type: %s \n\r", RfChip.PICC_GetTypeName(piccType));
    wait_ms(1000);
    
    if(strcmp(data,"5C02820285024502")==0)
    {   
        strcat(data1,"fruits");
    }
    if(strcmp(data,"B3026802A002202")==0)
    {
        strcat(data1,"vegatables");
    }
    if(strcmp(data,"F2029C02AC021F02")==0)
    {
        strcat(data1,"milk");
    
    MQTT::Message message;
    char buf[100];
    sprintf(buf, "%s", data1);
    message.qos = MQTT::QOS0;
    message.retained = false;
    message.dup = false;
    message.payload = (void*)data1;
    message.payloadlen = strlen(data1);
    rc = client.publish("grocery", message); 
    client.yield(60000);
    memset(data1, '\0',sizeof(data1)); 
  }
}
}