demonstrational RFID key reader with TCP/IP connectivity
Dependencies: HTTPClient MFRC522 WIZnet_Library mbed
main.cpp
- Committer:
- Vektor
- Date:
- 2018-08-08
- Revision:
- 0:220ded71d645
File content as of revision 0:220ded71d645:
#include "mbed.h" // this need older version of mbed library #include "MFRC522.h" #include "WIZnetInterface.h" #include "HTTPClient.h" #define USE_W5100 #define ST_NUCLEO //MFRC522 SPI interface #define SPI_MOSI PB_5 #define SPI_MISO PB_4 #define SPI_SCLK PB_3 #define SPI_CS PA_10 #define MF_RESET PA_2 //Ethernet #define SPI_MOSI_ETH PA_7 #define SPI_MISO_ETH PA_6 #define SPI_SCLK_ETH PA_5 #define SPI_CS_ETH PB_6 #define RESET_ETH PB_2 //LEDS #define LED_RED PA_12 #define LED_GREEN PB_12 #define LED_ORANGE PA_11 //Buzzer #define BUZZER PC_8 //Electronic LOCK #define LOCK PC_6 DigitalOut LedRed(LED_RED); DigitalOut LedGreen(LED_GREEN); DigitalOut LedOrange(LED_ORANGE); DigitalIn config_button(PC_13); DigitalOut Lock(LOCK); PwmOut buzzer(BUZZER); const char * IP_Addr = "192.168.0.2"; const char * IP_Subnet = "255.255.255.0"; const char * IP_Gateway = "192.168.0.1"; unsigned char MAC_Addr[6] = { 0x90, 0xA2, 0xDA, 0x0F, 0x5B, 0x83 }; unsigned char zone_uid; Serial pc(PA_0, PA_1); MFRC522 RfChip(SPI_MOSI, SPI_MISO, SPI_SCLK, SPI_CS, MF_RESET); WIZnetInterface ethernet(SPI_MOSI_ETH, SPI_MISO_ETH, SPI_SCLK_ETH, SPI_CS_ETH, RESET_ETH); void buzzer_stop() { buzzer.write(0); } Timeout buzzer_timeout; I2C eeprom(PB_9, PB_8); int main(void) { pc.puts("Unit start\n\r"); eeprom.start(); eeprom.write(0b10100000); //Control byte b1=0;b2=0;WRITE eeprom.write(128); // Address wait(0.5); eeprom.start(); eeprom.write(0b10100001); //Control byte b1=0;b2=0;READ int zone_uid = eeprom.read(0); eeprom.stop(); if (!config_button) { pc.printf("Old zone: %d\n\r", zone_uid); pc.puts("Send new zone uid in format ddd_\n\r"); int i = 0; char in , buffer[12]; int new_uid = 1; in = pc.getc(); while ( in != '_') { buffer[i++] = in ; if (i == 12) { break; } in = pc.getc(); } buffer[i] = 0; pc.printf("Income string: %s\n\r", buffer); new_uid = strtol(buffer, NULL, 10); if (new_uid > 0 && new_uid < 256) { eeprom.start(); eeprom.write(0b10100000); //Control byte b1=0;b2=0;WRITE eeprom.write(128); // Address eeprom.write((char) new_uid); eeprom.stop(); zone_uid = new_uid; } else { pc.puts("Error\n\r"); } } pc.printf("Current zone: %d\n\r", zone_uid); char card_uid[20]; uint8_t i; buzzer.period_us(250); //Init sequence for (i = 0; i < 4; i++) { if ((i % 2) == 0) { buzzer.write(0.5f); } else { buzzer.write(0); } switch (i) { case 0: { LedRed = 1; break; } case 1: { LedRed = 0; LedGreen = 1; break; } case 2: { LedGreen = 0; LedOrange = 1; break; } case 3: { LedOrange = 0; break; } } wait(0.25f); } buzzer.write(0); //Init ethernet int ret = ethernet.init(MAC_Addr, IP_Addr, IP_Subnet, IP_Gateway); if (ret == 0) { //pc.printf("Initialized, MAC: %s\r\n", ethernet.getMACAddress()); ret = ethernet.connect(); if (ret == 0) { pc.printf("Initialized / MAC: %s, IP: %s, MASK: %s, GW: %s\r\n", ethernet.getMACAddress(), ethernet.getIPAddress(), ethernet.getNetworkMask(), ethernet.getGateway()); } else { pc.printf("Error ethernet.connect() - ret = %d\r\n", ret); while (1) { LedRed = !LedRed; wait(0.25f); } } } else { pc.printf("Error ethernet.init() - ret = %d\r\n", ret); while (1) { LedRed = !LedRed; wait(0.25f); } } // Init. RC522 Chip RfChip.PCD_Init(); //MAIN while (true) { LedRed = 1; LedGreen = 0; LedOrange = 0; // Look for new cards if (!RfChip.PICC_IsNewCardPresent()) { wait_ms(250); continue; } // Select one of the cards if (!RfChip.PICC_ReadCardSerial()) { wait_ms(250); continue; } LedRed = 0; LedOrange = 1; /* buzzer.write(0.5f); buzzer_timeout.attach(&buzzer_stop, 0.25f); */ // Print Card UID pc.printf("Card UID: "); for (i = 0; i < sizeof(card_uid); i++) { card_uid[i] = 0; } for (i = 0; i < RfChip.uid.size; i++) { sprintf(card_uid, "%s%X02", card_uid, RfChip.uid.uidByte[i]); } pc.puts(card_uid); pc.printf(" end\n\r"); //Send to server to authorize char str[512]; char get_msg[512]; HTTPClient http; sprintf(get_msg, "http://192.168.0.1:8080/card.php?card_uid=%s&zone_uid=%d", card_uid, zone_uid); pc.printf("msg : %s\r\n", get_msg); ret = http.get(get_msg, str, sizeof(str)); if (!ret) { pc.printf("\r\nREQUEST SUCCESS - read %d characters\n\r", strlen(str)); pc.printf("Result: %s\n\r", str); } else { pc.printf("Error - ret = %d - HTTP return code = %d\n\r", ret, http.getHTTPResponseCode()); } //check server response LedOrange = 0; LedRed = 0; if (strcmp(str, "PERMITTED") == 0) { Lock = 1; LedGreen = 1; buzzer.write(0.5f); buzzer_timeout.attach( & buzzer_stop, 0.5f); wait(3); Lock = 0; } else if (strcmp(str, "DENIED") == 0) { buzzer.write(0.5f); for (i = 0; i < 6; i++) { LedRed = !LedRed; wait(0.25f); } } else { for (i = 0; i < 6; i++) { LedOrange = !LedOrange; LedRed = !LedRed; if (LedRed.read() == 1) { buzzer.write(0.5f); } else { buzzer.write(0); } wait(0.25f); } } LedRed = 0; LedGreen = 0; LedOrange = 0; buzzer.write(0); wait(0.5); } }