ntg

Dependencies:   MQTT_attendance TextLCD WIZnetInterface mbed-src

Committer:
sheralikhan
Date:
Tue Jul 17 12:46:31 2018 +0000
Revision:
0:ded8b13b8681
nothing

Who changed what in which revision?

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