Program to receive the data serially in the WIZ750SR and add time data to the MQtt broker.
Dependencies: MFRC522 MQTT_NTP NTPClient WIZnetInterface mbed-src
Fork of RFID_copy by
main.cpp@1:f7f81ab19c7e, 2018-07-17 (annotated)
- Committer:
- HarshaDRAGNEEL
- Date:
- Tue Jul 17 06:16:01 2018 +0000
- Revision:
- 1:f7f81ab19c7e
- Parent:
- 0:1fdb07d055b9
Added NTP protocol to send data to MQTT
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
HarshaDRAGNEEL | 1:f7f81ab19c7e | 1 | |
Rajib | 0:1fdb07d055b9 | 2 | |
Rajib | 0:1fdb07d055b9 | 3 | #include "mbed.h" |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 4 | #include "NTPClient.h" |
Rajib | 0:1fdb07d055b9 | 5 | #include "SPI.h" |
Rajib | 0:1fdb07d055b9 | 6 | #include "MQTTEthernet.h" |
Rajib | 0:1fdb07d055b9 | 7 | #include "MQTTClient.h" |
Rajib | 0:1fdb07d055b9 | 8 | |
Rajib | 0:1fdb07d055b9 | 9 | #define ECHO_SERVER_PORT 7 |
Rajib | 0:1fdb07d055b9 | 10 | |
Rajib | 0:1fdb07d055b9 | 11 | // Nucleo Pin for MFRC522 reset (pick another D pin if you need D8) |
Rajib | 0:1fdb07d055b9 | 12 | //#define MF_RESET D8 |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 13 | EthernetInterface eth; |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 14 | NTPClient ntpClient; |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 15 | |
Rajib | 0:1fdb07d055b9 | 16 | |
Rajib | 0:1fdb07d055b9 | 17 | //Serial connection to PC for output |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 18 | Serial pc(USBTX, USBRX); |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 19 | Serial a(D1,D0); |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 20 | char c[100]=""; |
Rajib | 0:1fdb07d055b9 | 21 | |
Rajib | 0:1fdb07d055b9 | 22 | int main(void) { |
Rajib | 0:1fdb07d055b9 | 23 | //pc.printf("starting...\n"); |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 24 | int cnt = 0; |
Rajib | 0:1fdb07d055b9 | 25 | |
Rajib | 0:1fdb07d055b9 | 26 | Serial pc(USBTX, USBRX); |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 27 | Serial a(D1,D0); |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 28 | // pc.baud(115200); |
Rajib | 0:1fdb07d055b9 | 29 | printf("Wait a second...\r\n"); |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 30 | char* topic = "Vending machine"; |
Rajib | 0:1fdb07d055b9 | 31 | MQTTEthernet ipstack = MQTTEthernet(); |
Rajib | 0:1fdb07d055b9 | 32 | |
Rajib | 0:1fdb07d055b9 | 33 | MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack); |
Rajib | 0:1fdb07d055b9 | 34 | |
Rajib | 0:1fdb07d055b9 | 35 | char* hostname = "172.16.73.4"; |
Rajib | 0:1fdb07d055b9 | 36 | int port = 1883; |
Rajib | 0:1fdb07d055b9 | 37 | |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 38 | |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 39 | int rc = ipstack.connect(hostname, port); |
Rajib | 0:1fdb07d055b9 | 40 | if (rc != 0) |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 41 | printf("rc from TCP connect is %d\n", rc); |
Rajib | 0:1fdb07d055b9 | 42 | |
Rajib | 0:1fdb07d055b9 | 43 | printf("Topic: %s\r\n",topic); |
Rajib | 0:1fdb07d055b9 | 44 | |
Rajib | 0:1fdb07d055b9 | 45 | MQTTPacket_connectData data = MQTTPacket_connectData_initializer; |
Rajib | 0:1fdb07d055b9 | 46 | data.MQTTVersion = 3; |
Rajib | 0:1fdb07d055b9 | 47 | data.clientID.cstring = "parents"; |
Rajib | 0:1fdb07d055b9 | 48 | |
Rajib | 0:1fdb07d055b9 | 49 | if ((rc = client.connect(data)) == 0) |
Rajib | 0:1fdb07d055b9 | 50 | printf("rc from MQTT connect is %d\n", rc); |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 51 | |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 52 | // if ((rc = client.subscribe(topic, MQTT::QOS1, messageArrived)) != 0) |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 53 | // printf("rc from MQTT subscribe is %d\n", rc); |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 54 | // |
Rajib | 0:1fdb07d055b9 | 55 | //Init. RC522 Chip |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 56 | |
Rajib | 0:1fdb07d055b9 | 57 | |
Rajib | 0:1fdb07d055b9 | 58 | while (true) { |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 59 | if (a.readable()) |
Rajib | 0:1fdb07d055b9 | 60 | { |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 61 | |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 62 | int i; |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 63 | c[i]=0; |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 64 | for(i=0;i<=15;i++){ |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 65 | char c1 =a.getc(); |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 66 | c[i] = c1; |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 67 | } |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 68 | pc.printf("The value returned is %s ",c); |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 69 | |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 70 | char domainName[3][80] = {"kr.pool.ntp.org", "time.bora.net", "time.nuri.net"};//SET TO DOMAIN NAME OF SERVER GETTING TIME FROM |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 71 | char buffer[80]; //BUFFER TO HOLD FORMATTED TIME DATA |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 72 | time_t sysTime; |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 73 | pc.printf("Server IP Address is %s\r\n", eth.getIPAddress()); |
Rajib | 0:1fdb07d055b9 | 74 | |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 75 | pc.printf("Getting time information by using NTP...\r\n"); |
Rajib | 0:1fdb07d055b9 | 76 | |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 77 | cnt = 0; |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 78 | while(1) |
Rajib | 0:1fdb07d055b9 | 79 | { |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 80 | if(ntpClient.setTime(domainName[cnt],123,0x00005000) != NTP_OK) |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 81 | { |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 82 | pc.printf("Cannot get time information by NTP\r\n"); |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 83 | cnt++; |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 84 | } |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 85 | else |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 86 | break; |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 87 | |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 88 | if(cnt > 3) |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 89 | { |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 90 | pc.printf("All NTP servers are not resposed!!\r\n"); |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 91 | return 1; |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 92 | } |
Rajib | 0:1fdb07d055b9 | 93 | } |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 94 | |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 95 | printf("Completed Get and Set Time\r\n\r\n"); |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 96 | eth.disconnect(); |
Rajib | 0:1fdb07d055b9 | 97 | |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 98 | sysTime = time(NULL)+(3600*5.30); //TIME with offset for eastern time Indian |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 99 | //FORMAT TIME FOR DISPLAY AND STORE FORMATTED RESULT IN BUFFER |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 100 | strftime(buffer,80,"%Y/%m/%d %p %I:%M:%S \r\n",localtime(&sysTime)); |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 101 | pc.printf("Date and Time\r\n%s\r\n", buffer); |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 102 | |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 103 | |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 104 | MQTT::Message message; |
Rajib | 0:1fdb07d055b9 | 105 | char buf[100]; |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 106 | sprintf(buf, "%s %s",c,buffer); |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 107 | message.qos = MQTT::QOS0; |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 108 | message.retained = false; |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 109 | message.dup = false; |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 110 | |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 111 | message.payload = (void*)buf; |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 112 | message.payloadlen = strlen(buf); |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 113 | |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 114 | rc = client.publish("RFID", message); |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 115 | pc.printf("Rc result: %c \n ",rc); |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 116 | client.yield(60); |
HarshaDRAGNEEL | 1:f7f81ab19c7e | 117 | } |
Rajib | 0:1fdb07d055b9 | 118 | } |
Rajib | 0:1fdb07d055b9 | 119 | } |