Modified

Dependencies:   AES DHT JSON WIZnetInterface mbed-src

Fork of Mbed_Prototype_copy_4_INNO_day_15_6_2017 by Irayya Mathad

Committer:
irayya
Date:
Wed Sep 27 09:05:24 2017 +0000
Revision:
2:f390709f23e1
Parent:
1:903414009683
hello

Who changed what in which revision?

UserRevisionLine numberNew 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