-
Notifications
You must be signed in to change notification settings - Fork 0
/
sketch.ino
134 lines (111 loc) · 3.18 KB
/
sketch.ino
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
#include <ESP8266WiFi.h>
#include <Servo.h>
// Wi-Fiアクセスポイントの情報
const char* ssid = "SSID is required";
const char* password = "PASS is required";
// APIエンドポイントの情報
const char* host = "API server hostname is required";
const int port = 80;
const char* roomid = "ROOM ID is required";
const String url = String("/api/meetings/") + roomid + "/pow";
const int pollingIntervalSec = 30;
// サーボモーターの情報
const int servoPin = 12;
const int servoDelay = 20;
const int repeatCount = 5;
Servo servo;
void setup() {
Serial.begin(115200);
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
servo.attach(servoPin);
servo.write(90);
}
int value = 0;
boolean wasNotified = false;
void loop() {
delay(pollingIntervalSec * 1000);
++value;
Serial.print("connecting to ");
Serial.println(host);
// Use WiFiClient class to create TCP connections
WiFiClient client;
const int httpPort = port;
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
Serial.print("Requesting URL: ");
Serial.println(url);
// This will send the request to the server
client.print(String("GET ") + url + " HTTP/1.1\r\n" +
"Host: " + host + "\r\n" +
"Connection: close\r\n\r\n");
unsigned long timeout = millis();
while (client.available() == 0) {
if (millis() - timeout > 5000) {
Serial.println(">>> Client Timeout !");
client.stop();
return;
}
}
// Read all the lines of the reply from server and print them to Serial
while (client.available()) {
String line = client.readStringUntil('\n');
if (line == "\r") {
Serial.println("headers received");
break;
}
Serial.println(line);
}
String line = client.readStringUntil('\n');
Serial.println();
Serial.println("reply was:");
Serial.println("==========");
Serial.println(line);
Serial.println("==========");
if (line.startsWith("{\"notification\":true}")) {
if (!wasNotified) {
Serial.println("The meeting will soon be over!");
for (int angle = 90; angle >= 20; angle--) {
servo.write(angle);
delay(servoDelay);
}
}
wasNotified = true;
// サーボモーターを回転させてハトを出す
for (int i = 0; i < repeatCount; i++) {
for (int angle = 20; angle <= 90; angle++) {
servo.write(angle);
delay(servoDelay);
}
for (int angle = 90; angle >= 20; angle--) {
servo.write(angle);
delay(servoDelay);
}
}
} else {
if (wasNotified) {
Serial.println("The meeting has been over!");
wasNotified = false;
// サーボモーターを回転させてハトを帰す
for (int angle = 20; angle <= 90; angle++) {
servo.write(angle);
delay(servoDelay);
}
}
}
}