本文教程是转载
本文教程是转载
本文教程是转载
仅仅当做笔记使用
如有侵权会立即删除
原来视频网址:https://www.bilibili.com/video/av55551802?t=194
以及他的github:
使用ESP-01S模块和1.3"OLED制作Bilibili粉丝数显示器。 关于线路原理图和PCB可以在代码目录中查看。 代码地址: https://github.com/hungtcs-lab/bilibili-follower-viewer ArduinoJSON: https://arduinojson.org/ esp8266-oled-ssd1306: https://github.com/ThingPulse/esp8266-oled-ssd1306
/*
开发环境arduino IDE
*/
#include <SH1106.h>
#include <Ticker.h>
#include <ArduinoJson.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
const char* ssid = "iPhonex";
const char* passwd = "1234567899";
const char* userId = "384495859";
uint8_t count = 0;//起到计时的作用
uint8_t refreshing = 0;//标志型变量,用来标志当前有没有请求数据
/*接下来分别对3个类型进行实例化*/
Ticker ticker;//声明一个系统变量
SH1106 display(0x3C, 2, 0);//实例化一个oled1106驱动库的变量,在变量的函数里我们需要制定i2c的从器件地址,制定SDA和SCL的
HTTPClient http;
//我们来调用显示函数库,用来显示Message
void showMessage(String message = "loading") {
display.clear();
display.setFont(ArialMT_Plain_24);
display.setTextAlignment(TEXT_ALIGN_CENTER);
display.drawString(64, 18, message);
display.display();
}
//判断wifi是否链接
boolean isWIFIConnected() {
return !(WiFi.status() == WL_CONNECT_FAILED || WiFi.status() == WL_CONNECTION_LOST || WiFi.status() == WL_DISCONNECTED);
}
//用来链接wifi,需要传入两个参数,一个是wifi的ssid,一个是passwd
void wifiConnect(const char* ssid, const char* passwd) {
WiFi.begin(ssid, passwd);
Serial.printf("Connecting to %s\n", ssid);
showMessage("Connecting");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.printf("Connected to %s\n", ssid);
}
//请求bilibili粉丝数
uint32_t requestBNumber(const char* userId) {
int httpCode;
http.begin("api.bilibili.com", 80, "/x/relation/stat?vmid=" + String(userId));//请求API接口,接口地址api.bilibili.com,路径/x/relation/stat?vmid,userId,你的账号id
httpCode = http.GET();//接下来就会返回一个数据
if(httpCode == HTTP_CODE_OK) {
DynamicJsonDocument doc(1024);
deserializeJson(doc, http.getString());
JsonObject response = doc.as<JsonObject>();
return response["data"]["follower"].as<uint32_t>();//首先获取dat变量下的follower,然后转成uint32类型,然后返回
} else {
Serial.println(http.getString());
delay(3000);
Serial.printf("start retry....");
if(!isWIFIConnected()) {
wifiConnect(ssid, passwd);
}
return requestBNumber(userId);
}
}
//刷新屏幕用来显示粉丝数
void refreshBNumber() {
uint32_t number = requestBNumber(userId);
showMessage(String(number));
}
//首先开启串口
void setup() {
Serial.begin(115200);
Serial.println();
//利用系统滴答,每一秒给count加1
ticker.attach(1, []() {
count ++;
});
display.init();//初始化显示器
display.flipScreenVertically();//配置显示参数
display.setFont(ArialMT_Plain_10);//配置显示参数
//设置wifi模式为WIFI_STA模式
WiFi.mode(WIFI_STA);
wifiConnect(ssid, passwd);//连接wifi
refreshBNumber();//刷新屏幕
}
//
void loop() {
//判断wifi是否连接成功,如果不成功的话需要重新进行连接
while(!isWIFIConnected()) {
Serial.printf("Reconnecting...\n");
wifiConnect(ssid, passwd);
}
//每30秒请求一次bilibili服务器
if(count % 30 == 0) {
if(refreshing != count) {
refreshing = count;
refreshBNumber();
}
}
}
如果你用的是这种的,那就太好了,直接看一下原理图接线就可以了
但是你用的是下面这种模块化的那么就,需要下面这张图的对照了