The project is about embedding temperature sensor, a PIR sensor and a thermocouple with RFID as a security measure and sending the data to ThingSpeak Cloud with a WiFi module ESP8266

Dependencies:   DHT ESP8266 MFRC522

Committer:
architmuchhal
Date:
Tue Mar 28 17:19:25 2017 +0000
Revision:
0:94f21066fc43
Internet I/O Bus powered by Hexiwear Brain using FRDM - K64F

Who changed what in which revision?

UserRevisionLine numberNew contents of line
architmuchhal 0:94f21066fc43 1 #include "mbed.h"
architmuchhal 0:94f21066fc43 2 #include "MFRC522.h"
architmuchhal 0:94f21066fc43 3 #include "DHT.h"
architmuchhal 0:94f21066fc43 4 #include "ESP8266.h" // Include header file
architmuchhal 0:94f21066fc43 5 #include "math.h"
architmuchhal 0:94f21066fc43 6 #include <string>
architmuchhal 0:94f21066fc43 7
architmuchhal 0:94f21066fc43 8 #define APIKEY D9BGPWTNAGUAZPMB //Put "Write key" of your channel in thingspeak.com
architmuchhal 0:94f21066fc43 9 #define IP "184.106.153.149" // IP Address of "api.thingspeak.com\"
architmuchhal 0:94f21066fc43 10 #define WIFI_SSID "Archit"
architmuchhal 0:94f21066fc43 11 #define WIFI_PASS "archit12"
architmuchhal 0:94f21066fc43 12
architmuchhal 0:94f21066fc43 13 ESP8266 esp(PTC17, PTC16, 115200); // baud rate for wifi
architmuchhal 0:94f21066fc43 14
architmuchhal 0:94f21066fc43 15 // FRDM-K64F (Freescale) Pin for MFRC522 reset
architmuchhal 0:94f21066fc43 16 #define MF_RESET PTB19
architmuchhal 0:94f21066fc43 17
architmuchhal 0:94f21066fc43 18 // Defining the serial ports for PC and Bluetooth
architmuchhal 0:94f21066fc43 19 #define SERIAL_1
architmuchhal 0:94f21066fc43 20 AnalogIn check(PTB3); //thermocouple Analog input
architmuchhal 0:94f21066fc43 21
architmuchhal 0:94f21066fc43 22 Serial pc(USBTX, USBRX);
architmuchhal 0:94f21066fc43 23 DHT sensor(PTC2,DHT22); //DHT Sensor
architmuchhal 0:94f21066fc43 24 DigitalOut LedGreen(LED2), LedRed(LED1);
architmuchhal 0:94f21066fc43 25 DigitalIn inputPin(PTB13); // pir senor input
architmuchhal 0:94f21066fc43 26
architmuchhal 0:94f21066fc43 27 int val=1;
architmuchhal 0:94f21066fc43 28 float tmp_f, tmp_c, hum;
architmuchhal 0:94f21066fc43 29 Timer timeBetweenCards;
architmuchhal 0:94f21066fc43 30 char tagname;
architmuchhal 0:94f21066fc43 31
architmuchhal 0:94f21066fc43 32 uint8_t user[10];
architmuchhal 0:94f21066fc43 33 char Richard[17]="A6027B026802A102";
architmuchhal 0:94f21066fc43 34 char tempo[17];
architmuchhal 0:94f21066fc43 35 char snd[255],rcv[1000],snd_Data[255];
architmuchhal 0:94f21066fc43 36 float x=0;
architmuchhal 0:94f21066fc43 37
architmuchhal 0:94f21066fc43 38 //MFRC522 RfChip (SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, MF_RESET);
architmuchhal 0:94f21066fc43 39 MFRC522 RfChip (PTC6, PTC7, PTC5, PTC3, PTB19);
architmuchhal 0:94f21066fc43 40
architmuchhal 0:94f21066fc43 41 void esp_initialize(void);
architmuchhal 0:94f21066fc43 42 void esp_send(void);
architmuchhal 0:94f21066fc43 43
architmuchhal 0:94f21066fc43 44 int main(void)
architmuchhal 0:94f21066fc43 45 {
architmuchhal 0:94f21066fc43 46 pc.baud(115200);
architmuchhal 0:94f21066fc43 47 esp_initialize();
architmuchhal 0:94f21066fc43 48 LedRed= 0;
architmuchhal 0:94f21066fc43 49
architmuchhal 0:94f21066fc43 50 // Initialising RC522 Chip
architmuchhal 0:94f21066fc43 51 RfChip.PCD_Init();
architmuchhal 0:94f21066fc43 52
architmuchhal 0:94f21066fc43 53 while (true)
architmuchhal 0:94f21066fc43 54
architmuchhal 0:94f21066fc43 55 {
architmuchhal 0:94f21066fc43 56 if(inputPin==1)
architmuchhal 0:94f21066fc43 57
architmuchhal 0:94f21066fc43 58 {
architmuchhal 0:94f21066fc43 59 printf("Motion Detected!\r\n");
architmuchhal 0:94f21066fc43 60 printf("************************************************\r\n");
architmuchhal 0:94f21066fc43 61 printf("You have approached Omnisite Monitioring Solutions!\r\n");
architmuchhal 0:94f21066fc43 62 printf("------------------------------------------------------------\r\n");
architmuchhal 0:94f21066fc43 63 printf("Place Your ID to get access:\r\n");
architmuchhal 0:94f21066fc43 64 printf("------------------------------------------------------------\r\n");
architmuchhal 0:94f21066fc43 65 wait(2);
architmuchhal 0:94f21066fc43 66 tagname = '\0';
architmuchhal 0:94f21066fc43 67 LedRed= 1;
architmuchhal 0:94f21066fc43 68 LedGreen = 1;
architmuchhal 0:94f21066fc43 69
architmuchhal 0:94f21066fc43 70 // checking for new cards
architmuchhal 0:94f21066fc43 71 if ( ! RfChip.PICC_IsNewCardPresent()) {
architmuchhal 0:94f21066fc43 72 wait_ms(100);
architmuchhal 0:94f21066fc43 73 continue;
architmuchhal 0:94f21066fc43 74 }
architmuchhal 0:94f21066fc43 75
architmuchhal 0:94f21066fc43 76 // Selecting one of the cards or key chains
architmuchhal 0:94f21066fc43 77 if ( ! RfChip.PICC_ReadCardSerial()) {
architmuchhal 0:94f21066fc43 78 wait_ms(1000);
architmuchhal 0:94f21066fc43 79 continue;
architmuchhal 0:94f21066fc43 80 }
architmuchhal 0:94f21066fc43 81
architmuchhal 0:94f21066fc43 82 // When a card is detected, a Green Led flashes!
architmuchhal 0:94f21066fc43 83 timeBetweenCards.start();
architmuchhal 0:94f21066fc43 84 LedGreen = 0;
architmuchhal 0:94f21066fc43 85
architmuchhal 0:94f21066fc43 86 for (uint8_t i = 0; i < RfChip.uid.size; i++) {
architmuchhal 0:94f21066fc43 87 user[i]=RfChip.uid.uidByte[i];
architmuchhal 0:94f21066fc43 88 }
architmuchhal 0:94f21066fc43 89
architmuchhal 0:94f21066fc43 90 sprintf(tempo,"%X02%X02%X02%X02",user[0],user[1],user[2],user[3]);
architmuchhal 0:94f21066fc43 91 printf("\n\r");
architmuchhal 0:94f21066fc43 92 if (strcmp(tempo, Richard)==0) {
architmuchhal 0:94f21066fc43 93 //Thermocouple program
architmuchhal 0:94f21066fc43 94 pc.printf("Thermocouple Output:\r\n");
architmuchhal 0:94f21066fc43 95 x=0;
architmuchhal 0:94f21066fc43 96 x= check.read_u16();
architmuchhal 0:94f21066fc43 97 x=x/65536; // ADC Scaling
architmuchhal 0:94f21066fc43 98 x=x*330; // GPIO Scaling and IC Scaling(*100)
architmuchhal 0:94f21066fc43 99 pc.printf("Voltage Difference = %.2f C\n\r",x);
architmuchhal 0:94f21066fc43 100 wait(3);
architmuchhal 0:94f21066fc43 101
architmuchhal 0:94f21066fc43 102
architmuchhal 0:94f21066fc43 103 //DHT
architmuchhal 0:94f21066fc43 104 int err;
architmuchhal 0:94f21066fc43 105 printf("\r\nDHT Test program");
architmuchhal 0:94f21066fc43 106 printf("\r\n******************\r\n");
architmuchhal 0:94f21066fc43 107 err = sensor.readData();
architmuchhal 0:94f21066fc43 108 if (err == 0) {
architmuchhal 0:94f21066fc43 109 printf("Temperature is %4.2f C \r\n",sensor.ReadTemperature(CELCIUS));
architmuchhal 0:94f21066fc43 110 printf("Temperature is %4.2f F \r\n",sensor.ReadTemperature(FARENHEIT));
architmuchhal 0:94f21066fc43 111 printf("Temperature is %4.2f K \r\n",sensor.ReadTemperature(KELVIN));
architmuchhal 0:94f21066fc43 112 printf("Humidity is %4.2f \r\n",sensor.ReadHumidity());
architmuchhal 0:94f21066fc43 113 printf("Dew point is %4.2f \r\n",sensor.CalcdewPoint(sensor.ReadTemperature(CELCIUS), sensor.ReadHumidity()));
architmuchhal 0:94f21066fc43 114 printf("Dew point (fast) is %4.2f \r\n",sensor.CalcdewPointFast(sensor.ReadTemperature(CELCIUS), sensor.ReadHumidity()));
architmuchhal 0:94f21066fc43 115 printf("--------------------------------------------\r\n");
architmuchhal 0:94f21066fc43 116 }
architmuchhal 0:94f21066fc43 117 wait(2);
architmuchhal 0:94f21066fc43 118
architmuchhal 0:94f21066fc43 119 tmp_f = sensor.ReadTemperature(FARENHEIT);
architmuchhal 0:94f21066fc43 120 tmp_c = sensor.ReadTemperature(CELCIUS);
architmuchhal 0:94f21066fc43 121 hum = sensor.ReadHumidity();
architmuchhal 0:94f21066fc43 122
architmuchhal 0:94f21066fc43 123 esp_send();
architmuchhal 0:94f21066fc43 124 } else if (strcmp(tempo, Richard)!=0) {
architmuchhal 0:94f21066fc43 125 printf("NOT AUTHORISED\n\r");
architmuchhal 0:94f21066fc43 126
architmuchhal 0:94f21066fc43 127 }
architmuchhal 0:94f21066fc43 128
architmuchhal 0:94f21066fc43 129 } else if(inputPin==0) {
architmuchhal 0:94f21066fc43 130 }
architmuchhal 0:94f21066fc43 131 wait(5);
architmuchhal 0:94f21066fc43 132 }
architmuchhal 0:94f21066fc43 133 }
architmuchhal 0:94f21066fc43 134
architmuchhal 0:94f21066fc43 135 void esp_initialize(void)
architmuchhal 0:94f21066fc43 136 {
architmuchhal 0:94f21066fc43 137 pc.printf("Initializing ESP\r\n");
architmuchhal 0:94f21066fc43 138
architmuchhal 0:94f21066fc43 139 pc.printf("Reset ESP\r\n");
architmuchhal 0:94f21066fc43 140 esp.Reset(); //RESET ESP
architmuchhal 0:94f21066fc43 141 esp.RcvReply(rcv, 400); //receive a response from ESP
architmuchhal 0:94f21066fc43 142 wait(2);
architmuchhal 0:94f21066fc43 143
architmuchhal 0:94f21066fc43 144 strcpy(snd,"AT");
architmuchhal 0:94f21066fc43 145 esp.SendCMD(snd);
architmuchhal 0:94f21066fc43 146 pc.printf(snd);
architmuchhal 0:94f21066fc43 147 esp.RcvReply(rcv, 400);
architmuchhal 0:94f21066fc43 148 pc.printf(rcv);
architmuchhal 0:94f21066fc43 149 wait(0.1);
architmuchhal 0:94f21066fc43 150
architmuchhal 0:94f21066fc43 151 strcpy(snd,"AT+CWMODE=1");
architmuchhal 0:94f21066fc43 152 esp.SendCMD(snd);
architmuchhal 0:94f21066fc43 153 pc.printf(snd);
architmuchhal 0:94f21066fc43 154 wait(2);
architmuchhal 0:94f21066fc43 155
architmuchhal 0:94f21066fc43 156 strcpy(snd,"AT+CWJAP=\"");
architmuchhal 0:94f21066fc43 157 strcat(snd,WIFI_SSID);
architmuchhal 0:94f21066fc43 158 strcat(snd,"\",\"");
architmuchhal 0:94f21066fc43 159 strcat(snd,WIFI_PASS);
architmuchhal 0:94f21066fc43 160 strcat(snd,"\"");
architmuchhal 0:94f21066fc43 161
architmuchhal 0:94f21066fc43 162 esp.SendCMD(snd);
architmuchhal 0:94f21066fc43 163 pc.printf(snd);
architmuchhal 0:94f21066fc43 164 wait(5);
architmuchhal 0:94f21066fc43 165 esp.RcvReply(rcv, 400);
architmuchhal 0:94f21066fc43 166 pc.printf("\n %s \n", rcv);
architmuchhal 0:94f21066fc43 167
architmuchhal 0:94f21066fc43 168 strcpy(snd,"AT+CIPMUX=1");
architmuchhal 0:94f21066fc43 169 esp.SendCMD(snd);
architmuchhal 0:94f21066fc43 170 pc.printf(snd);
architmuchhal 0:94f21066fc43 171 esp.RcvReply(rcv, 400);
architmuchhal 0:94f21066fc43 172 pc.printf("\n %s \n", rcv);
architmuchhal 0:94f21066fc43 173
architmuchhal 0:94f21066fc43 174 }
architmuchhal 0:94f21066fc43 175
architmuchhal 0:94f21066fc43 176 void esp_send(void)
architmuchhal 0:94f21066fc43 177 {
architmuchhal 0:94f21066fc43 178 //ESP updates the Status of Thingspeak channel//
architmuchhal 0:94f21066fc43 179
architmuchhal 0:94f21066fc43 180 strcpy(snd,"AT+CIPSTART=");
architmuchhal 0:94f21066fc43 181 strcat(snd,"\"TCP\",\"");
architmuchhal 0:94f21066fc43 182 strcat(snd,IP);
architmuchhal 0:94f21066fc43 183 strcat(snd,"\",80");
architmuchhal 0:94f21066fc43 184
architmuchhal 0:94f21066fc43 185 esp.SendCMD(snd);
architmuchhal 0:94f21066fc43 186 pc.printf("Send\r\n%s",snd);
architmuchhal 0:94f21066fc43 187 esp.RcvReply(rcv, 1000);
architmuchhal 0:94f21066fc43 188 pc.printf("Receive\r\n%s",rcv);
architmuchhal 0:94f21066fc43 189 wait(1);
architmuchhal 0:94f21066fc43 190
architmuchhal 0:94f21066fc43 191 sprintf(snd,"GET https://api.thingspeak.com/update?api_key=D9BGPWTNAGUAZPMB&field1=%f&field2=%f&field3=%f&field4=%.2f\r\n",tmp_f,tmp_c,hum,x);
architmuchhal 0:94f21066fc43 192
architmuchhal 0:94f21066fc43 193 int i=0;
architmuchhal 0:94f21066fc43 194 for(i=0; snd[i]!='\0'; i++);
architmuchhal 0:94f21066fc43 195 i++;
architmuchhal 0:94f21066fc43 196 char cmd[255];
architmuchhal 0:94f21066fc43 197
architmuchhal 0:94f21066fc43 198 sprintf(cmd,"AT+CIPSEND=%d",i); //Send Number of open connection and Characters to send
architmuchhal 0:94f21066fc43 199 esp.SendCMD(cmd);
architmuchhal 0:94f21066fc43 200 pc.printf("Send\r\n%s",cmd);
architmuchhal 0:94f21066fc43 201 while(i<=20 || rcv == ">") {
architmuchhal 0:94f21066fc43 202 esp.RcvReply(rcv, 1000);
architmuchhal 0:94f21066fc43 203 wait(100);
architmuchhal 0:94f21066fc43 204 i++;
architmuchhal 0:94f21066fc43 205 }
architmuchhal 0:94f21066fc43 206 pc.printf("Receive\r\n%s",rcv);
architmuchhal 0:94f21066fc43 207
architmuchhal 0:94f21066fc43 208 esp.SendCMD(snd); //Post value to thingspeak channel
architmuchhal 0:94f21066fc43 209 pc.printf("Send\r\n%s",snd);
architmuchhal 0:94f21066fc43 210
architmuchhal 0:94f21066fc43 211 while(i<=20 || rcv == "OK") {
architmuchhal 0:94f21066fc43 212 esp.RcvReply(rcv, 1000);
architmuchhal 0:94f21066fc43 213 wait(100);
architmuchhal 0:94f21066fc43 214 i++;
architmuchhal 0:94f21066fc43 215 }
architmuchhal 0:94f21066fc43 216 pc.printf("Receive\r\n%s",rcv);
architmuchhal 0:94f21066fc43 217 }
architmuchhal 0:94f21066fc43 218