• 首先是联网(下面是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即可。