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:
Mon May 29 04:11:21 2017 +0000
Revision:
0:c2a1e0a5d567
Child:
1:903414009683
mbed Prototype 1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
irayya 0:c2a1e0a5d567 1 #include "mbed.h"
irayya 0:c2a1e0a5d567 2 #include "DHT.h"
irayya 0:c2a1e0a5d567 3 #include "AES.h"
irayya 0:c2a1e0a5d567 4 #include "MQTTEthernet.h"
irayya 0:c2a1e0a5d567 5 #include "MQTTClient.h"
irayya 0:c2a1e0a5d567 6 #include "string.h"
irayya 0:c2a1e0a5d567 7 #include "udaes.h"
irayya 0:c2a1e0a5d567 8 #include "crc.h"
irayya 0:c2a1e0a5d567 9 #define ECHO_SERVER_PORT 7
irayya 0:c2a1e0a5d567 10 char msg[16];
irayya 0:c2a1e0a5d567 11 //char message1[16];
irayya 0:c2a1e0a5d567 12 //char message2[16];
irayya 0:c2a1e0a5d567 13 //char sensormsg[10];
irayya 0:c2a1e0a5d567 14 //char ackmsg[17];
irayya 0:c2a1e0a5d567 15 //char newmsg[10];
irayya 0:c2a1e0a5d567 16 char o_message[16];
irayya 0:c2a1e0a5d567 17 char send_message[18];
irayya 0:c2a1e0a5d567 18
irayya 0:c2a1e0a5d567 19 char dataReceive[19];
irayya 0:c2a1e0a5d567 20 char encData[16];
irayya 0:c2a1e0a5d567 21 char decData[16];
irayya 0:c2a1e0a5d567 22 char message[16];
irayya 0:c2a1e0a5d567 23 int h;
irayya 0:c2a1e0a5d567 24
irayya 0:c2a1e0a5d567 25 char crc_check[3];
irayya 0:c2a1e0a5d567 26
irayya 0:c2a1e0a5d567 27 int arrivedcount = 0;
irayya 0:c2a1e0a5d567 28
irayya 0:c2a1e0a5d567 29 void crcCheck(int []);
irayya 0:c2a1e0a5d567 30 Serial out(USBTX,USBRX);
irayya 0:c2a1e0a5d567 31 Serial device(PA_13,PA_14);
irayya 0:c2a1e0a5d567 32 void bluetooth();
irayya 0:c2a1e0a5d567 33
irayya 0:c2a1e0a5d567 34
irayya 0:c2a1e0a5d567 35
irayya 0:c2a1e0a5d567 36
irayya 0:c2a1e0a5d567 37 void messageArrived(MQTT::MessageData& md)
irayya 0:c2a1e0a5d567 38 {
irayya 0:c2a1e0a5d567 39
irayya 0:c2a1e0a5d567 40 MQTT::Message &message = md.message;
irayya 0:c2a1e0a5d567 41 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 42 printf("%s\n", message.payloadlen, (char*)message.payload);
irayya 0:c2a1e0a5d567 43 printf(" message arrived is : %.*s\n", message.payloadlen, message.payload);
irayya 0:c2a1e0a5d567 44 printf("%d\n", message.payloadlen);
irayya 0:c2a1e0a5d567 45
irayya 0:c2a1e0a5d567 46 memcpy(msg,message.payload, message.payloadlen); // copy the data from message payload to msg
irayya 0:c2a1e0a5d567 47 printf("Original message: %s", msg);
irayya 0:c2a1e0a5d567 48
irayya 0:c2a1e0a5d567 49 printData(msg, 16);
irayya 0:c2a1e0a5d567 50
irayya 0:c2a1e0a5d567 51 printf("the msg is %s\n:", msg);
irayya 0:c2a1e0a5d567 52
irayya 0:c2a1e0a5d567 53 char* encrypt = encryptData(msg); //encryptData() function for data encryption
irayya 0:c2a1e0a5d567 54 int x3,x4;
irayya 0:c2a1e0a5d567 55 //Print the encrypted message
irayya 0:c2a1e0a5d567 56 printf("Encrypted message: \"%s\"", encrypt);
irayya 0:c2a1e0a5d567 57 printData(encrypt, sizeof(encrypt)); // printData() function for converting encrypted message to hex format
irayya 0:c2a1e0a5d567 58
irayya 0:c2a1e0a5d567 59 char* encrypt2 = encrypt; // crcCheck_transmit() for crc calculation
irayya 0:c2a1e0a5d567 60 char* crc_check2=crcCheck_transmit(encrypt2);
irayya 0:c2a1e0a5d567 61 for(x3=0; x3<16; x3++) { // copy the encrypted data to another char array
irayya 0:c2a1e0a5d567 62 send_message[x3]=encrypt[x3];
irayya 0:c2a1e0a5d567 63 }
irayya 0:c2a1e0a5d567 64 for(x3=16,x4=0; x3<18; x3++,x4++) { //
irayya 0:c2a1e0a5d567 65 send_message[x3]=crc_check2[x4];
irayya 0:c2a1e0a5d567 66 }
irayya 0:c2a1e0a5d567 67
irayya 0:c2a1e0a5d567 68 out.printf("\nThe final data to be sent is : %s",send_message);
irayya 0:c2a1e0a5d567 69 device.printf(send_message);
irayya 0:c2a1e0a5d567 70
irayya 0:c2a1e0a5d567 71
irayya 0:c2a1e0a5d567 72 ++arrivedcount;
irayya 0:c2a1e0a5d567 73 }
irayya 0:c2a1e0a5d567 74 void baud(int baudrate)
irayya 0:c2a1e0a5d567 75 {
irayya 0:c2a1e0a5d567 76 Serial s(USBTX, USBRX);
irayya 0:c2a1e0a5d567 77 s.baud(baudrate);
irayya 0:c2a1e0a5d567 78 }
irayya 0:c2a1e0a5d567 79 int main (void)
irayya 0:c2a1e0a5d567 80 {
irayya 0:c2a1e0a5d567 81 //DHT sensor(D4, DHT11);
irayya 0:c2a1e0a5d567 82
irayya 0:c2a1e0a5d567 83 char* topic = "light1"; //topic name for MQTT
irayya 0:c2a1e0a5d567 84 MQTTEthernet ipstack = MQTTEthernet();
irayya 0:c2a1e0a5d567 85 MQTT::Client<MQTTEthernet, Countdown> client = MQTT::Client<MQTTEthernet, Countdown>(ipstack);
irayya 0:c2a1e0a5d567 86 char* hostname = "172.16.73.22"; // MQTT broker address
irayya 0:c2a1e0a5d567 87 int port = 1883; //port no for broker
irayya 0:c2a1e0a5d567 88 int rc = ipstack.connect(hostname, port);
irayya 0:c2a1e0a5d567 89 if (rc == 0) // 0 means it ois connected (from TCP connect)
irayya 0:c2a1e0a5d567 90 printf("rc from TCP connect is %d\n", rc);
irayya 0:c2a1e0a5d567 91
irayya 0:c2a1e0a5d567 92
irayya 0:c2a1e0a5d567 93 MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
irayya 0:c2a1e0a5d567 94 data.MQTTVersion = 3;
irayya 0:c2a1e0a5d567 95 //data.clientID.cstring = "parents";
irayya 0:c2a1e0a5d567 96
irayya 0:c2a1e0a5d567 97 if ((rc = client.connect(data)) == 0) // 0 means it ois connected (from MQTT connect)
irayya 0:c2a1e0a5d567 98 out.printf("rc from MQTT connect is %d\n", rc);
irayya 0:c2a1e0a5d567 99
irayya 0:c2a1e0a5d567 100 if ((rc = client.subscribe(topic, MQTT::QOS1, messageArrived)) == 0) // subscribe to the topic by topic name
irayya 0:c2a1e0a5d567 101
irayya 0:c2a1e0a5d567 102 out.printf("rc from MQTT subscribe is %d\n", rc);
irayya 0:c2a1e0a5d567 103
irayya 0:c2a1e0a5d567 104
irayya 0:c2a1e0a5d567 105 MQTT::Message message;
irayya 0:c2a1e0a5d567 106 char buf[100];
irayya 0:c2a1e0a5d567 107 int error = 0;
irayya 0:c2a1e0a5d567 108
irayya 0:c2a1e0a5d567 109 h=0;
irayya 0:c2a1e0a5d567 110 int p=0;
irayya 0:c2a1e0a5d567 111 while (true) {
irayya 0:c2a1e0a5d567 112
irayya 0:c2a1e0a5d567 113 if(device.readable()) {
irayya 0:c2a1e0a5d567 114 p=0;
irayya 0:c2a1e0a5d567 115 bluetooth(); // colling bluetooth() function for data reading from slave device
irayya 0:c2a1e0a5d567 116 out.printf("\nThe received message is : %s",dataReceive); // printing the message after data reading from slave device
irayya 0:c2a1e0a5d567 117
irayya 0:c2a1e0a5d567 118
irayya 0:c2a1e0a5d567 119
irayya 0:c2a1e0a5d567 120
irayya 0:c2a1e0a5d567 121 int flg=crcCheck_receive(dataReceive); //calling crcCheck_receive() function for checking crc is ok or not
irayya 0:c2a1e0a5d567 122 if(flg==0) { // checking for correct crc
irayya 0:c2a1e0a5d567 123 out.printf("\n CRC ok");
irayya 0:c2a1e0a5d567 124 } else
irayya 0:c2a1e0a5d567 125 out.printf("\n CRC failed");
irayya 0:c2a1e0a5d567 126 // else for crc failed
irayya 0:c2a1e0a5d567 127 for(int q=2; q<=17; q++) { // for data storing in another char array by removing dummi start bits
irayya 0:c2a1e0a5d567 128 encData[p]=dataReceive[q];
irayya 0:c2a1e0a5d567 129 // out.printf("%c\n",dataReceive[q]);
irayya 0:c2a1e0a5d567 130 p++;
irayya 0:c2a1e0a5d567 131 }
irayya 0:c2a1e0a5d567 132
irayya 0:c2a1e0a5d567 133
irayya 0:c2a1e0a5d567 134
irayya 0:c2a1e0a5d567 135 char* decryptedData = decryptData(encData); // calling decryptData() function for decrypt the data
irayya 0:c2a1e0a5d567 136
irayya 0:c2a1e0a5d567 137 out.printf("\nThe final decrypted Data is: %s",decryptedData); // printing the decrypted data
irayya 0:c2a1e0a5d567 138
irayya 0:c2a1e0a5d567 139
irayya 0:c2a1e0a5d567 140 // publishing
irayya 0:c2a1e0a5d567 141
irayya 0:c2a1e0a5d567 142 message.qos = MQTT::QOS0;
irayya 0:c2a1e0a5d567 143 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 0:c2a1e0a5d567 144 // if it is false The broker will store the last retained message.
irayya 0:c2a1e0a5d567 145 message.dup = false; // the broker will not create duplicate message
irayya 0:c2a1e0a5d567 146 message.payload = (void*)decryptedData; // decrypting the message
irayya 0:c2a1e0a5d567 147
irayya 0:c2a1e0a5d567 148 message.payloadlen = strlen(decryptedData); // finding the length of the message
irayya 0:c2a1e0a5d567 149
irayya 0:c2a1e0a5d567 150 rc = client.publish("bulb", message); // publishing the message using topic name and message
irayya 0:c2a1e0a5d567 151 memset(dataReceive,'\0',sizeof(dataReceive)); // clearing the dataReceive buffer
irayya 0:c2a1e0a5d567 152 memset(msg,'\0',sizeof(msg)); // clearing the msg buffer
irayya 0:c2a1e0a5d567 153 }
irayya 0:c2a1e0a5d567 154 client.yield(20);
irayya 0:c2a1e0a5d567 155 }
irayya 0:c2a1e0a5d567 156 }
irayya 0:c2a1e0a5d567 157 void bluetooth() //bluetooth function for reading data from slave device
irayya 0:c2a1e0a5d567 158 {
irayya 0:c2a1e0a5d567 159 int z=0;
irayya 0:c2a1e0a5d567 160 while(1) {
irayya 0:c2a1e0a5d567 161 if(device.readable()) {
irayya 0:c2a1e0a5d567 162 char c=device.getc();
irayya 0:c2a1e0a5d567 163 if(c=='\0') { // if char is null then return to main function where it was called
irayya 0:c2a1e0a5d567 164 z=0;
irayya 0:c2a1e0a5d567 165 return;
irayya 0:c2a1e0a5d567 166 } else {
irayya 0:c2a1e0a5d567 167 dataReceive[z]=c; //
irayya 0:c2a1e0a5d567 168 printf("%c",c);
irayya 0:c2a1e0a5d567 169 z++;
irayya 0:c2a1e0a5d567 170 }
irayya 0:c2a1e0a5d567 171 }
irayya 0:c2a1e0a5d567 172 }
irayya 0:c2a1e0a5d567 173 }
irayya 0:c2a1e0a5d567 174