BLE Mesh Light Sensor output to FRDMK64f
Fork of Hexi_Blinky_Example by
Revision 14:02ddfa711646, committed 2017-03-19
- Comitter:
- roborags
- Date:
- Sun Mar 19 20:17:30 2017 +0000
- Parent:
- 13:e702b6efb480
- Child:
- 15:67a7cca7ae06
- Commit message:
- 0
Changed in this revision
| ESP8266.lib | Show annotated file Show diff for this revision Revisions of this file |
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ESP8266.lib Sun Mar 19 20:17:30 2017 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/quevedo/code/ESP8266/#77388e8f0697
--- a/main.cpp Fri Aug 12 18:36:42 2016 +0000
+++ b/main.cpp Sun Mar 19 20:17:30 2017 +0000
@@ -1,12 +1,213 @@
+
#include "mbed.h"
+#include "ESP8266.h" // Include header file from Author: Antonio Quevedo
+#include "math.h"
+#include <string>
+
+#define APIKEY 45IE5JPN8ZIK2W2M //Put "Write key" of your channel in thingspeak.com
+#define IP "184.106.153.149" // IP Address of "api.thingspeak.com\"
+#define WIFI_SSID "Redmi"
+#define WIFI_PASS "akash12345"
+
+Serial pc(USBTX,USBRX);
+SPI spi(PTC6,PTC7,PTC5); // (MOSI MISO CLK)setup SPI interface on pins PTC5,PTC6,PTC7
+ESP8266 esp(PTC17, PTC16, 115200); // baud rate for wifi
+
+DigitalOut cs1(PTC4);
+DigitalOut cs2(PTC3);
+I2C i2c(PTD9,PTD8);
+
+//AnalogIn check(PTB6);
+const int addr = 0x88;
+
+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
+
+int cnt = 0; // counter for number of motion detected
+int cnt1 = 0; // counter for number of motion detected
+int cnt2 = 0; // counter for number of motion detected
-DigitalOut myled(LED1);
+float ammeter_out = 0;
+float voltmeter_out = 0;
+float light_out = 0;
+
+void esp_initialize(void); // Function used to initialize ESP8266 wifi module
+void esp_send(void); // Function used to connect with thingspeak.com and update channel using ESP8266 wifi module
+
+int main()
+{
+
+ pc.baud(115200); // Baud rate used for communicating with Tera-term on PC
+
+ pc.printf("START\r\n"); // Starting point
+
+ esp_initialize();
+
+ //ammeter + voltmeter code
+ spi.format(8,0);
+ spi.frequency(1000000);
+ pc.printf("Analog read test from spi.\n");
+ pc.printf("\n\r");
+
+ //light code
+ int exp,exp1,l=1;
+ i2c.frequency(100000); // set required i2c frequency
+ //pc.baud(9600); //set baud rate
+ pc.printf("I2C started!\r\n");
+ pc.printf("\n\r");
+ char cmd[3]; //for byte transfer
-int main() {
- while(1) {
- myled = 1;
- wait(0.2);
- myled = 0;
- wait(0.2);
+ while (1)
+ {
+ wait(15);
+ //ammeter code
+
+ cs1=0;
+ //spi.write();
+ //pc.printf("%d\r\n",k);
+ int high_byte = spi.write(0);
+ int low_byte = spi.write(0);
+ cs1=1;
+ float m = ((high_byte & 0x1f) << 7) | ((low_byte >> 1));
+ float k= (float)((m*1)/4096); // show value in volts.
+ ammeter_out = (float)((k-0.5)*1000);
+ pc.printf("Current value: %f mA\r\n", ammeter_out);
+ //pc.printf("Analog Value of current : %.2f\n\r",m);
+ wait_ms(100);
+
+ cs2=0;
+ //spi.write();
+ //pc.printf("%d\r\n",k);
+ int hi_byte = spi.write(0);
+ int lo_byte = spi.write(0);
+ cs2=1;
+ float x = ((hi_byte & 0x1f) << 7) | ((lo_byte >> 1));
+
+ float r= (float)((x*33)/4096); // show value in volts.
+ voltmeter_out = (float)(r-16.5);
+ pc.printf("AD Voltage channel value: %f V\r\n", voltmeter_out);
+ //pc.printf("Voltage Analog Value: %.2f\n\r",x);
+ wait_ms(100);
+
+ //ambient light sensor code
+
+ cmd[0] = 0x01; //configuration register
+ cmd[1]= 0xCC; //configuration data
+ cmd[2]= 0x01; //configuration data
+ i2c.write(addr, cmd, 3);
+ cmd[0] = 0x00; // data register
+ i2c.write(addr, cmd, 1);
+ wait_ms(100);
+ i2c.read(addr, cmd, 2);
+
+ exp= cmd[0]>>4;
+ exp1= (cmd[0]-(exp<<4))*256+cmd[1];
+ // pc.printf("exponent = 0x%x\n\r", exp);
+ // pc.printf("fraction = %d\n\r", exp1);
+ l=1;
+ for(int r=0;r<exp;r++){l=l*2;};
+ // pc.printf("value = %d\n\r", l);
+ light_out= (exp1*l)/100;
+ pc.printf("Lux = %.2f\n\r", light_out); // printing LUX value
+ pc.printf("\n\r");
+ wait_ms(100);
+
+ pc.printf("Sending this information to thingspeak.com = %d\r\n",cnt);
+ esp_send();
+
}
}
+
+
+void esp_initialize(void)
+{
+ pc.printf("Initializing ESP\r\n");
+
+ pc.printf("Reset ESP\r\n");
+ esp.Reset(); //RESET ESP
+ esp.RcvReply(rcv, 400); //receive a response from ESP
+ //pc.printf(rcv); //Print the response onscreen
+ wait(2);
+
+ strcpy(snd,"AT");
+ esp.SendCMD(snd);
+ pc.printf(snd);
+ //wait(2);
+ esp.RcvReply(rcv, 400);
+ pc.printf(rcv);
+ wait(0.1);
+
+ strcpy(snd,"AT+CWMODE=1");
+ esp.SendCMD(snd);
+ pc.printf(snd);
+ wait(2);
+
+ strcpy(snd,"AT+CWJAP=\"");
+ strcat(snd,WIFI_SSID);
+ strcat(snd,"\",\"");
+ strcat(snd,WIFI_PASS);
+ strcat(snd,"\"");
+
+ esp.SendCMD(snd);
+ pc.printf(snd);
+ wait(5);
+ esp.RcvReply(rcv, 400);
+ pc.printf("\n %s \n", rcv);
+
+ strcpy(snd,"AT+CIPMUX=0");
+ esp.SendCMD(snd);
+ pc.printf(snd);
+ //wait(2);
+ esp.RcvReply(rcv, 400);
+ pc.printf("\n %s \n", rcv);
+
+}
+
+
+void esp_send(void)
+{
+
+ //ESP updates the Status of Thingspeak channel//
+
+ strcpy(snd,"AT+CIPSTART=");
+ strcat(snd,"\"TCP\",\"");
+ strcat(snd,IP);
+ strcat(snd,"\",80");
+
+ esp.SendCMD(snd);
+ pc.printf("S\r\n%s",snd);
+ //wait(2);
+ esp.RcvReply(rcv, 1000);
+ pc.printf("R\r\n%s",rcv);
+ wait(1);
+
+ sprintf(snd,"GET https://api.thingspeak.com/update?key=45IE5JPN8ZIK2W2M&field1=%f&field2=%f&field3=%f\r\n",ammeter_out,voltmeter_out,light_out);
+
+ int i=0;
+ for(i=0;snd[i]!='\0';i++);
+ i++;
+ char cmd[255];
+
+ sprintf(cmd,"AT+CIPSEND=%d",i); //Send Number of open connection and Characters to send
+ esp.SendCMD(cmd);
+ pc.printf("S\r\n%s",cmd);
+ while(i<=20 || rcv == ">")
+ {
+ esp.RcvReply(rcv, 1000);
+ wait(100);
+ i++;
+ }
+ pc.printf("R\r\n%s",rcv);
+
+ esp.SendCMD(snd); //Post value to thingspeak channel
+ pc.printf("S\r\n%s",snd);
+
+ while(i<=20 || rcv == "OK")
+ {
+ esp.RcvReply(rcv, 1000);
+ wait(100);
+ i++;
+ }
+ pc.printf("R\r\n%s",rcv);
+
+}
+
