- 首先是联网(下面是ESP32联网部分的代码)
void WiFi_Connect()
{
WiFi.begin("Wi-Fi", "1234567890");//此处输入的是自己的wifi账号和密码
while (WiFi.status() != WL_CONNECTED)
{ //这里是阻塞程序,直到连接成功
//(如果连接成功才会进行之后的操作,否则一直在这个循环中进行输出:.)
delay(300);
Serial.print(".");
}
}
- 然后是获取B站粉丝数
这里的B站粉丝数主要是利用HTTP get获取网页信息,但是此信息为json格式,所以要利用deserializeJson函数把json格式解析,从而进行截取打印输出。下面是代码:
void getBiliBiliFollower()
{
HTTPClient http;
http.begin(followerUrl); //HTTP begin
int httpCode = http.GET();//这里的get如果正确的话,httpCode的值为200(可以尝试wireshark抓包看一下)
if (httpCode > 0)
{
// httpCode will be negative on error 如果是负值的话就是error
Serial.printf("HTTP Get Code: %d\r\n", httpCode);
if (httpCode == HTTP_CODE_OK) // 收到正确的内容
{
String resBuff = http.getString();
//resBuff里面存放的是一个json格式,下面还要进行转化
// 输出示例:{"mid":123456789,"following":226,"whisper":0,"black":0,"follower":867}}
Serial.println(resBuff);
// 使用ArduinoJson_6.x版本,具体请移步:https://github.com/bblanchon/ArduinoJson
deserializeJson(doc, resBuff); //开始使用Json解析
follower = doc["data"]["follower"];//在此处得到粉丝数
Serial.printf("Follers: %ld \r\n", follower);
}
}
else
{
Serial.printf("HTTP Get Error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}
- 总代码
#include <Arduino.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include "../lib/ArduinoJson/ArduinoJson.h"
// JOSN是一种轻量级的数据交换格式,遵循一下规则:
// 1.并列的数据之间用逗号(,)分隔
// 2.映射用冒号(:)表示
// 3.并列数据的集合(数组)用方括号([])表示
// 4.映射的集合(对象)用大括号({})表示
// WiFi的初始化和连接
void WiFi_Connect()
{
WiFi.begin("Wi-Fi", "1234567890");//此处输入的是自己的wifi账号和密码
while (WiFi.status() != WL_CONNECTED)
{ //这里是阻塞程序,直到连接成功
//(如果连接成功才会进行之后的操作,否则一直在这个循环中进行输出:.)
delay(300);
Serial.print(".");
}
}
void setup()
{
Serial.begin(115200); // open the serial port at 115200 bps;
delay(100);
Serial.print("Connecting.. ");
WiFi_Connect();
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());//利用这个函数输出当前WiFi的IP地址
}
// bilibili api: follower
String UID = "***";//此处换为自己B站的UID账号
String followerUrl = "http://api.bilibili.com/x/relation/stat?vmid=" + UID; // 粉丝数
long follower = 0; // 粉丝数
DynamicJsonDocument doc(1024);
// 获取粉丝数
void getBiliBiliFollower()
{
HTTPClient http;
http.begin(followerUrl); //HTTP begin
int httpCode = http.GET();//这里的get如果正确的话,httpCode的值为200(可以尝试wireshark抓包看一下)
if (httpCode > 0)
{
// httpCode will be negative on error 如果是负值的话就是error
Serial.printf("HTTP Get Code: %d\r\n", httpCode);
if (httpCode == HTTP_CODE_OK) // 收到正确的内容
{
String resBuff = http.getString();
//resBuff里面存放的是一个json格式,下面还要进行转化
// 输出示例:{"mid":123456789,"following":226,"whisper":0,"black":0,"follower":867}}
Serial.println(resBuff);
// 使用ArduinoJson_6.x版本,具体请移步:https://github.com/bblanchon/ArduinoJson
deserializeJson(doc, resBuff); //开始使用Json解析
follower = doc["data"]["follower"];//在此处得到粉丝数
Serial.printf("Follers: %ld \r\n", follower);
}
}
else
{
Serial.printf("HTTP Get Error: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}
void loop()
{
getBiliBiliFollower();
delay(5000);
delay(5000);
}
- 注意
注意自己的lib库中是否包含ArduinoJson文件 - 扩展
同理,我们还可以用此代码进行获取天气情况,与上面类似。
只要找到获取天气的API即可。