NodeMCU e o uso de APIs
Os principais itens usados nesse video são:
x
1
#include "SerialDisplay.h"
2
#include "ArduinoJson.h"
3
#include "ESP8266WiFi.h"
4
#include "WiFiClientSecure.h"
5
6
char ssid[] = "NOME-DA-SUA-REDE-WIFI-AQUI"; // sua rede wifi
7
char password[] = "SENHA-DA-SUA-REDE-WIFI-AQUI"; // sua senha
8
char channelId[] = "ID-DO-SEU-CANAL"; // ID do seu canal
9
char apiKey[] = "CHAVE-DA-API"; // chave da API
10
11
SerialDisplay displays(14, 12, 10); // (data D5, clock D6, qtde de modulos)
12
13
WiFiClientSecure client;
14
15
String mensagemAnterior = "";
16
17
void setup() {
18
for (int x = 1; x < 11; x++) {
19
displays.Print(1, x);
20
}
21
22
Serial.begin(9600);
23
WiFi.mode(WIFI_STA);
24
WiFi.disconnect();
25
delay(100);
26
WiFi.begin(ssid, password);
27
while (WiFi.status() != WL_CONNECTED) {
28
Serial.print(".");
29
delay(500);
30
}
31
IPAddress ip = WiFi.localIP();
32
Serial.println(ip);
33
34
client.setInsecure(); // necessario para algumas versoes do ESP8266 para Arduino
35
}
36
37
void loop() {
38
checarInscritos();
39
delay(10000); // checa inscritos de 10 em 10 segundos
40
}
41
42
void checarInscritos() {
43
client.flush();
44
client.setTimeout(10000);
45
if (!client.connect("www.googleapis.com", 443)) { // 443: YouTube API SSL Port
46
Serial.println("Nao consegui conexao a API");
47
return;
48
} else {
49
Serial.println("Consegui conexao a API");
50
}
51
String chamarAPI = "GET https://www.googleapis.com/youtube/v3/channels?part=statistics&id=";
52
chamarAPI += channelId;
53
chamarAPI += "&key=";
54
chamarAPI += apiKey;
55
chamarAPI += " HTTP/1.1";
56
client.println(chamarAPI);
57
client.println(F("Connection: close"));
58
if (client.println() == 0) {
59
return;
60
}
61
char status[32] = {0};
62
client.readBytesUntil('\r', status, sizeof(status));
63
if (strcmp(status, "HTTP/1.1 200 OK") != 0) {
64
return;
65
}
66
// Skip HTTP headers
67
char endOfHeaders[] = "\r\n\r\n";
68
if (!client.find(endOfHeaders)) {
69
return;
70
}
71
String resposta = "";
72
while (client.available()) {
73
char c = client.read();
74
resposta += c;
75
}
76
String resposta_final = resposta.substring(3);
77
Serial.print("Resposta:");
78
Serial.println(resposta_final);
79
// Allocate JsonBuffer
80
// Use arduinojson.org/assistant to compute the capacity.
81
const size_t capacity = JSON_ARRAY_SIZE(1) + JSON_OBJECT_SIZE(1) + 2 * JSON_OBJECT_SIZE(4) + JSON_OBJECT_SIZE(5) + 300;
82
DynamicJsonDocument doc(capacity);
83
84
deserializeJson(doc, resposta_final);
85
86
JsonObject items_0 = doc["items"][0];
87
JsonObject items_0_statistics = items_0["statistics"];
88
const char* numero_de_inscritos = items_0_statistics["subscriberCount"]; // "53200"
89
90
String mensagem = numero_de_inscritos;
91
Serial.print("Numero de inscritos: ");
92
Serial.println(mensagem);
93
94
if (mensagem != mensagemAnterior) {
95
for (int cont = 0; cont <= 10 ; cont++) {
96
if (mensagem.length() >= cont + 1) {
97
displays.Print(mensagem[cont], cont + 1);
98
delay(10);
99
} else {
100
displays.Off(cont + 1); // apaga displays que nao estiverem sendo usados
101
}
102
}
103
mensagemAnterior = mensagem;
104
}
105
106
// Disconnect
107
client.stop();
108
}