1.png
說明
太久沒更新博文了锣笨,生活和工作讓我迷失了方向,一直都停滯不前乎婿〔饨可能是過完年口袋里又沒錢了,又想起來要努力了吧谢翎,從新開始更新博客內(nèi)容捍靠。
這次給大家?guī)硗ㄟ^8266 + SSD1306顯示屏來顯示bilibili粉絲數(shù)量,這個其實(shí)網(wǎng)上都能找到一大把森逮,但是我還是貢獻(xiàn)一篇較為完整的內(nèi)容吧榨婆。
接線圖
我買的是下圖這種四腳的SSD1306顯示屏
接線方式如下:
GND—G
VCC—3V
SCL—D1
SDA—D2
接線圖如下:
3.png
代碼
獲取代碼之前,需要先去獲取B站用戶的UID褒侧,這個點(diǎn)到UP主的主頁良风,瀏覽器地址欄就可以看到。
如:https://space.bilibili.com/385237224
闷供,其中【385237224】就是我的bilibili粉絲UID烟央,將代碼中的UID改成自己的即可。注意:代碼燒錄過程中可能會報缺少庫的錯誤歪脏,這些【
ArduinoJson
,Adafruit_GFX
,Adafruit_SSD1306
】庫是需要自己手動去搜索庫文件安裝一下就可以了疑俭。
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include <ArduinoJson.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFiClientSecureBearSSL.h>
#define SCREEN_WIDTH 128 // OLED顯示器寬度(像素)
#define SCREEN_HEIGHT 64 // OLED顯示器高度(像素)
// 初始化SSD1306
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
const uint8_t fingerprint[20] = {0x40, 0xaf, 0x00, 0x6b, 0xec, 0x90, 0x22, 0x41, 0x8e, 0xa3, 0xad, 0xfa, 0x1a, 0xe8, 0x25, 0x41, 0x1d, 0x1a, 0x54, 0xb3};
// 這里設(shè)置B站的用戶ID
#define BILIBILI_UID 385237224
ESP8266WiFiMulti WiFiMulti;
void setup() {
Serial.begin(115200);
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306初始化失敗"));
while (true) {};
}
display.clearDisplay();
display.setTextColor(WHITE);
// 開始連接wifi
WiFi.mode(WIFI_STA);
WiFiMulti.addAP("你家wifi名稱,只支持2.4Gwifi", "你加wifi密碼");
}
void loop() {
// 等待WiFi連接
if ((WiFiMulti.run() == WL_CONNECTED)) {
std::unique_ptr<BearSSL::WiFiClientSecure>client(new BearSSL::WiFiClientSecure);
client->setFingerprint(fingerprint);
client->setInsecure();
HTTPClient http;
Serial.print("開始調(diào)用接口獲取bilibili粉絲接口婿失!\n");
http.begin(*client, "https://api.bilibili.com/x/relation/stat?vmid=" + BILIBILI_UID);
int httpCode = http.GET();
// 出錯時httpCode將為負(fù)數(shù)
if (httpCode > 0) {
// HTTP標(biāo)頭已發(fā)送钞艇,服務(wù)器響應(yīng)標(biāo)頭已處理
Serial.printf("[HTTP]code: %d\n", httpCode);
if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
String json = http.getString();
Serial.println(json);
DynamicJsonDocument doc(2048);
deserializeJson(doc, json);
// 獲取bilibili粉絲數(shù)量
long follower = doc["data"]["follower"];
showBilibiliFollower(follower);
}
} else {
Serial.printf("[HTTP] 調(diào)用獲取bilibili粉絲接口失敗,失敗原因: %s\n", http.errorToString(httpCode).c_str());
}
http.end();
}
delay(1000);
}
/**
顯示bilibili粉絲數(shù)量
*/
void showBilibiliFollower(long follower) {
// 顯示
display.clearDisplay();
display.setTextSize(4);
display.setCursor(0, 15);
display.print(follower);
//刷新顯示
display.display();
}