-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathESP8266_catfeeder_A4988
227 lines (191 loc) · 7.94 KB
/
ESP8266_catfeeder_A4988
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
//-----------------------------------------------------------------------------//
// Wifi- operated cat feeder //
// by Jannis Ret //
// Version 2.1 - 10.02.2018 //
// for use with Hardware: 3D Printed cat feeder by odwdinc, //
// ESP8266, NEMA 17 Stepper Motor and A4988 Stepper Driver //
//-----------------------------------------------------------------------------//
// Download the Cat feeder STL-files here: https://www.thingiverse.com/thing:688807/
// Big thanks to odwdinc for sharing this awesome 3D Print!
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
const char* ssid = "SSID"; // <------- INSERT YIUR WIFI NAME
const char* password = "PASSWORD"; // <------- INSERT YOUR WIFI PASSWORD
ESP8266WebServer server(80);
const int led = 13;
const int stepPin = 12;
const int dirPin = 14;
const int enable = 16;
void handleRoot() {
String messageroot = "<html><head></head><body style='font-family: sans-serif; font-size: 70px'><b>Welcome to the WIFI-operated cat feeder!</b><br><br>";
messageroot += "<html><head></head><body style='font-family: sans-serif; font-size: 70px'>Following functions are available:<br><br>";
messageroot += "<a href='/feed'><b>/feed</b></a> feeds the cat.<br><br>";
messageroot += "<a href='/unfeed'><b>/unfeed</b></a> turns anticlockwise.<br><br>";
messageroot += "<a href='/shake'><b>/shake</b></a> shakes the rotor.<br><br>";
messageroot += "<a href='/+1'><b>/+1</b></a> give him a treat.<br><br>";
server.send(200, "text/html", messageroot);
}
void feed(int direct, int turn){ //-------------------------FEED
digitalWrite(dirPin,direct); // Enables the motor to move in a particular direction
digitalWrite(enable,LOW);
for (int Index = 0; Index < turn; Index++){
for(int x = 0; x < 200; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
}
digitalWrite(enable,HIGH);
}
void shake(void){
digitalWrite(enable,LOW);
digitalWrite(dirPin,HIGH);
for(int x = 0; x < 100; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
digitalWrite(enable,HIGH);
delay(100);
digitalWrite(enable,LOW);
digitalWrite(dirPin,LOW);
for(int x = 0; x < 100; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
digitalWrite(enable,HIGH);
delay(100);
digitalWrite(enable,LOW);
digitalWrite(dirPin,HIGH);
for(int x = 0; x < 100; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
digitalWrite(enable,HIGH);
delay(100);
digitalWrite(enable,LOW);
digitalWrite(dirPin,LOW);
for(int x = 0; x < 100; x++) {
digitalWrite(stepPin,HIGH);
delayMicroseconds(500);
digitalWrite(stepPin,LOW);
delayMicroseconds(500);
}
digitalWrite(enable,HIGH);
delay(100);
}
void handleNotFound(){
digitalWrite(led, 1);
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET)?"GET":"POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i=0; i<server.args(); i++){
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
digitalWrite(led, 0);
}
void setup(void){
pinMode(led, OUTPUT);
pinMode(stepPin,OUTPUT);
pinMode(dirPin,OUTPUT);
pinMode(enable,OUTPUT);
/* pinMode(stp, OUTPUT);
pinMode(dir, OUTPUT);
pinMode(ena, OUTPUT);
*/
digitalWrite(enable,HIGH);
digitalWrite(led, 0);
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.println("connecting to: ");
Serial.println(ssid);
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
//--------------------------------------Indicate connection to wifi by blinking the LED blue two times
digitalWrite(led, 1);
delay(500);
digitalWrite(led, 0);
delay(500);
digitalWrite(led, 1);
delay(500);
digitalWrite(led, 0);
//-----------------------------------------
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (MDNS.begin("catfeeder")) {
Serial.println("MDNS responder started");
}
server.on("/", handleRoot);
server.on("/blink", [](){
server.send(200, "text/plain", "led is blinking");
digitalWrite(led, 1);
delay(500);
digitalWrite(led, 0);
delay(500);
digitalWrite(led, 1);
delay(500);
digitalWrite(led, 0);
});
server.on("/feed", [](){
feed(1,3);
shake();
String messagefeed = "<html><head></head><body style='font-family: sans-serif; font-size: 70px'><b>Yo! The Cat has been feeded!</b><br><br>";
messagefeed += "<html><head></head><body style='font-family: sans-serif; font-size: 70px'>Following functions are available:<br><br>";
messagefeed += "<a href='/feed'><b>/feed</b></a> feeds the cat another time.<br><br>";
messagefeed += "<a href='/shake'><b>/shake</b></a> Shake the rotor.<br><br>";
messagefeed += "go <a href='WiFi.localIP()'><b>BACK</b></a></body></html>";
server.send(200, "text/html", messagefeed);
});
server.on("/unfeed", [](){
feed(0,1) ;
String messagefeed = "<html><head></head><body style='font-family: sans-serif; font-size: 70px'><b>Yo! Harald has been feeded!</b><br><br>";
messagefeed += "<html><head></head><body style='font-family: sans-serif; font-size: 70px'>Following functions are available:<br><br>";
messagefeed += "<a href='/unfeed'><b>/unfeed</b></a> unfeeds the cat another time.<br><br>";
messagefeed += "go <a href='WiFi.localIP()'><b>BACK</b></a></body></html>";
server.send(200, "text/html", messagefeed);
});
server.on("/shake", [](){
shake();
String messagefeed = "<html><head></head><body style='font-family: sans-serif; font-size: 70px'><b>Yo! Harald has been feeded!</b><br><br>";
messagefeed += "<html><head></head><body style='font-family: sans-serif; font-size: 70px'>Following functions are available:<br><br>";
messagefeed += "<a href='/feed'><b>/feed</b></a> feeds the cat.<br><br>";
messagefeed += "<a href='/shake'><b>/shake</b></a> Shake the rotor another time.<br><br>";
messagefeed += "go <a href='WiFi.localIP()'><b>BACK</b></a></body></html>";
server.send(200, "text/html", messagefeed);
});
server.on("/+1", [](){
feed(1,1);
String messagefeed = "<html><head></head><body style='font-family: sans-serif; font-size: 70px'><b>Yo! Harald got a treat!</b><br><br>";
messagefeed += "<html><head></head><body style='font-family: sans-serif; font-size: 70px'>Following functions are available:<br><br>";
messagefeed += "<a href='/+1'><b>/+1</b></a> give another one.<br><br>";
messagefeed += "<a href='/feed'><b>/feed</b></a> give him a full bowl.<br><br>";
messagefeed += "go <a href='WiFi.localIP()'><b>BACK</b></a></body></html>";
server.send(200, "text/html", messagefeed);
});
server.onNotFound(handleNotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop(void){
server.handleClient();
}