Auto Pets Feeder
Dependencies: mbed RangeFinder ESP8266 HC_SR04_Ultrasonic_Library
main.cpp@2:c2e622db40aa, 2019-04-30 (annotated)
- 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?
User | Revision | Line number | New 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 | } |