Importing without issues
Dependencies: AES CRC DHT JSON MQTT UDAES WIZnetInterface mbed-src
Fork of Mbed_Prototype_copy_4_INNO_day_15_6_2017 by
main.cpp@3:79e5194b7d11, 2018-06-20 (annotated)
- Committer:
- biswajit007
- Date:
- Wed Jun 20 06:33:14 2018 +0000
- Revision:
- 3:79e5194b7d11
- Parent:
- 2:f390709f23e1
gjuygfrtuytf
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
irayya | 1:903414009683 | 1 | #include "mbed.h" // this is the original copy of 13-6-2017 and today only modifying. date 15-6-2017 |
irayya | 0:c2a1e0a5d567 | 2 | #include "AES.h" |
irayya | 0:c2a1e0a5d567 | 3 | #include "MQTTEthernet.h" |
irayya | 0:c2a1e0a5d567 | 4 | #include "MQTTClient.h" |
irayya | 0:c2a1e0a5d567 | 5 | #include "string.h" |
irayya | 0:c2a1e0a5d567 | 6 | #include "udaes.h" |
irayya | 0:c2a1e0a5d567 | 7 | #include "crc.h" |
irayya | 0:c2a1e0a5d567 | 8 | #define ECHO_SERVER_PORT 7 |
irayya | 0:c2a1e0a5d567 | 9 | char msg[16]; |
irayya | 0:c2a1e0a5d567 | 10 | char o_message[16]; |
irayya | 1:903414009683 | 11 | char send_message[19]; |
irayya | 1:903414009683 | 12 | char rec_message[18]; |
irayya | 1:903414009683 | 13 | char dataReceive[21]; |
irayya | 0:c2a1e0a5d567 | 14 | char encData[16]; |
irayya | 0:c2a1e0a5d567 | 15 | char decData[16]; |
irayya | 0:c2a1e0a5d567 | 16 | char message[16]; |
irayya | 1:903414009683 | 17 | int u1,u2; |
irayya | 0:c2a1e0a5d567 | 18 | int h; |
irayya | 1:903414009683 | 19 | char crc_failed[]="FCRC"; |
irayya | 0:c2a1e0a5d567 | 20 | char crc_check[3]; |
irayya | 0:c2a1e0a5d567 | 21 | int arrivedcount = 0; |
irayya | 0:c2a1e0a5d567 | 22 | void crcCheck(int []); |
irayya | 0:c2a1e0a5d567 | 23 | Serial out(USBTX,USBRX); |
irayya | 0:c2a1e0a5d567 | 24 | Serial device(PA_13,PA_14); |
irayya | 0:c2a1e0a5d567 | 25 | void bluetooth(); |
irayya | 0:c2a1e0a5d567 | 26 | |
irayya | 0:c2a1e0a5d567 | 27 | |
irayya | 0:c2a1e0a5d567 | 28 | |
irayya | 0:c2a1e0a5d567 | 29 | |
irayya | 0:c2a1e0a5d567 | 30 | void messageArrived(MQTT::MessageData& md) |
irayya | 0:c2a1e0a5d567 | 31 | { |
irayya | 0:c2a1e0a5d567 | 32 | |
irayya | 0:c2a1e0a5d567 | 33 | MQTT::Message &message = md.message; |
irayya | 1:903414009683 | 34 | // printf("\nMessage arrived: qos %d, retained %d, dup %d, packetid %d\n", message.qos, message.retained, message.dup, message.id); //printing a message on console including qos,dup,retained,packetid |
irayya | 0:c2a1e0a5d567 | 35 | printf("%s\n", message.payloadlen, (char*)message.payload); |
irayya | 0:c2a1e0a5d567 | 36 | printf(" message arrived is : %.*s\n", message.payloadlen, message.payload); |
irayya | 0:c2a1e0a5d567 | 37 | printf("%d\n", message.payloadlen); |
irayya | 0:c2a1e0a5d567 | 38 | |
irayya | 0:c2a1e0a5d567 | 39 | memcpy(msg,message.payload, message.payloadlen); // copy the data from message payload to msg |
irayya | 1:903414009683 | 40 | printf("Original message after subscription: %s", msg); |
irayya | 0:c2a1e0a5d567 | 41 | |
irayya | 1:903414009683 | 42 | // printData(msg, 16); |
irayya | 0:c2a1e0a5d567 | 43 | |
irayya | 0:c2a1e0a5d567 | 44 | printf("the msg is %s\n:", msg); |
irayya | 0:c2a1e0a5d567 | 45 | |
irayya | 1:903414009683 | 46 | |
irayya | 0:c2a1e0a5d567 | 47 | char* encrypt = encryptData(msg); //encryptData() function for data encryption |
irayya | 0:c2a1e0a5d567 | 48 | int x3,x4; |
irayya | 1:903414009683 | 49 | memset(msg,'\0',sizeof(msg)); //clearing message |
irayya | 0:c2a1e0a5d567 | 50 | //Print the encrypted message |
irayya | 0:c2a1e0a5d567 | 51 | printf("Encrypted message: \"%s\"", encrypt); |
irayya | 1:903414009683 | 52 | // printData(encrypt, sizeof(encrypt)); // printData() function for converting encrypted message to hex format |
irayya | 0:c2a1e0a5d567 | 53 | |
irayya | 0:c2a1e0a5d567 | 54 | char* encrypt2 = encrypt; // crcCheck_transmit() for crc calculation |
irayya | 1:903414009683 | 55 | char* crc_check2=crcCheck_transmit(encrypt2); |
irayya | 1:903414009683 | 56 | out.printf("\n from transmit function"); |
irayya | 1:903414009683 | 57 | for(x3=0; x3<18; x3++) { // copy the encrypted data to another char array |
irayya | 1:903414009683 | 58 | send_message[x3]=crc_check2[x3]; |
irayya | 0:c2a1e0a5d567 | 59 | } |
irayya | 0:c2a1e0a5d567 | 60 | |
irayya | 1:903414009683 | 61 | |
irayya | 0:c2a1e0a5d567 | 62 | out.printf("\nThe final data to be sent is : %s",send_message); |
irayya | 1:903414009683 | 63 | for(int k=0; k<19; k++) { |
irayya | 1:903414009683 | 64 | wait_ms(50); //Wait for 20 milisecond |
irayya | 1:903414009683 | 65 | //Print the character |
irayya | 1:903414009683 | 66 | device.putc(send_message[k]); //Send the character via BLE |
irayya | 1:903414009683 | 67 | } |
irayya | 1:903414009683 | 68 | //device.printf(send_message); |
irayya | 0:c2a1e0a5d567 | 69 | |
irayya | 0:c2a1e0a5d567 | 70 | |
irayya | 0:c2a1e0a5d567 | 71 | ++arrivedcount; |
irayya | 0:c2a1e0a5d567 | 72 | } |
irayya | 0:c2a1e0a5d567 | 73 | void baud(int baudrate) |
irayya | 0:c2a1e0a5d567 | 74 | { |
irayya | 0:c2a1e0a5d567 | 75 | Serial s(USBTX, USBRX); |
irayya | 0:c2a1e0a5d567 | 76 | s.baud(baudrate); |
irayya | 0:c2a1e0a5d567 | 77 | } |
irayya | 0:c2a1e0a5d567 | 78 | int main (void) |
irayya | 0:c2a1e0a5d567 | 79 | { |
irayya | 0:c2a1e0a5d567 | 80 | //DHT sensor(D4, DHT11); |
irayya | 0:c2a1e0a5d567 | 81 | |
irayya | 1:903414009683 | 82 | char* topic = "light"; //topic name for MQTT |
irayya | 0:c2a1e0a5d567 | 83 | MQTTEthernet ipstack = MQTTEthernet(); |
irayya | 0:c2a1e0a5d567 | 84 | MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack); |
irayya | 1:903414009683 | 85 | char* hostname = "172.16.73.4"; // MQTT broker address |
irayya | 0:c2a1e0a5d567 | 86 | int port = 1883; //port no for broker |
irayya | 0:c2a1e0a5d567 | 87 | int rc = ipstack.connect(hostname, port); |
irayya | 0:c2a1e0a5d567 | 88 | if (rc == 0) // 0 means it ois connected (from TCP connect) |
irayya | 0:c2a1e0a5d567 | 89 | printf("rc from TCP connect is %d\n", rc); |
irayya | 0:c2a1e0a5d567 | 90 | |
irayya | 0:c2a1e0a5d567 | 91 | |
irayya | 0:c2a1e0a5d567 | 92 | MQTTPacket_connectData data = MQTTPacket_connectData_initializer; |
irayya | 0:c2a1e0a5d567 | 93 | data.MQTTVersion = 3; |
irayya | 1:903414009683 | 94 | data.clientID.cstring = "parents"; |
irayya | 0:c2a1e0a5d567 | 95 | |
irayya | 0:c2a1e0a5d567 | 96 | if ((rc = client.connect(data)) == 0) // 0 means it ois connected (from MQTT connect) |
irayya | 0:c2a1e0a5d567 | 97 | out.printf("rc from MQTT connect is %d\n", rc); |
irayya | 0:c2a1e0a5d567 | 98 | |
irayya | 1:903414009683 | 99 | if ((rc = client.subscribe(topic, MQTT::QOS0, messageArrived)) == 0) // subscribe to the topic by topic name |
irayya | 0:c2a1e0a5d567 | 100 | |
irayya | 0:c2a1e0a5d567 | 101 | out.printf("rc from MQTT subscribe is %d\n", rc); |
irayya | 0:c2a1e0a5d567 | 102 | |
irayya | 0:c2a1e0a5d567 | 103 | |
irayya | 0:c2a1e0a5d567 | 104 | MQTT::Message message; |
irayya | 0:c2a1e0a5d567 | 105 | char buf[100]; |
irayya | 0:c2a1e0a5d567 | 106 | int error = 0; |
irayya | 0:c2a1e0a5d567 | 107 | |
irayya | 0:c2a1e0a5d567 | 108 | h=0; |
irayya | 0:c2a1e0a5d567 | 109 | int p=0; |
irayya | 0:c2a1e0a5d567 | 110 | while (true) { |
irayya | 0:c2a1e0a5d567 | 111 | |
irayya | 0:c2a1e0a5d567 | 112 | if(device.readable()) { |
irayya | 0:c2a1e0a5d567 | 113 | p=0; |
irayya | 2:f390709f23e1 | 114 | bluetooth(); // colling bluetooth() function for data reading from slave device |
irayya | 0:c2a1e0a5d567 | 115 | out.printf("\nThe received message is : %s",dataReceive); // printing the message after data reading from slave device |
irayya | 0:c2a1e0a5d567 | 116 | |
irayya | 2:f390709f23e1 | 117 | if(dataReceive[0]=='F' ) { // CRC failed message sending to the slave |
irayya | 1:903414009683 | 118 | for(int q2=0; q2<19; q2++) { |
irayya | 1:903414009683 | 119 | wait_ms(50); |
irayya | 1:903414009683 | 120 | out.putc(send_message[q2]); |
irayya | 1:903414009683 | 121 | device.putc(send_message[q2]); |
irayya | 1:903414009683 | 122 | } |
irayya | 0:c2a1e0a5d567 | 123 | } |
irayya | 0:c2a1e0a5d567 | 124 | |
irayya | 1:903414009683 | 125 | else { |
irayya | 1:903414009683 | 126 | for(int q1=0; q1<18; q1++) { |
irayya | 1:903414009683 | 127 | rec_message[q1]=dataReceive[q1]; |
irayya | 1:903414009683 | 128 | p++; |
irayya | 1:903414009683 | 129 | } |
irayya | 1:903414009683 | 130 | out.printf("\nThe data to be CRC checked is : %s\n",rec_message); |
irayya | 1:903414009683 | 131 | int flg=crcCheck_receive(rec_message); //calling crcCheck_receive() function for checking crc is ok or not |
irayya | 1:903414009683 | 132 | memset(rec_message,'\0',sizeof(rec_message)); |
irayya | 0:c2a1e0a5d567 | 133 | |
irayya | 1:903414009683 | 134 | if(flg==0) { // checking flag for correct crc |
irayya | 1:903414009683 | 135 | out.printf("\n CRC ok"); |
irayya | 1:903414009683 | 136 | for(int q=0; q<16; q++) { // for data storing in another char array by removing dummi start bits |
irayya | 1:903414009683 | 137 | encData[q]=dataReceive[q]; |
irayya | 2:f390709f23e1 | 138 | |
irayya | 1:903414009683 | 139 | } |
irayya | 1:903414009683 | 140 | out.printf("\nThe data to be decrypted is : %s",encData); |
irayya | 1:903414009683 | 141 | char* decryptedData = decryptData(encData); // calling decryptData() function for decrypt the data |
irayya | 0:c2a1e0a5d567 | 142 | |
irayya | 1:903414009683 | 143 | out.printf("\nThe final decrypted Data is: %s",decryptedData); // printing the decrypted data |
irayya | 2:f390709f23e1 | 144 | if(decryptedData[0]=='L' ) { |
irayya | 1:903414009683 | 145 | message.qos = MQTT::QOS0; |
irayya | 1:903414009683 | 146 | message.retained = false; //A retained message is a normal MQTT message with the retained flag set to true. The broker will store the last retained message and the corresponding QoS for that topic. |
irayya | 2:f390709f23e1 | 147 | // if it is false The broker will not store the last retained message. |
irayya | 1:903414009683 | 148 | message.dup = false; // the broker will not create duplicate message |
irayya | 1:903414009683 | 149 | message.payload = (void*)decryptedData; // decrypting the message |
irayya | 0:c2a1e0a5d567 | 150 | |
irayya | 1:903414009683 | 151 | message.payloadlen = strlen(decryptedData); // finding the length of the message |
irayya | 1:903414009683 | 152 | |
irayya | 1:903414009683 | 153 | // rc = client.publish("/1/ON", message); |
irayya | 1:903414009683 | 154 | rc = client.publish("/1/ON", message); |
irayya | 2:f390709f23e1 | 155 | |
irayya | 2:f390709f23e1 | 156 | |
irayya | 2:f390709f23e1 | 157 | } |
irayya | 2:f390709f23e1 | 158 | |
irayya | 2:f390709f23e1 | 159 | else if(decryptedData[0]=='0' || decryptedData[0]=='1' || decryptedData[0]=='2' || decryptedData[0]=='3' || decryptedData[0]=='4' || decryptedData[0]=='5' || decryptedData[0]=='6' || decryptedData[0]=='7' || decryptedData[0]=='8' || decryptedData[0]=='9' ) { |
irayya | 2:f390709f23e1 | 160 | message.qos = MQTT::QOS0; |
irayya | 2:f390709f23e1 | 161 | message.retained = false; //A retained message is a normal MQTT message with the retained flag set to true. The broker will store the last retained message and the corresponding QoS for that topic. |
irayya | 2:f390709f23e1 | 162 | // if it is false The broker will not store the last retained message. |
irayya | 2:f390709f23e1 | 163 | message.dup = false; // the broker will not create duplicate message |
irayya | 2:f390709f23e1 | 164 | message.payload = (void*)decryptedData; // decrypting the message |
irayya | 2:f390709f23e1 | 165 | |
irayya | 2:f390709f23e1 | 166 | message.payloadlen = strlen(decryptedData); // finding the length of the message |
irayya | 2:f390709f23e1 | 167 | |
irayya | 2:f390709f23e1 | 168 | // rc = client.publish("/1/ON", message); |
irayya | 2:f390709f23e1 | 169 | rc = client.publish("/1/Temp", message); |
irayya | 2:f390709f23e1 | 170 | |
irayya | 0:c2a1e0a5d567 | 171 | |
irayya | 1:903414009683 | 172 | } else { |
irayya | 1:903414009683 | 173 | out.printf("\n Data is not correct"); |
irayya | 1:903414009683 | 174 | memset(dataReceive,'\0',sizeof(dataReceive)); |
irayya | 1:903414009683 | 175 | wait(5); |
irayya | 1:903414009683 | 176 | for(int k3=0; k3<5; k3++) { |
irayya | 2:f390709f23e1 | 177 | wait_ms(50); //Wait for 50 milisecond |
irayya | 2:f390709f23e1 | 178 | device.putc(crc_failed[k3]); |
irayya | 2:f390709f23e1 | 179 | out.putc(crc_failed[k3]); //Send the character via BLE |
irayya | 2:f390709f23e1 | 180 | } |
irayya | 1:903414009683 | 181 | } |
irayya | 1:903414009683 | 182 | } else { |
irayya | 1:903414009683 | 183 | memset(dataReceive,'\0',sizeof(dataReceive)); |
irayya | 1:903414009683 | 184 | memset(rec_message,'\0',sizeof(rec_message)); |
irayya | 1:903414009683 | 185 | out.printf("\n CRC failed"); |
irayya | 2:f390709f23e1 | 186 | |
irayya | 1:903414009683 | 187 | wait(5); |
irayya | 2:f390709f23e1 | 188 | |
irayya | 1:903414009683 | 189 | for(int k1=0; k1<5; k1++) { |
irayya | 2:f390709f23e1 | 190 | wait_ms(50); //Wait for 50 milisecond |
irayya | 2:f390709f23e1 | 191 | device.putc(crc_failed[k1]); |
irayya | 2:f390709f23e1 | 192 | out.putc(crc_failed[k1]); //Send the character via BLE |
irayya | 1:903414009683 | 193 | } |
irayya | 0:c2a1e0a5d567 | 194 | |
irayya | 1:903414009683 | 195 | } |
irayya | 1:903414009683 | 196 | } |
irayya | 0:c2a1e0a5d567 | 197 | memset(dataReceive,'\0',sizeof(dataReceive)); // clearing the dataReceive buffer |
irayya | 0:c2a1e0a5d567 | 198 | memset(msg,'\0',sizeof(msg)); // clearing the msg buffer |
irayya | 1:903414009683 | 199 | memset(encData,'\0',sizeof(encData)); |
irayya | 0:c2a1e0a5d567 | 200 | } |
irayya | 0:c2a1e0a5d567 | 201 | client.yield(20); |
irayya | 0:c2a1e0a5d567 | 202 | } |
irayya | 0:c2a1e0a5d567 | 203 | } |
irayya | 0:c2a1e0a5d567 | 204 | void bluetooth() //bluetooth function for reading data from slave device |
irayya | 0:c2a1e0a5d567 | 205 | { |
irayya | 0:c2a1e0a5d567 | 206 | int z=0; |
irayya | 0:c2a1e0a5d567 | 207 | while(1) { |
irayya | 0:c2a1e0a5d567 | 208 | if(device.readable()) { |
irayya | 0:c2a1e0a5d567 | 209 | char c=device.getc(); |
irayya | 0:c2a1e0a5d567 | 210 | if(c=='\0') { // if char is null then return to main function where it was called |
irayya | 0:c2a1e0a5d567 | 211 | z=0; |
irayya | 0:c2a1e0a5d567 | 212 | return; |
irayya | 0:c2a1e0a5d567 | 213 | } else { |
irayya | 2:f390709f23e1 | 214 | dataReceive[z]=c; // storing the characters which are received from slave |
irayya | 0:c2a1e0a5d567 | 215 | printf("%c",c); |
irayya | 0:c2a1e0a5d567 | 216 | z++; |
irayya | 0:c2a1e0a5d567 | 217 | } |
irayya | 0:c2a1e0a5d567 | 218 | } |
irayya | 0:c2a1e0a5d567 | 219 | } |
irayya | 0:c2a1e0a5d567 | 220 | } |
irayya | 0:c2a1e0a5d567 | 221 |