Hexiware_WiFi_ESP8266_and_sensor_code

Committer:
agaikwad
Date:
Wed Mar 22 01:15:16 2017 +0000
Revision:
0:5fcbe9cb4f5b
Hexiware_WiFi_ESP8266_and_sensor_code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
agaikwad 0:5fcbe9cb4f5b 1
agaikwad 0:5fcbe9cb4f5b 2 #include "mbed.h"
agaikwad 0:5fcbe9cb4f5b 3 #include "ESP8266.h" // Include header file from Author: Antonio Quevedo
agaikwad 0:5fcbe9cb4f5b 4 #include "math.h"
agaikwad 0:5fcbe9cb4f5b 5 #include <string>
agaikwad 0:5fcbe9cb4f5b 6
agaikwad 0:5fcbe9cb4f5b 7 #define APIKEY 45IE5JPN8ZIK2W2M //Put "Write key" of your channel in thingspeak.com
agaikwad 0:5fcbe9cb4f5b 8 #define IP "184.106.153.149" // IP Address of "api.thingspeak.com\"
agaikwad 0:5fcbe9cb4f5b 9 #define WIFI_SSID "Redmi"
agaikwad 0:5fcbe9cb4f5b 10 #define WIFI_PASS "akash12345"
agaikwad 0:5fcbe9cb4f5b 11
agaikwad 0:5fcbe9cb4f5b 12 Serial pc(USBTX,USBRX);
agaikwad 0:5fcbe9cb4f5b 13 SPI spi(PTC6,PTC7,PTC5); // (MOSI MISO CLK)setup SPI interface on pins PTC5,PTC6,PTC7
agaikwad 0:5fcbe9cb4f5b 14 ESP8266 esp(PTC17, PTC16, 115200); // baud rate for wifi
agaikwad 0:5fcbe9cb4f5b 15
agaikwad 0:5fcbe9cb4f5b 16 DigitalOut cs1(PTC4);
agaikwad 0:5fcbe9cb4f5b 17 DigitalOut cs2(PTC3);
agaikwad 0:5fcbe9cb4f5b 18 I2C i2c(PTD9,PTD8);
agaikwad 0:5fcbe9cb4f5b 19
agaikwad 0:5fcbe9cb4f5b 20 //AnalogIn check(PTB6);
agaikwad 0:5fcbe9cb4f5b 21 const int addr = 0x88;
agaikwad 0:5fcbe9cb4f5b 22
agaikwad 0:5fcbe9cb4f5b 23 char snd[255],rcv[1000],snd_Data[255]; //snd= string used to send command to ESP 8266 wii and rcv = string used to receive response from ESP8266 wifi module
agaikwad 0:5fcbe9cb4f5b 24
agaikwad 0:5fcbe9cb4f5b 25 int cnt = 0; // counter for number of motion detected
agaikwad 0:5fcbe9cb4f5b 26 int cnt1 = 0; // counter for number of motion detected
agaikwad 0:5fcbe9cb4f5b 27 int cnt2 = 0; // counter for number of motion detected
agaikwad 0:5fcbe9cb4f5b 28
agaikwad 0:5fcbe9cb4f5b 29 float ammeter_out = 0;
agaikwad 0:5fcbe9cb4f5b 30 float voltmeter_out = 0;
agaikwad 0:5fcbe9cb4f5b 31 float light_out = 0;
agaikwad 0:5fcbe9cb4f5b 32
agaikwad 0:5fcbe9cb4f5b 33 void esp_initialize(void); // Function used to initialize ESP8266 wifi module
agaikwad 0:5fcbe9cb4f5b 34 void esp_send(void); // Function used to connect with thingspeak.com and update channel using ESP8266 wifi module
agaikwad 0:5fcbe9cb4f5b 35
agaikwad 0:5fcbe9cb4f5b 36 int main()
agaikwad 0:5fcbe9cb4f5b 37 {
agaikwad 0:5fcbe9cb4f5b 38
agaikwad 0:5fcbe9cb4f5b 39 pc.baud(115200); // Baud rate used for communicating with Tera-term on PC
agaikwad 0:5fcbe9cb4f5b 40
agaikwad 0:5fcbe9cb4f5b 41 pc.printf("START\r\n"); // Starting point
agaikwad 0:5fcbe9cb4f5b 42
agaikwad 0:5fcbe9cb4f5b 43 esp_initialize();
agaikwad 0:5fcbe9cb4f5b 44
agaikwad 0:5fcbe9cb4f5b 45 //ammeter + voltmeter code
agaikwad 0:5fcbe9cb4f5b 46 spi.format(8,0);
agaikwad 0:5fcbe9cb4f5b 47 spi.frequency(1000000);
agaikwad 0:5fcbe9cb4f5b 48 pc.printf("Analog read test from spi.\n");
agaikwad 0:5fcbe9cb4f5b 49 pc.printf("\n\r");
agaikwad 0:5fcbe9cb4f5b 50
agaikwad 0:5fcbe9cb4f5b 51 //light code
agaikwad 0:5fcbe9cb4f5b 52 int exp,exp1,l=1;
agaikwad 0:5fcbe9cb4f5b 53 i2c.frequency(100000); // set required i2c frequency
agaikwad 0:5fcbe9cb4f5b 54 //pc.baud(9600); //set baud rate
agaikwad 0:5fcbe9cb4f5b 55 pc.printf("I2C started!\r\n");
agaikwad 0:5fcbe9cb4f5b 56 pc.printf("\n\r");
agaikwad 0:5fcbe9cb4f5b 57 char cmd[3]; //for byte transfer
agaikwad 0:5fcbe9cb4f5b 58
agaikwad 0:5fcbe9cb4f5b 59 while (1)
agaikwad 0:5fcbe9cb4f5b 60 {
agaikwad 0:5fcbe9cb4f5b 61 wait(15);
agaikwad 0:5fcbe9cb4f5b 62 //ammeter code
agaikwad 0:5fcbe9cb4f5b 63
agaikwad 0:5fcbe9cb4f5b 64 cs1=0;
agaikwad 0:5fcbe9cb4f5b 65 //spi.write();
agaikwad 0:5fcbe9cb4f5b 66 //pc.printf("%d\r\n",k);
agaikwad 0:5fcbe9cb4f5b 67 int high_byte = spi.write(0);
agaikwad 0:5fcbe9cb4f5b 68 int low_byte = spi.write(0);
agaikwad 0:5fcbe9cb4f5b 69 cs1=1;
agaikwad 0:5fcbe9cb4f5b 70 float m = ((high_byte & 0x1f) << 7) | ((low_byte >> 1));
agaikwad 0:5fcbe9cb4f5b 71 float k= (float)((m*1)/4096); // show value in volts.
agaikwad 0:5fcbe9cb4f5b 72 ammeter_out = (float)((k-0.5)*1000);
agaikwad 0:5fcbe9cb4f5b 73 pc.printf("Current value: %f mA\r\n", ammeter_out);
agaikwad 0:5fcbe9cb4f5b 74 //pc.printf("Analog Value of current : %.2f\n\r",m);
agaikwad 0:5fcbe9cb4f5b 75 wait_ms(100);
agaikwad 0:5fcbe9cb4f5b 76
agaikwad 0:5fcbe9cb4f5b 77 cs2=0;
agaikwad 0:5fcbe9cb4f5b 78 //spi.write();
agaikwad 0:5fcbe9cb4f5b 79 //pc.printf("%d\r\n",k);
agaikwad 0:5fcbe9cb4f5b 80 int hi_byte = spi.write(0);
agaikwad 0:5fcbe9cb4f5b 81 int lo_byte = spi.write(0);
agaikwad 0:5fcbe9cb4f5b 82 cs2=1;
agaikwad 0:5fcbe9cb4f5b 83 float x = ((hi_byte & 0x1f) << 7) | ((lo_byte >> 1));
agaikwad 0:5fcbe9cb4f5b 84
agaikwad 0:5fcbe9cb4f5b 85 float r= (float)((x*33)/4096); // show value in volts.
agaikwad 0:5fcbe9cb4f5b 86 voltmeter_out = (float)(r-16.5);
agaikwad 0:5fcbe9cb4f5b 87 pc.printf("AD Voltage channel value: %f V\r\n", voltmeter_out);
agaikwad 0:5fcbe9cb4f5b 88 //pc.printf("Voltage Analog Value: %.2f\n\r",x);
agaikwad 0:5fcbe9cb4f5b 89 wait_ms(100);
agaikwad 0:5fcbe9cb4f5b 90
agaikwad 0:5fcbe9cb4f5b 91 //ambient light sensor code
agaikwad 0:5fcbe9cb4f5b 92
agaikwad 0:5fcbe9cb4f5b 93 cmd[0] = 0x01; //configuration register
agaikwad 0:5fcbe9cb4f5b 94 cmd[1]= 0xCC; //configuration data
agaikwad 0:5fcbe9cb4f5b 95 cmd[2]= 0x01; //configuration data
agaikwad 0:5fcbe9cb4f5b 96 i2c.write(addr, cmd, 3);
agaikwad 0:5fcbe9cb4f5b 97 cmd[0] = 0x00; // data register
agaikwad 0:5fcbe9cb4f5b 98 i2c.write(addr, cmd, 1);
agaikwad 0:5fcbe9cb4f5b 99 wait_ms(100);
agaikwad 0:5fcbe9cb4f5b 100 i2c.read(addr, cmd, 2);
agaikwad 0:5fcbe9cb4f5b 101
agaikwad 0:5fcbe9cb4f5b 102 exp= cmd[0]>>4;
agaikwad 0:5fcbe9cb4f5b 103 exp1= (cmd[0]-(exp<<4))*256+cmd[1];
agaikwad 0:5fcbe9cb4f5b 104 // pc.printf("exponent = 0x%x\n\r", exp);
agaikwad 0:5fcbe9cb4f5b 105 // pc.printf("fraction = %d\n\r", exp1);
agaikwad 0:5fcbe9cb4f5b 106 l=1;
agaikwad 0:5fcbe9cb4f5b 107 for(int r=0;r<exp;r++){l=l*2;};
agaikwad 0:5fcbe9cb4f5b 108 // pc.printf("value = %d\n\r", l);
agaikwad 0:5fcbe9cb4f5b 109 light_out= (exp1*l)/100;
agaikwad 0:5fcbe9cb4f5b 110 pc.printf("Lux = %.2f\n\r", light_out); // printing LUX value
agaikwad 0:5fcbe9cb4f5b 111 pc.printf("\n\r");
agaikwad 0:5fcbe9cb4f5b 112 wait_ms(100);
agaikwad 0:5fcbe9cb4f5b 113
agaikwad 0:5fcbe9cb4f5b 114 pc.printf("Sending this information to thingspeak.com = %d\r\n",cnt);
agaikwad 0:5fcbe9cb4f5b 115 esp_send();
agaikwad 0:5fcbe9cb4f5b 116
agaikwad 0:5fcbe9cb4f5b 117 }
agaikwad 0:5fcbe9cb4f5b 118 }
agaikwad 0:5fcbe9cb4f5b 119
agaikwad 0:5fcbe9cb4f5b 120
agaikwad 0:5fcbe9cb4f5b 121 void esp_initialize(void)
agaikwad 0:5fcbe9cb4f5b 122 {
agaikwad 0:5fcbe9cb4f5b 123 pc.printf("Initializing ESP\r\n");
agaikwad 0:5fcbe9cb4f5b 124
agaikwad 0:5fcbe9cb4f5b 125 pc.printf("Reset ESP\r\n");
agaikwad 0:5fcbe9cb4f5b 126 esp.Reset(); //RESET ESP
agaikwad 0:5fcbe9cb4f5b 127 esp.RcvReply(rcv, 400); //receive a response from ESP
agaikwad 0:5fcbe9cb4f5b 128 //pc.printf(rcv); //Print the response onscreen
agaikwad 0:5fcbe9cb4f5b 129 wait(2);
agaikwad 0:5fcbe9cb4f5b 130
agaikwad 0:5fcbe9cb4f5b 131 strcpy(snd,"AT");
agaikwad 0:5fcbe9cb4f5b 132 esp.SendCMD(snd);
agaikwad 0:5fcbe9cb4f5b 133 pc.printf(snd);
agaikwad 0:5fcbe9cb4f5b 134 //wait(2);
agaikwad 0:5fcbe9cb4f5b 135 esp.RcvReply(rcv, 400);
agaikwad 0:5fcbe9cb4f5b 136 pc.printf(rcv);
agaikwad 0:5fcbe9cb4f5b 137 wait(0.1);
agaikwad 0:5fcbe9cb4f5b 138
agaikwad 0:5fcbe9cb4f5b 139 strcpy(snd,"AT+CWMODE=1");
agaikwad 0:5fcbe9cb4f5b 140 esp.SendCMD(snd);
agaikwad 0:5fcbe9cb4f5b 141 pc.printf(snd);
agaikwad 0:5fcbe9cb4f5b 142 wait(2);
agaikwad 0:5fcbe9cb4f5b 143
agaikwad 0:5fcbe9cb4f5b 144 strcpy(snd,"AT+CWJAP=\"");
agaikwad 0:5fcbe9cb4f5b 145 strcat(snd,WIFI_SSID);
agaikwad 0:5fcbe9cb4f5b 146 strcat(snd,"\",\"");
agaikwad 0:5fcbe9cb4f5b 147 strcat(snd,WIFI_PASS);
agaikwad 0:5fcbe9cb4f5b 148 strcat(snd,"\"");
agaikwad 0:5fcbe9cb4f5b 149
agaikwad 0:5fcbe9cb4f5b 150 esp.SendCMD(snd);
agaikwad 0:5fcbe9cb4f5b 151 pc.printf(snd);
agaikwad 0:5fcbe9cb4f5b 152 wait(5);
agaikwad 0:5fcbe9cb4f5b 153 esp.RcvReply(rcv, 400);
agaikwad 0:5fcbe9cb4f5b 154 pc.printf("\n %s \n", rcv);
agaikwad 0:5fcbe9cb4f5b 155
agaikwad 0:5fcbe9cb4f5b 156 strcpy(snd,"AT+CIPMUX=0");
agaikwad 0:5fcbe9cb4f5b 157 esp.SendCMD(snd);
agaikwad 0:5fcbe9cb4f5b 158 pc.printf(snd);
agaikwad 0:5fcbe9cb4f5b 159 //wait(2);
agaikwad 0:5fcbe9cb4f5b 160 esp.RcvReply(rcv, 400);
agaikwad 0:5fcbe9cb4f5b 161 pc.printf("\n %s \n", rcv);
agaikwad 0:5fcbe9cb4f5b 162
agaikwad 0:5fcbe9cb4f5b 163 }
agaikwad 0:5fcbe9cb4f5b 164
agaikwad 0:5fcbe9cb4f5b 165
agaikwad 0:5fcbe9cb4f5b 166 void esp_send(void)
agaikwad 0:5fcbe9cb4f5b 167 {
agaikwad 0:5fcbe9cb4f5b 168
agaikwad 0:5fcbe9cb4f5b 169 //ESP updates the Status of Thingspeak channel//
agaikwad 0:5fcbe9cb4f5b 170
agaikwad 0:5fcbe9cb4f5b 171 strcpy(snd,"AT+CIPSTART=");
agaikwad 0:5fcbe9cb4f5b 172 strcat(snd,"\"TCP\",\"");
agaikwad 0:5fcbe9cb4f5b 173 strcat(snd,IP);
agaikwad 0:5fcbe9cb4f5b 174 strcat(snd,"\",80");
agaikwad 0:5fcbe9cb4f5b 175
agaikwad 0:5fcbe9cb4f5b 176 esp.SendCMD(snd);
agaikwad 0:5fcbe9cb4f5b 177 pc.printf("S\r\n%s",snd);
agaikwad 0:5fcbe9cb4f5b 178 //wait(2);
agaikwad 0:5fcbe9cb4f5b 179 esp.RcvReply(rcv, 1000);
agaikwad 0:5fcbe9cb4f5b 180 pc.printf("R\r\n%s",rcv);
agaikwad 0:5fcbe9cb4f5b 181 wait(1);
agaikwad 0:5fcbe9cb4f5b 182
agaikwad 0:5fcbe9cb4f5b 183 sprintf(snd,"GET https://api.thingspeak.com/update?key=45IE5JPN8ZIK2W2M&field1=%f&field2=%f&field3=%f\r\n",ammeter_out,voltmeter_out,light_out);
agaikwad 0:5fcbe9cb4f5b 184
agaikwad 0:5fcbe9cb4f5b 185 int i=0;
agaikwad 0:5fcbe9cb4f5b 186 for(i=0;snd[i]!='\0';i++);
agaikwad 0:5fcbe9cb4f5b 187 i++;
agaikwad 0:5fcbe9cb4f5b 188 char cmd[255];
agaikwad 0:5fcbe9cb4f5b 189
agaikwad 0:5fcbe9cb4f5b 190 sprintf(cmd,"AT+CIPSEND=%d",i); //Send Number of open connection and Characters to send
agaikwad 0:5fcbe9cb4f5b 191 esp.SendCMD(cmd);
agaikwad 0:5fcbe9cb4f5b 192 pc.printf("S\r\n%s",cmd);
agaikwad 0:5fcbe9cb4f5b 193 while(i<=20 || rcv == ">")
agaikwad 0:5fcbe9cb4f5b 194 {
agaikwad 0:5fcbe9cb4f5b 195 esp.RcvReply(rcv, 1000);
agaikwad 0:5fcbe9cb4f5b 196 wait(100);
agaikwad 0:5fcbe9cb4f5b 197 i++;
agaikwad 0:5fcbe9cb4f5b 198 }
agaikwad 0:5fcbe9cb4f5b 199 pc.printf("R\r\n%s",rcv);
agaikwad 0:5fcbe9cb4f5b 200
agaikwad 0:5fcbe9cb4f5b 201 esp.SendCMD(snd); //Post value to thingspeak channel
agaikwad 0:5fcbe9cb4f5b 202 pc.printf("S\r\n%s",snd);
agaikwad 0:5fcbe9cb4f5b 203
agaikwad 0:5fcbe9cb4f5b 204 while(i<=20 || rcv == "OK")
agaikwad 0:5fcbe9cb4f5b 205 {
agaikwad 0:5fcbe9cb4f5b 206 esp.RcvReply(rcv, 1000);
agaikwad 0:5fcbe9cb4f5b 207 wait(100);
agaikwad 0:5fcbe9cb4f5b 208 i++;
agaikwad 0:5fcbe9cb4f5b 209 }
agaikwad 0:5fcbe9cb4f5b 210 pc.printf("R\r\n%s",rcv);
agaikwad 0:5fcbe9cb4f5b 211
agaikwad 0:5fcbe9cb4f5b 212 }
agaikwad 0:5fcbe9cb4f5b 213