ggfd

Dependencies:   MQTT TextLCD WIZnetInterface mbed-src

Committer:
sheralikhan
Date:
Wed Feb 14 06:04:28 2018 +0000
Revision:
0:d9724729f6b6
jhygf

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sheralikhan 0:d9724729f6b6 1 //Test of cheap 13.56 Mhz RFID-RC522 module from eBay
sheralikhan 0:d9724729f6b6 2 //This code is based on Martin Olejar's MFRC522 library. Minimal changes
sheralikhan 0:d9724729f6b6 3 //Adapted for Nucleo STM32 F401RE. Should work on other Nucleos too
sheralikhan 0:d9724729f6b6 4
sheralikhan 0:d9724729f6b6 5 //Connect as follows:
sheralikhan 0:d9724729f6b6 6 //RFID pins -> Nucleo header CN5 (Arduino-compatible header)
sheralikhan 0:d9724729f6b6 7 //----------------------------------------
sheralikhan 0:d9724729f6b6 8 //RFID IRQ=pin5 -> Not used. Leave open
sheralikhan 0:d9724729f6b6 9 //RFID MISO=pin4 -> Nucleo SPI_MISO=PA_6=D12
sheralikhan 0:d9724729f6b6 10 //RFID MOSI=pin3 -> Nucleo SPI_MOSI=PA_7=D11
sheralikhan 0:d9724729f6b6 11 //RFID SCK=pin2 -> Nucleo SPI_SCK =PA_5=D13
sheralikhan 0:d9724729f6b6 12 //RFID SDA=pin1 -> Nucleo SPI_CS =PB_6=D10
sheralikhan 0:d9724729f6b6 13 //RFID RST=pin7 -> Nucleo =PA_9=D8
sheralikhan 0:d9724729f6b6 14 //3.3V and Gnd to the respective pins
sheralikhan 0:d9724729f6b6 15
sheralikhan 0:d9724729f6b6 16 #include "mbed.h"
sheralikhan 0:d9724729f6b6 17 #include "MFRC522.h"
sheralikhan 0:d9724729f6b6 18 #include "MQTTEthernet.h"
sheralikhan 0:d9724729f6b6 19 #include "MQTTClient.h"
sheralikhan 0:d9724729f6b6 20 #include "TextLCD.h"
sheralikhan 0:d9724729f6b6 21 #include <sstream>
sheralikhan 0:d9724729f6b6 22 #include <string>
sheralikhan 0:d9724729f6b6 23 #define ECHO_SERVER_PORT 7
sheralikhan 0:d9724729f6b6 24 #define SPI_MOSI D11
sheralikhan 0:d9724729f6b6 25 #define SPI_MISO D12
sheralikhan 0:d9724729f6b6 26 #define SPI_SCLK D13
sheralikhan 0:d9724729f6b6 27 #define SPI_CS D10
sheralikhan 0:d9724729f6b6 28
sheralikhan 0:d9724729f6b6 29 // WIZWiki-W7500 Pin for MFRC522 reset(pick another D pin if you need D8)
sheralikhan 0:d9724729f6b6 30 #define MF_RESET D9
sheralikhan 0:d9724729f6b6 31
sheralikhan 0:d9724729f6b6 32 TextLCD lcd(D2, D3, D4, D5, D6, D7); // rs, e, d4-d7
sheralikhan 0:d9724729f6b6 33
sheralikhan 0:d9724729f6b6 34 Serial out(USBTX,USBRX);
sheralikhan 0:d9724729f6b6 35 int arrivedcount = 0;
sheralikhan 0:d9724729f6b6 36 char RFIDTagMessage[10];
sheralikhan 0:d9724729f6b6 37
sheralikhan 0:d9724729f6b6 38 /*void messageArrived(MQTT::MessageData& md)
sheralikhan 0:d9724729f6b6 39 {
sheralikhan 0:d9724729f6b6 40 MQTT::Message &message = md.message;
sheralikhan 0:d9724729f6b6 41 printf("Message arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id);
sheralikhan 0:d9724729f6b6 42 printf("Payload %.*s\n", message.payloadlen, (char*)message.payload);
sheralikhan 0:d9724729f6b6 43 ++arrivedcount;
sheralikhan 0:d9724729f6b6 44 }*/
sheralikhan 0:d9724729f6b6 45
sheralikhan 0:d9724729f6b6 46 void baud(int baudrate)
sheralikhan 0:d9724729f6b6 47 {
sheralikhan 0:d9724729f6b6 48 Serial s(USBTX, USBRX);
sheralikhan 0:d9724729f6b6 49 s.baud(baudrate);
sheralikhan 0:d9724729f6b6 50 }
sheralikhan 0:d9724729f6b6 51
sheralikhan 0:d9724729f6b6 52
sheralikhan 0:d9724729f6b6 53 MFRC522 RfChip (SPI_MOSI, SPI_MISO, SPI_SCLK, SPI_CS, MF_RESET); // Init MFRC522 card
sheralikhan 0:d9724729f6b6 54
sheralikhan 0:d9724729f6b6 55 DigitalOut LedGreen(D0);
sheralikhan 0:d9724729f6b6 56 DigitalOut LedRed(D1);
sheralikhan 0:d9724729f6b6 57 //DigitalOut Buzzer(D4);
sheralikhan 0:d9724729f6b6 58 char* store_buf;
sheralikhan 0:d9724729f6b6 59
sheralikhan 0:d9724729f6b6 60 int main(void)
sheralikhan 0:d9724729f6b6 61 {
sheralikhan 0:d9724729f6b6 62 printf("starting...\n");
sheralikhan 0:d9724729f6b6 63
sheralikhan 0:d9724729f6b6 64 // Init. RC522 Chip
sheralikhan 0:d9724729f6b6 65 RfChip.PCD_Init();
sheralikhan 0:d9724729f6b6 66 MQTTEthernet ipstack = MQTTEthernet();
sheralikhan 0:d9724729f6b6 67
sheralikhan 0:d9724729f6b6 68
sheralikhan 0:d9724729f6b6 69 while (true) {
sheralikhan 0:d9724729f6b6 70 // lcd.locate(4,0);
sheralikhan 0:d9724729f6b6 71 // lcd.printf(" CDI Attendance\n");
sheralikhan 0:d9724729f6b6 72 // lcd.locate(4,1);
sheralikhan 0:d9724729f6b6 73 // lcd.printf(" System\n");
sheralikhan 0:d9724729f6b6 74 // Look for new cards
sheralikhan 0:d9724729f6b6 75 if ( ! RfChip.PICC_IsNewCardPresent()) {
sheralikhan 0:d9724729f6b6 76 wait_ms(50);
sheralikhan 0:d9724729f6b6 77 continue;
sheralikhan 0:d9724729f6b6 78 }
sheralikhan 0:d9724729f6b6 79
sheralikhan 0:d9724729f6b6 80 // Select one of the cards
sheralikhan 0:d9724729f6b6 81 if ( ! RfChip.PICC_ReadCardSerial()) {
sheralikhan 0:d9724729f6b6 82 wait_ms(50);
sheralikhan 0:d9724729f6b6 83 continue;
sheralikhan 0:d9724729f6b6 84 }
sheralikhan 0:d9724729f6b6 85
sheralikhan 0:d9724729f6b6 86 // lcd.cls();
sheralikhan 0:d9724729f6b6 87 // wait_ms(50);
sheralikhan 0:d9724729f6b6 88
sheralikhan 0:d9724729f6b6 89 //Size
sheralikhan 0:d9724729f6b6 90
sheralikhan 0:d9724729f6b6 91 printf("Size: %d \n",RfChip.uid.size);
sheralikhan 0:d9724729f6b6 92 printf("\n\r");
sheralikhan 0:d9724729f6b6 93 // Print Card UID
sheralikhan 0:d9724729f6b6 94 printf("Card UID: ");
sheralikhan 0:d9724729f6b6 95 for (uint8_t i = 0; i < RfChip.uid.size; i++) {
sheralikhan 0:d9724729f6b6 96 printf(" %X", RfChip.uid.uidByte[i]);
sheralikhan 0:d9724729f6b6 97 store_buf+= sprintf(store_buf,"%X",RfChip.uid.uidByte[i]);
sheralikhan 0:d9724729f6b6 98 }
sheralikhan 0:d9724729f6b6 99 printf("\n\r");
sheralikhan 0:d9724729f6b6 100 store_buf=RFIDTagMessage;
sheralikhan 0:d9724729f6b6 101 printf("Card ID: %s",store_buf);
sheralikhan 0:d9724729f6b6 102
sheralikhan 0:d9724729f6b6 103 /* if(store_buf[0]!='\0') {
sheralikhan 0:d9724729f6b6 104
sheralikhan 0:d9724729f6b6 105
sheralikhan 0:d9724729f6b6 106 MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
sheralikhan 0:d9724729f6b6 107
sheralikhan 0:d9724729f6b6 108 char* hostname = "172.16.73.4";
sheralikhan 0:d9724729f6b6 109 int port = 1883;
sheralikhan 0:d9724729f6b6 110
sheralikhan 0:d9724729f6b6 111 int rc = ipstack.connect(hostname, port);
sheralikhan 0:d9724729f6b6 112
sheralikhan 0:d9724729f6b6 113 out.printf("rc from TCP connect is %d\n", rc);
sheralikhan 0:d9724729f6b6 114
sheralikhan 0:d9724729f6b6 115 if (rc != 0)
sheralikhan 0:d9724729f6b6 116 out.printf("rc from TCP connect is %d\n", rc);
sheralikhan 0:d9724729f6b6 117
sheralikhan 0:d9724729f6b6 118 char MQTTClientID[30];
sheralikhan 0:d9724729f6b6 119
sheralikhan 0:d9724729f6b6 120 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
sheralikhan 0:d9724729f6b6 121 data.MQTTVersion = 3;
sheralikhan 0:d9724729f6b6 122 sprintf(MQTTClientID,"WIZwiki-W7500-client-%d",rand()%1000);
sheralikhan 0:d9724729f6b6 123 data.clientID.cstring = MQTTClientID;
sheralikhan 0:d9724729f6b6 124 */ /* data.username.cstring = "testuser";
sheralikhan 0:d9724729f6b6 125 data.password.cstring = "testpassword"; */
sheralikhan 0:d9724729f6b6 126
sheralikhan 0:d9724729f6b6 127 /* if ((rc = client.connect(data)) != 0)
sheralikhan 0:d9724729f6b6 128 printf("rc from MQTT connect is %d\n", rc);
sheralikhan 0:d9724729f6b6 129
sheralikhan 0:d9724729f6b6 130 MQTT::Message message;
sheralikhan 0:d9724729f6b6 131
sheralikhan 0:d9724729f6b6 132 message.qos = MQTT::QOS0;
sheralikhan 0:d9724729f6b6 133 message.retained = false;
sheralikhan 0:d9724729f6b6 134 message.dup = false;
sheralikhan 0:d9724729f6b6 135
sheralikhan 0:d9724729f6b6 136 message.payload = (void*)RFIDTagMessage;
sheralikhan 0:d9724729f6b6 137 message.payloadlen = strlen(RFIDTagMessage);
sheralikhan 0:d9724729f6b6 138
sheralikhan 0:d9724729f6b6 139 rc = client.publish("cdi/employee/attendance", message);
sheralikhan 0:d9724729f6b6 140 printf("Rc result: % d ",rc);
sheralikhan 0:d9724729f6b6 141 if(rc!=0) {
sheralikhan 0:d9724729f6b6 142 */ // lcd.printf(" FAILED..! TRY AGAIN!\n");
sheralikhan 0:d9724729f6b6 143 /* lcd.locate(4,0);
sheralikhan 0:d9724729f6b6 144 lcd.printf("FAILED.!\n");
sheralikhan 0:d9724729f6b6 145 lcd.locate(2,1);
sheralikhan 0:d9724729f6b6 146 lcd.printf("TRY AGAIN..\n");
sheralikhan 0:d9724729f6b6 147
sheralikhan 0:d9724729f6b6 148 LedRed=1;
sheralikhan 0:d9724729f6b6 149
sheralikhan 0:d9724729f6b6 150 LedGreen = 0;
sheralikhan 0:d9724729f6b6 151 wait_ms(3000);
sheralikhan 0:d9724729f6b6 152 LedRed=0;
sheralikhan 0:d9724729f6b6 153
sheralikhan 0:d9724729f6b6 154 lcd.cls();
sheralikhan 0:d9724729f6b6 155 // NVIC_SystemReset();
sheralikhan 0:d9724729f6b6 156 } else {
sheralikhan 0:d9724729f6b6 157 lcd.printf(" USER VERIFIED!\n");
sheralikhan 0:d9724729f6b6 158 LedGreen = 1;
sheralikhan 0:d9724729f6b6 159 wait_ms(2000);
sheralikhan 0:d9724729f6b6 160 LedGreen = 0;
sheralikhan 0:d9724729f6b6 161 lcd.cls();
sheralikhan 0:d9724729f6b6 162 }*/
sheralikhan 0:d9724729f6b6 163 // }
sheralikhan 0:d9724729f6b6 164
sheralikhan 0:d9724729f6b6 165
sheralikhan 0:d9724729f6b6 166
sheralikhan 0:d9724729f6b6 167 // Print Card type
sheralikhan 0:d9724729f6b6 168 uint8_t piccType = RfChip.PICC_GetType(RfChip.uid.sak);
sheralikhan 0:d9724729f6b6 169 printf("PICC Type: %s \n\r", RfChip.PICC_GetTypeName(piccType));
sheralikhan 0:d9724729f6b6 170 wait_ms(50);
sheralikhan 0:d9724729f6b6 171
sheralikhan 0:d9724729f6b6 172 }
sheralikhan 0:d9724729f6b6 173 }