-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathblynk.ts
182 lines (141 loc) · 5.89 KB
/
blynk.ts
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
/*******************************************************************************
* Functions for Blynk
*
* Company: Cytron Technologies Sdn Bhd
* Website: http://www.cytron.io
* Email: [email protected]
*******************************************************************************/
namespace esp8266 {
// Flag to indicate whether the blynk data was updated successfully.
let blynkUpdated = false
// Blynk servers.
let blynkServers = ["blynk.cloud", "fra1.blynk.cloud", "lon1.blynk.cloud",
"ny3.blynk.cloud", "sgp1.blynk.cloud", "blr1.blynk.cloud", "iot.serangkota.go.id"]
/**
* Return true if Blynk data was updated successfully.
*/
//% subcategory="Blynk"
//% weight=30
//% blockGap=8
//% blockId=esp8266_is_blynk_data_updated
//% block="Blynk updated"
export function isBlynkUpdated(): boolean {
return blynkUpdated
}
/**
* Read from Blynk and return the pin value as string.
* @param authToken Blynk's authentification token.
* @param pin Pin we want to read.
*/
//% subcategory="Blynk"
//% weight=29
//% blockGap=8
//% blockId=esp8266_read_blynk
//% block="read Blynk: Token %authToken Pin %pin"
export function readBlynk(authToken: string, pin: string): string {
let value = ""
// Reset the upload successful flag.
blynkUpdated = false
// Make sure the WiFi is connected.
if (isWifiConnected() == false) return value
// Loop through all the blynk servers.
for (let i = 0; i < blynkServers.length; i++) {
// Connect to Blynk.
if (sendCommand("AT+CIPSTART=\"TCP\",\"" + blynkServers[i] + "\",80", "OK", 5000) == true) {
// Construct the data to send.
// http://blynk.cloud/external/api/get?token={token}&{pin}
let data = "GET /external/api/get?token=" + authToken + "&" + pin + " HTTP/1.1\r\n"
// Send the data.
sendCommand("AT+CIPSEND=" + (data.length + 2), "OK")
sendCommand(data)
// Verify if "SEND OK" is received.
if (getResponse("SEND OK", 5000) != "") {
// Make sure Blynk response is 200.
if (getResponse("HTTP/1.1", 5000).includes("200 OK")) {
// Get the pin value.
// It should be the last line in the response.
while (true) {
let response = getResponse("", 200)
if (response == "") {
break
} else {
value = response
}
}
// Set the upload successful flag.
blynkUpdated = true
}
}
}
// Close the connection.
sendCommand("AT+CIPCLOSE", "OK", 1000)
// If blynk is updated successfully.
if (blynkUpdated == true) {
// Rearrange the Blynk servers array to put the correct server at first location.
let server = blynkServers[i]
blynkServers.splice(i, 1)
blynkServers.unshift(server)
break
}
}
return value
}
/**
* Write to Blynk.
* @param authToken Blynk's authentification token.
* @param pin Write to this pin.
* @param value Value of the pin.
*/
//% subcategory="Blynk"
//% weight=28
//% blockGap=8
//% blockId=esp8266_write_blynk
//% block="write Blynk: Token %authToken Pin %pin Value %value"
export function writeBlynk(authToken: string, pin: string, value: string) {
// Reset the upload successful flag.
blynkUpdated = false
// Make sure the WiFi is connected.
if (isWifiConnected() == false) return
// Loop through all the blynk servers.
for (let i = 0; i < blynkServers.length; i++) {
// Connect to Blynk.
if (sendCommand("AT+CIPSTART=\"TCP\",\"" + blynkServers[i] + "\",80", "OK", 5000) == true) {
// Construct the data to send.
// http://blynk.cloud/external/api/update?token={token}&{pin}={value}
let data = "GET /external/api/update?token=" + authToken + "&" + pin + "=" + formatUrl(value) + " HTTP/1.1\r\n"
// Send the data.
sendCommand("AT+CIPSEND=" + (data.length + 2), "OK")
sendCommand(data)
// Verify if "SEND OK" is received.
if (getResponse("SEND OK", 5000) != "") {
// Make sure Blynk response is 200.
if (getResponse("HTTP/1.1", 5000).includes("200 OK")) {
// Get the pin value.
// It should be the last line in the response.
while (true) {
let response = getResponse("", 200)
if (response == "") {
break
} else {
value = response
}
}
// Set the upload successful flag.
blynkUpdated = true
}
}
}
// Close the connection.
sendCommand("AT+CIPCLOSE", "OK", 1000)
// If blynk is updated successfully.
if (blynkUpdated == true) {
// Rearrange the Blynk servers array to put the correct server at first location.
let server = blynkServers[i]
blynkServers.splice(i, 1)
blynkServers.unshift(server)
break
}
}
return
}
}