Auto Pets Feeder

Dependencies:   mbed RangeFinder ESP8266 HC_SR04_Ultrasonic_Library

Committer:
zsong
Date:
Tue Apr 30 13:20:00 2019 +0000
Revision:
2:c2e622db40aa
Parent:
1:8ab009672555
Auto Pets Feeder

Who changed what in which revision?

UserRevisionLine numberNew contents of line
eduvanceIoT 0:34d3f68b920e 1 #include "mbed.h"
eduvanceIoT 0:34d3f68b920e 2 #include "ESP8266.h"
zsong 2:c2e622db40aa 3 #include "RangeFinder.h"
zsong 2:c2e622db40aa 4
zsong 2:c2e622db40aa 5 //Rangefinder Init
zsong 2:c2e622db40aa 6 RangeFinder rf(D2, 10, 5800.0, 100000);
eduvanceIoT 0:34d3f68b920e 7
eduvanceIoT 0:34d3f68b920e 8 Serial pc(USBTX,USBRX);
eduvanceIoT 0:34d3f68b920e 9
zsong 2:c2e622db40aa 10 //sensor
zsong 2:c2e622db40aa 11 AnalogIn lightSensor(A1);
zsong 2:c2e622db40aa 12 PwmOut pwm(PTD0);
eduvanceIoT 0:34d3f68b920e 13
eduvanceIoT 0:34d3f68b920e 14 //wifi UART port and baud rate
zsong 2:c2e622db40aa 15 ESP8266 wifi(PTC17, PTC16, 115200);
zsong 2:c2e622db40aa 16
eduvanceIoT 0:34d3f68b920e 17
eduvanceIoT 0:34d3f68b920e 18 //buffers for wifi library
SIT2016 1:8ab009672555 19 char resp[1000];
eduvanceIoT 0:34d3f68b920e 20 char http_cmd[300], comm[300];
eduvanceIoT 0:34d3f68b920e 21
zsong 2:c2e622db40aa 22 //lightsensor reading
zsong 2:c2e622db40aa 23 float lightRead = 0.0f;
zsong 2:c2e622db40aa 24
eduvanceIoT 0:34d3f68b920e 25 int timeout = 8000; //timeout for wifi commands
eduvanceIoT 0:34d3f68b920e 26
zsong 2:c2e622db40aa 27 //system state
zsong 2:c2e622db40aa 28 int state = 0;
zsong 2:c2e622db40aa 29
eduvanceIoT 0:34d3f68b920e 30 //SSID and password for connection
zsong 2:c2e622db40aa 31 #define SSID "ATT4fpt8dY"
zsong 2:c2e622db40aa 32 #define PASS "8k#ua9zy%4ue"
eduvanceIoT 0:34d3f68b920e 33
eduvanceIoT 0:34d3f68b920e 34 //Remote IP
eduvanceIoT 0:34d3f68b920e 35 #define IP "184.106.153.149"
eduvanceIoT 0:34d3f68b920e 36
SIT2016 1:8ab009672555 37
SIT2016 1:8ab009672555 38 //Update key for thingspeak
zsong 2:c2e622db40aa 39 char* Update_Key = "H67JROEREPXPGPFZ";
eduvanceIoT 0:34d3f68b920e 40
eduvanceIoT 0:34d3f68b920e 41 //Wifi init function
eduvanceIoT 0:34d3f68b920e 42 void wifi_initialize(void){
eduvanceIoT 0:34d3f68b920e 43
eduvanceIoT 0:34d3f68b920e 44 pc.printf("******** Resetting wifi module ********\r\n");
eduvanceIoT 0:34d3f68b920e 45 wifi.Reset();
eduvanceIoT 0:34d3f68b920e 46
eduvanceIoT 0:34d3f68b920e 47 //wait for 5 seconds for response, else display no response receiveed
eduvanceIoT 0:34d3f68b920e 48 if (wifi.RcvReply(resp, 5000))
eduvanceIoT 0:34d3f68b920e 49 pc.printf("%s",resp);
eduvanceIoT 0:34d3f68b920e 50 else
eduvanceIoT 0:34d3f68b920e 51 pc.printf("No response");
eduvanceIoT 0:34d3f68b920e 52
eduvanceIoT 0:34d3f68b920e 53 pc.printf("******** Setting Station mode of wifi with AP ********\r\n");
eduvanceIoT 0:34d3f68b920e 54 wifi.SetMode(1); // set transparent mode
eduvanceIoT 0:34d3f68b920e 55 if (wifi.RcvReply(resp, timeout)) //receive a response from ESP
eduvanceIoT 0:34d3f68b920e 56 pc.printf("%s",resp); //Print the response onscreen
eduvanceIoT 0:34d3f68b920e 57 else
eduvanceIoT 0:34d3f68b920e 58 pc.printf("No response while setting mode. \r\n");
eduvanceIoT 0:34d3f68b920e 59
eduvanceIoT 0:34d3f68b920e 60 pc.printf("******** Joining network with SSID and PASS ********\r\n");
eduvanceIoT 0:34d3f68b920e 61 wifi.Join(SSID, PASS);
eduvanceIoT 0:34d3f68b920e 62 if (wifi.RcvReply(resp, timeout))
eduvanceIoT 0:34d3f68b920e 63 pc.printf("%s",resp);
eduvanceIoT 0:34d3f68b920e 64 else
eduvanceIoT 0:34d3f68b920e 65 pc.printf("No response while connecting to network \r\n");
eduvanceIoT 0:34d3f68b920e 66
eduvanceIoT 0:34d3f68b920e 67 pc.printf("******** Getting IP and MAC of module ********\r\n");
eduvanceIoT 0:34d3f68b920e 68 wifi.GetIP(resp);
eduvanceIoT 0:34d3f68b920e 69 if (wifi.RcvReply(resp, timeout))
eduvanceIoT 0:34d3f68b920e 70 pc.printf("%s",resp);
eduvanceIoT 0:34d3f68b920e 71 else
eduvanceIoT 0:34d3f68b920e 72 pc.printf("No response while getting IP \r\n");
eduvanceIoT 0:34d3f68b920e 73
eduvanceIoT 0:34d3f68b920e 74 pc.printf("******** Setting WIFI UART passthrough ********\r\n");
eduvanceIoT 0:34d3f68b920e 75 wifi.setTransparent();
eduvanceIoT 0:34d3f68b920e 76 if (wifi.RcvReply(resp, timeout))
eduvanceIoT 0:34d3f68b920e 77 pc.printf("%s",resp);
eduvanceIoT 0:34d3f68b920e 78 else
eduvanceIoT 0:34d3f68b920e 79 pc.printf("No response while setting wifi passthrough. \r\n");
eduvanceIoT 0:34d3f68b920e 80 wait(1);
eduvanceIoT 0:34d3f68b920e 81
eduvanceIoT 0:34d3f68b920e 82 pc.printf("******** Setting single connection mode ********\r\n");
eduvanceIoT 0:34d3f68b920e 83 wifi.SetSingle();
eduvanceIoT 0:34d3f68b920e 84 wifi.RcvReply(resp, timeout);
eduvanceIoT 0:34d3f68b920e 85 if (wifi.RcvReply(resp, timeout))
eduvanceIoT 0:34d3f68b920e 86 pc.printf("%s",resp);
eduvanceIoT 0:34d3f68b920e 87 else
eduvanceIoT 0:34d3f68b920e 88 pc.printf("No response while setting single connection \r\n");
eduvanceIoT 0:34d3f68b920e 89 wait(1);
eduvanceIoT 0:34d3f68b920e 90 }
eduvanceIoT 0:34d3f68b920e 91
zsong 2:c2e622db40aa 92 void wifi_send(void){
zsong 2:c2e622db40aa 93
eduvanceIoT 0:34d3f68b920e 94 pc.printf("******** Starting TCP connection on IP and port ********\r\n");
eduvanceIoT 0:34d3f68b920e 95 wifi.startTCPConn(IP,80); //cipstart
eduvanceIoT 0:34d3f68b920e 96 wifi.RcvReply(resp, timeout);
eduvanceIoT 0:34d3f68b920e 97 if (wifi.RcvReply(resp, timeout))
eduvanceIoT 0:34d3f68b920e 98 pc.printf("%s",resp);
eduvanceIoT 0:34d3f68b920e 99 else
eduvanceIoT 0:34d3f68b920e 100 pc.printf("No response while starting TCP connection \r\n");
eduvanceIoT 0:34d3f68b920e 101 wait(1);
zsong 2:c2e622db40aa 102 //create link
zsong 2:c2e622db40aa 103 sprintf(http_cmd,"/update?api_key=%s&field1=%f",Update_Key,lightRead);
zsong 2:c2e622db40aa 104 pc.printf(http_cmd);
eduvanceIoT 0:34d3f68b920e 105
eduvanceIoT 0:34d3f68b920e 106
eduvanceIoT 0:34d3f68b920e 107 pc.printf("******** Sending URL to wifi ********\r\n");
eduvanceIoT 0:34d3f68b920e 108 wifi.sendURL(http_cmd, comm); //cipsend and get command
eduvanceIoT 0:34d3f68b920e 109 if (wifi.RcvReply(resp, timeout))
eduvanceIoT 0:34d3f68b920e 110 pc.printf("%s",resp);
SIT2016 1:8ab009672555 111 else
SIT2016 1:8ab009672555 112 pc.printf("No response while sending URL \r\n");
eduvanceIoT 0:34d3f68b920e 113 }
eduvanceIoT 0:34d3f68b920e 114
eduvanceIoT 0:34d3f68b920e 115 int main () {
zsong 2:c2e622db40aa 116 pwm.period_ms(20) ;
zsong 2:c2e622db40aa 117 wifi_initialize();
zsong 2:c2e622db40aa 118 float d;
zsong 2:c2e622db40aa 119 int count = 0;
eduvanceIoT 0:34d3f68b920e 120
eduvanceIoT 0:34d3f68b920e 121
eduvanceIoT 0:34d3f68b920e 122
eduvanceIoT 0:34d3f68b920e 123 while (1) {
zsong 2:c2e622db40aa 124 printf("running\n");
zsong 2:c2e622db40aa 125 lightRead = 1 - lightSensor.read();
zsong 2:c2e622db40aa 126 d = rf.read_m();
eduvanceIoT 0:34d3f68b920e 127
zsong 2:c2e622db40aa 128 switch(state){
zsong 2:c2e622db40aa 129 case 0:
zsong 2:c2e622db40aa 130 if(d < 0.2f){
zsong 2:c2e622db40aa 131 state = 1;
zsong 2:c2e622db40aa 132 }break;
zsong 2:c2e622db40aa 133 case 1:
zsong 2:c2e622db40aa 134 pwm.pulsewidth_us(2400);
zsong 2:c2e622db40aa 135 wait(1);
zsong 2:c2e622db40aa 136 pwm.pulsewidth_us(1000);
zsong 2:c2e622db40aa 137 wait(1);
zsong 2:c2e622db40aa 138 state = 2;
zsong 2:c2e622db40aa 139 break;
zsong 2:c2e622db40aa 140 case 2:
zsong 2:c2e622db40aa 141 if(d > 0.6f){state = 0;}break;
zsong 2:c2e622db40aa 142 }
zsong 2:c2e622db40aa 143 if(count == 500){wifi_send();count = 0;}
zsong 2:c2e622db40aa 144 count++;
zsong 2:c2e622db40aa 145 //
eduvanceIoT 0:34d3f68b920e 146 }
eduvanceIoT 0:34d3f68b920e 147 }