BLE Mesh Light Sensor output to FRDMK64f

Fork of Hexi_Blinky_Example by Hexiwear

Committer:
roborags
Date:
Sun Mar 19 20:17:30 2017 +0000
Revision:
14:02ddfa711646
Parent:
4:81cea7a352b0
Child:
15:67a7cca7ae06
0

Who changed what in which revision?

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