1.实物图

2.原理图

3.Arduino程序

在程序中修改自己的B站UID和自己家的WiFi名称及密码即可。

/*B站粉丝计数器*/
/*************************************************************
ESP8266 with 0.96寸 OLED 引脚
VCC <---> VCC
GND <---> GND
SDA <---> SDA(D4 2)
SCL <---> SCL(D5 14)
*************************************************************/
#if defined(ESP32) //ESP32
#include <WiFi.h>
#include <HTTPClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>
#elif defined(ESP8266) //ESP8266
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#else
#error "Please check your mode setting,it must be esp8266 or esp32."
#endif #include <ArduinoJson.h>
#include <U8g2lib.h>
#include <Wire.h>
#include <Ticker.h>
#include <EEPROM.h> // 定时器
Ticker timer;
int count = 0;
boolean flag = true; // JSON
DynamicJsonBuffer jsonBuffer(256); // ArduinoJson V5 // 显示屏 如果引脚不同需要在这里修改
//U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ 14, /* data=*/ 2); //NODEMCU
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE, /* clock=*/ 2, /* data=*/ 0); //ESP-01 // WiFi 名称与密码
const char *ssid = "xxxxxx"; //这里填你家中的wifi名称
const char *password = "xxxxxx";//这里填你家中的wifi密码 // B 站 API 网址
String NAME = "CaiZi"; //改成自己的名字
String UID = "349576976"; //改成自己的UID
String followerUrl = "http://api.bilibili.com/x/relation/stat?vmid=" + UID; // 粉丝数
String viewAndLikesUrl = "http://api.bilibili.com/x/space/upstat?mid=" + UID; // 播放数、点赞数 int follower = 0; // 粉丝数
int view = 0; // 播放数
int likes = 0; // 获赞数
union long_value //联合体
{
int follower;
byte fans[2];
};
long_value followerE;//声明联合体
byte fan1;
byte fan2; void setup()
{
// OLED初始化
u8g2.begin();
u8g2.enableUTF8Print();
u8g2.clearDisplay();
// EEPROM初始化
EEPROM.begin(512);//开辟512字节的空间
fan1 = EEPROM.read(0);
fan2 = EEPROM.read(1);
followerE.fans[0] = fan1;//赋值给数组
followerE.fans[1] = fan2;
follower = followerE.follower; // 显示上次开机的粉丝数
u8g2.setFontPosTop();
u8g2.firstPage();
do
{
displayNum();
}
while (u8g2.nextPage()); Serial.begin(115200);//设置串口波特率 // WiFi 连接
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected"); timer.attach(600, timerCallback); // 每隔10min
} void loop()
{
while (flag)
{
u8g2.firstPage();
do
{
displayNum();
}
while (u8g2.nextPage());
// 获取粉丝数
getFollower(followerUrl);
// 获取播放数和点赞数
getViewAndLikes(viewAndLikesUrl);
flag = false;
}
} // OLED 显示数据
void displayNum()
{
// u8g2.clearDisplay();
u8g2.setFont(u8g2_font_osb41_tn);//设置41*41字体
u8g2.setCursor(0, 8);
u8g2.print(String(follower));
// u8g2.setFont(u8g2_font_wqy12_t_gb2312b);//设置12*12字体
// u8g2.setCursor(0, 0);
// u8g2.print(" Bilibili " + String(NAME)); //改成自己的名字
// u8g2.setCursor(0, 38);
// u8g2.print("获赞数:" + String(likes));
// u8g2.setCursor(0, 52);
// u8g2.print("播放数:" + String(view));
} // 定时器回调函数
void timerCallback()
{
flag = true;
} // 获取 B 站粉丝数
void getFollower(String url)
{
HTTPClient http;
http.begin(url); int httpCode = http.GET();
Serial.printf("[HTTP] GET... code: %d\n", httpCode); if (httpCode == 200)
{
Serial.println("获取粉丝数成功!");
String resBuff = http.getString();
// Serial.println(resBuff);
// ---------- ArduinoJson V5 ----------
JsonObject &root = jsonBuffer.parseObject(resBuff);
if (!root.success())
{
Serial.println("parseObject() failed");
return;
}
follower = root["data"]["follower"]; followerE.follower = follower;
EEPROM.write(0, followerE.fans[0]); //EEPROM.write(位置,数据)
EEPROM.write(1, followerE.fans[1]); //分成两字节存储
EEPROM.commit(); //commit Serial.print("粉丝数: ");
Serial.println(follower);
}
else
{
Serial.printf("[HTTP] GET... failed, error: %d\n", httpCode);
} http.end();
} // 获取 B 站播放数与获赞数
void getViewAndLikes(String url)
{
HTTPClient http;
http.begin(url); int httpCode = http.GET();
Serial.printf("[HTTP] GET... code: %d\n", httpCode); if (httpCode == 200)
{
Serial.println("获取播放数、点赞数成功!");
String resBuff = http.getString();
// Serial.println(resBuff); JsonObject &root = jsonBuffer.parseObject(resBuff);
if (!root.success())
{
Serial.println("parseObject() failed");
return;
} view = root["data"]["archive"]["view"];
likes = root["data"]["likes"];
Serial.print("点赞数: ");
Serial.println(likes);
Serial.print("播放数: ");
Serial.println(view);
}
else
{
Serial.printf("[HTTP] GET... failed, error: %d\n", httpCode);
} http.end();
}

4.烧录程序

可以参考笔者的这篇博客:https://www.cnblogs.com/cai-zi/p/13942615.html

将ESP8266与USB-TTL按照下面的接线图进行连接。最好使用下面这种免冷启动的(那种冷启动的下载器可能下载不了程序)。

  UTXD—–RXD

  URXD—–TXD

  CH_PD—-3.3v

  VCC——-3.3V

  GND——GND

  GPIO0—–GND

将连接好ESP8266的USB-TTL插在电脑上,对IDE进行如下设置:

你可以上传ESP8266WIFI的相关程序了。

  注意事项

  1.esp8266-01板对电压的要求很高,烧写时电源一定要采用3.3V左右。

  2.如果代码无法上传,并显示警告,请检查USB-TTL是否良好(某些USB-TTL烧写时无法打开串口,导致上传失败)。

  3.ESP8266与USB-TTL需要RX,TX交叉连接。

  4.CH_PD这个引脚无论是烧程序也好,烧完程序应用也好,都要接3.3V。

  5.GPIO0这个引脚在烧程序的时候必须接GND(接低电平),烧完程序后想要进行应用的话,必须将这个引脚拉高或者悬空。

参考:https://zhuanlan.zhihu.com/p/136243798

ESP8266 ESP-01制作B站粉丝计数器 | Arduino IDE开发ESP8266 | ESP8266存储读取用户数据的更多相关文章

  1. ESP8266开发之旅 基础篇③ ESP8266与Arduino的开发说明

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  2. ESP8266开发之旅 进阶篇② 闲聊Arduino IDE For ESP8266烧录配置

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  3. ECSHOP通过改变模板路径制作手机站

    ECSHOP通过改变模板路径制作手机站 前提:不使用ECSHOP自带的mobile目录程序来制作手机站. 目的:手机站做成自动识别,通过改变模板路径来显示PC站或手机站. 待续

  4. Arduino IDE搭建ESP8266开发环境,文件下载过慢解决方法 | ESP-01制作WiFi开关教程,改造宿舍灯

    1. Arduino IDE配置ESP8266环境 参考:https://www.jianshu.com/p/cb0274d612b5 首先从 Arduino 官网 下载最新版本的 Arduino I ...

  5. Arduino IDE for ESP8266 项目(1) 点亮灯+按键LED+pwm

    官方文档 http://esp8266.github.io/Arduino/versions/2.1.0/doc/libraries.html 引脚口说明 http://yfrobot.com/thr ...

  6. Arduino IDE for ESP8266 ()esp8266项目 WIFI攻击器

    https://www.wandianshenme.com/play/esp8266-nodemcu-create-portable-wifi-jammer/ 使用 ESP8266 制作 WiFi 干 ...

  7. 4-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(为域名申请SSl证书)

    3-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(购买域名,域名绑定IP) 然后就是等着..... 假设可以了 咱呢是配置MQTT实现SSL安全加密通信,所以 ...

  8. 3-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(购买域名,域名绑定IP)

    2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(监听Wi-Fi和APP的数据) 因为安全连接是和域名绑在一块的,所以需要申请域名 有没有不知道域名是什么的, ...

  9. 2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(监听Wi-Fi和APP的数据)

    1-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(来看一下怎么样监听网络数据,监听电脑上位机软件的数据) 因为那个软件只能监听咱自己电脑上的数据,所以咱就用电 ...

随机推荐

  1. 【转】Liunx常用命令详解

    Liuux命令查询入口 Linux命令 - 系统信息 命令代码 注释说明 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 ...

  2. java安全编码指南之:序列化Serialization

    目录 简介 序列化简介 注意serialVersionUID writeObject和readObject readResolve和writeReplace 不要序列化内部类 如果类中有自定义变量,那 ...

  3. NB-IOT基站的优势和特点

    NB-IOT基站是什么        NB-IOT基站的主要目的是完成移动通信网和UE之间的通信和管理功能,在移动通信中是组成蜂窝小区最基本的单元.只有在基站信号的覆盖范围之内通过运营商网络连接的NB ...

  4. 【Java GC系列】垃圾收集简介(1)

    说明: 在本文中, Garbage Collection 翻译为 "垃圾收集", garbage collector 翻译为 "垃圾收集器"; 一般认为, 垃圾 ...

  5. C# 泛型的协变

    class Program { static void Main(string[] args) { Person person = new Person(); Person chinese2 = ne ...

  6. 我的第二次C语言作业

    这个作业属于哪个课程 https://edu.cnblogs.com/campus/zswxy/SE2020-2/homework/11422 这个作业要求在哪里 https://www.cnblog ...

  7. 直播软件开发如何使用FFMPEG推流并保存在本地

    最近开发了基于C#的直播软件开发推流器一直不大理想,终于在不懈努力之后研究了一点成果,这边做个笔记:本文着重在于讲解下如何使用ffmpeg进行简单的推流,看似简单几行代码没有官方的文档很吃力.并获取流 ...

  8. c#练习习题:while循环

    2006年培养学员80000人,每年增长25%,请问按此增长速度,到哪一年培训学员人数将达到20万人? int count = 80000; int year = 2006; while (count ...

  9. Docker学习—Machine

    前言 前面<Docker学习-Compose>文中介绍了Compose的使用方式:接下来继续了解docker三剑客之一的 Machine: 一.Docker Machine简介 1.什么是 ...

  10. 实验3ss

    1.实验任务1 #include <math.h> #include <stdio.h> int main() { float a,b,c,x1,x2; float delta ...