Program to serially receive in WIZ750SR to publish data in MQTT broker
Dependencies: MQTT WIZnetInterface mbed-src
Fork of RFID_copy by
Diff: main.cpp
- Revision:
- 0:1fdb07d055b9
- Child:
- 1:7638b96d77af
diff -r 000000000000 -r 1fdb07d055b9 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Jun 07 04:14:28 2018 +0000 @@ -0,0 +1,138 @@ +//Test of cheap 13.56 Mhz RFID-RC522 module from eBay +//This code is based on Martin Olejar's MFRC522 library. Minimal changes +//Adapted for Nucleo STM32 F401RE. Should work on other Nucleos too + +//Connect as follows: +//RFID pins -> Nucleo header CN5 (Arduino-compatible header) +//---------------------------------------- +//RFID IRQ=pin5 -> Not used. Leave open +//RFID MISO=pin4 -> Nucleo SPI_MISO=PA_6=D12 +//RFID MOSI=pin3 -> Nucleo SPI_MOSI=PA_7=D11 +//RFID SCK=pin2 -> Nucleo SPI_SCK =PA_5=D13 +//RFID SDA=pin1 -> Nucleo SPI_CS =PB_6=D10 +//RFID RST=pin7 -> Nucleo =PA_9=D8 +//3.3V and Gnd to the respective pins + +#include "mbed.h" +#include "MFRC522.h" +#include "SPI.h" +#include "MQTTEthernet.h" +#include "MQTTClient.h" + +#define ECHO_SERVER_PORT 7 + +// Nucleo Pin for MFRC522 reset (pick another D pin if you need D8) +//#define MF_RESET D8 + +#define SPI_MOSI D11 +#define SPI_MISO D12 +#define SPI_SCK D13 +#define SPI_CS D10 +#define MF_RESET D9 +DigitalOut l1(D4); +DigitalOut l2(D5); +DigitalOut LedGreen(LED1); + +//Serial connection to PC for output +//Serial pc(USBTX, USBRX); + +MFRC522 RfChip (SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, MF_RESET); + +int main(void) { + //pc.printf("starting...\n"); + + Serial pc(USBTX, USBRX); + pc.baud(115200); + printf("Wait a second...\r\n"); + char* topic = "openhab/parents/command"; + MQTTEthernet ipstack = MQTTEthernet(); + + MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack); + + char* hostname = "172.16.73.4"; + int port = 1883; + + int rc = ipstack.connect(hostname, port); + if (rc != 0) + printf("rc from TCP connect is %d\n", rc); + + printf("Topic: %s\r\n",topic); + + MQTTPacket_connectData data = MQTTPacket_connectData_initializer; + data.MQTTVersion = 3; + data.clientID.cstring = "parents"; + + if ((rc = client.connect(data)) == 0) + printf("rc from MQTT connect is %d\n", rc); + + //Init. RC522 Chip + RfChip.PCD_Init(); + + while (true) { + //LedGreen = 1; + pc.printf("enterd loop...\n"); + // Look for new cards + if ( ! RfChip.PICC_IsNewCardPresent()) + { + wait_ms(500); + continue; + } + + // Select one of the cards + if ( ! RfChip.PICC_ReadCardSerial()) + { + wait_ms(500); + continue; + } + + //LedGreen = 0; + char data[20]=""; + char data1[20]=""; + + // Print Card UID + pc.printf("Card UID: "); + printf("Size of UID: %d \n",RfChip.uid.size); + for (uint8_t i = 0; i < RfChip.uid.size; i++) + { + char temp[5]; + pc.printf(" %X02", RfChip.uid.uidByte[i]); + sprintf(temp,"%X02", RfChip.uid.uidByte[i]); + strcat(data,temp); + } + + /* + pc.printf("\n\r"); + printf("%s\n\r",data); + */ + + // Print Card type + uint8_t piccType = RfChip.PICC_GetType(RfChip.uid.sak); + pc.printf(" \nPICC Type: %s \n\r", RfChip.PICC_GetTypeName(piccType)); + wait_ms(1000); + + if(strcmp(data,"5C02820285024502")==0) + { + strcat(data1,"fruits"); + } + if(strcmp(data,"B3026802A002202")==0) + { + strcat(data1,"vegatables"); + } + if(strcmp(data,"F2029C02AC021F02")==0) + { + strcat(data1,"milk"); + + MQTT::Message message; + char buf[100]; + sprintf(buf, "%s", data1); + message.qos = MQTT::QOS0; + message.retained = false; + message.dup = false; + message.payload = (void*)data1; + message.payloadlen = strlen(data1); + rc = client.publish("grocery", message); + client.yield(60000); + memset(data1, '\0',sizeof(data1)); + } +} +} \ No newline at end of file