This content is RFID Reader (Passive) Using Wizwiki-W7500 + RFID-RC522 + Buzzer

Dependencies:   MFRC522 WIZnetInterface mbed

Fork of TCPEchoServer-WIZwiki-W7500 by WIZnet

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 // Ethernet
00003 #include "EthernetInterface.h"
00004 // MFRC522(RFID)
00005 #include "MFRC522.h"
00006 
00007 #define WEB_SERVER_PORT   80
00008 
00009 Serial pc(USBTX, USBRX);
00010 
00011 // MFRC522 reset (pick another D pin if you need D8)
00012 #define MF_RESET    D8
00013 // Buzzer
00014 #define VOLUME 0.02
00015 #define BPM 100.0
00016 // LED
00017 DigitalOut Led(LED1);
00018 
00019 // Buzzer
00020 PwmOut pwm_pin(D3);
00021  
00022 float beat_duration;
00023 // Plays a sound with the defined frequency, duration, and volume
00024 void playNote(float frequency, float duration, float volume) {
00025     pwm_pin.period(1.0/(double)frequency);
00026     pwm_pin = ((double)volume/2.0);
00027     wait(duration);
00028     pwm_pin = 0.0;
00029 }
00030 
00031 // CARD number
00032 uint8_t CARD_1 = 0x44;
00033 uint8_t CARD_2 = 0xCB;
00034 uint8_t CARD_3 = 0x2A;
00035 uint8_t CARD_4 = 0xA4;
00036 
00037 uint8_t CARD_5 = 0xA2;
00038 uint8_t CARD_6 = 0xCE;
00039 uint8_t CARD_7 = 0xEC;
00040 uint8_t CARD_8 = 0xD5;
00041 
00042 // RC522 SPI communication
00043 MFRC522    RfChip   (D11, D12, D13, D10, MF_RESET);
00044 
00045 //HTTP WEB SERVER
00046 char recv_buffer[1024] = {0,};
00047 char echoHeader[1024] = {0,};
00048 char * findrfid = 0;
00049 char change_rfid[4] = {1,2,3,4};
00050 
00051 int main (void) 
00052 {
00053     // Init. RC522 Chip
00054     RfChip.PCD_Init();
00055     pc.printf("Init end\r\n");
00056     // WEB SERVER Start
00057     printf("Wait a second...\r\n");
00058     // IP Setting..
00059     #ifdef dhcp
00060         uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x00, 0x01, 0x02}; 
00061         EthernetInterface eth;
00062         eth.init(mac_addr); //Use DHCP
00063         eth.connect();
00064     #else
00065         uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x00, 0x01, 0x02};
00066         char ip_addr[] = "192.168.1.111";
00067         char subnet_mask[] = "255.255.255.0";
00068         char gateway_addr[] = "192.168.1.1";
00069         EthernetInterface eth;
00070         eth.init(mac_addr, ip_addr, subnet_mask, gateway_addr); //Not Use DHCP
00071         
00072         while(1) { //Wait link up
00073         if(eth.link() == true)
00074             break;
00075         }
00076         printf("Check Ethernet Link\r\n");
00077         printf("Link up\r\n");
00078     #endif
00079 
00080     //eth.connect();
00081     printf("Server IP Address is %s\r\n", eth.getIPAddress());
00082     
00083     TCPSocketServer server;
00084     server.bind(WEB_SERVER_PORT);
00085     printf("bind complete\r\n");
00086     server.listen();
00087     printf("listen complete\r\n");
00088     while (true) 
00089     {    
00090         printf("Wait for new connection...\r\n");
00091         TCPSocketConnection client;
00092         server.accept(client);
00093         client.set_blocking(false, 15000); // Timeout after (1.5)s
00094         
00095         printf("Connection from: %s\r\n", client.get_address());
00096 
00097         while (true) {            
00098             int n = client.receive(recv_buffer, sizeof(recv_buffer));
00099             if (n <= 0) break; // n = n < 0
00100             
00101             // print received message to terminal
00102             recv_buffer[n] = '\0';
00103             printf("Received message from Client :'%s'\r\n",recv_buffer);
00104             if(recv_buffer[0] == 'G' && recv_buffer[1] == 'E' && recv_buffer[2] == 'T')
00105             {
00106                 printf("GET request incomming.\n\r");
00107                 
00108                 //setup http response header + data
00109                 char send_buffer[] = "<!DOCTYPE HTML>\r\n\n\r<html>\n\r\n\r\n\r<head>\n\r<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\">\n\r<title>Wizwiki-W7500 Web Server</title>\n\r<meta name=\"generator\">\n\r</head>\n\r\n\r<body bgcolor=\"white\" text=\"black\" link=\"blue\" vlink=\"purple\" alink=\"red\">\r\n<p>Wizwiki-W7500 Home-Automation RFID</p>\r\n<p>Read RFID = $$$$$$$$$$$</p>\r\n</body>\n\r</html>\r\n";
00110                 
00111                 findrfid = strstr(send_buffer, "$$$$$$$$$$$");
00112                 memset(findrfid,0,11);
00113                 sprintf(change_rfid, "%X,%X,%X,%X", RfChip.uid.uidByte[0],RfChip.uid.uidByte[1],RfChip.uid.uidByte[2],RfChip.uid.uidByte[3]);
00114                 memcpy(findrfid,change_rfid,11);                  
00115                 
00116                 sprintf(echoHeader,"HTTP/1.1 200 OK\n\rContent-Length: %d\n\rContent-Type: text/html\n\rConnection: Closen\n\rRefresh: 5\n\r\n\r\n\r",strlen(send_buffer));
00117                 client.send(echoHeader,strlen(echoHeader));
00118                 client.send(send_buffer,strlen(send_buffer));
00119                 
00120                 // RFID Area
00121                 // Look for new cards
00122                 if ( ! RfChip.PICC_IsNewCardPresent())
00123                 {
00124                   wait_ms(500);
00125                   continue;
00126                 }
00127                 // Select one of the cards
00128                 if ( ! RfChip.PICC_ReadCardSerial())
00129                 {
00130                   wait_ms(500);
00131                   continue;
00132                 }
00133                 // Print Card UID
00134                 pc.printf("Card UID: ");
00135                 for (uint8_t i = 0; i < RfChip.uid.size; i++)
00136                 {
00137                   pc.printf(" %X02", RfChip.uid.uidByte[i]);
00138                 }
00139                 pc.printf("\n\r");
00140                 // Print Card type
00141                 uint8_t piccType = RfChip.PICC_GetType(RfChip.uid.sak);
00142                 pc.printf("PICC Type: %s \n\r", RfChip.PICC_GetTypeName(piccType));
00143                 wait_ms(1000);
00144                 
00145                 // Show RFID Tag 
00146                 if((RfChip.uid.uidByte[0] == CARD_1) && (RfChip.uid.uidByte[1] == CARD_2) && (RfChip.uid.uidByte[2] == CARD_3) && (RfChip.uid.uidByte[3] == CARD_4))
00147                 {
00148                     // Buzzer Sound
00149                     pc.printf("TAG Read !\r\n");
00150                     beat_duration = 60.0 / BPM;
00151                     playNote(999.999, (0.75 * (double)beat_duration), VOLUME);
00152                 }
00153                 // Show RFID Card
00154                 else if((RfChip.uid.uidByte[0] == CARD_5) && (RfChip.uid.uidByte[1] == CARD_6) && (RfChip.uid.uidByte[2] == CARD_7) && (RfChip.uid.uidByte[3] == CARD_8))
00155                 {
00156                     pc.printf("CARD Read !\r\n");
00157                     beat_duration = 60.0 / BPM;
00158                     playNote(111.111, (0.75 * (double)beat_duration), VOLUME);
00159                 }
00160             }
00161             if (n <= 0) break;
00162         }
00163         client.close();
00164     }
00165 }