ntg
Dependencies: MQTT_attendance TextLCD WIZnetInterface mbed-src
main.cpp@0:ded8b13b8681, 2018-07-17 (annotated)
- Committer:
- sheralikhan
- Date:
- Tue Jul 17 12:46:31 2018 +0000
- Revision:
- 0:ded8b13b8681
nothing
Who changed what in which revision?
| User | Revision | Line number | New 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 | } |