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. 从APT攻击中学习

    0x01. 什么是APT? 可以看出APT攻击,叫高级可持续威胁攻击,也称为定向威胁攻击:什么是定向,也就是指定目标行业而发起进攻 这边又提到供应链和社会工程学,那是什么? 社会工程学,也就是社工,通 ...

  2. Redis---05主从复制(一般模式)

    一.什么是主从复制 主机数据更新后根据配置和策略,自动同步到备机的master/slaver机制,Master以写为主,Slave以读为主 二.用处 读写分离,性能扩展:容灾快速恢复 三.主从配置 1 ...

  3. JAVA类库之——Math类(持续更新)

    Math类 目录 Math类 1.Math 类中的常量方法 返回π(圆周率)值的方法:PI 返回E(自然对数低)值的方法:E 2.Math 类中的三角函数方法 计算正弦函数值的方法:Sin(radia ...

  4. Java学习的第五十五天

    1.例11.1继承学生类 import java.util.Scanner; import java.util.*; public class Cjava { public static void m ...

  5. python制作电脑可执行exe文件

    python获取IP.主机名.mac地址 关注公众号"轻松学编程"了解更多. 制作get_IP.py文件: import socket import uuid # 获取主机名 ho ...

  6. python框架Django使用xadmin管理后台数据

    Django使用xadmin管理后台数据 关注公众号"轻松学编程"了解更多. 作用:xadmin比Django内置的admin更美观.更方便. 一.导入xadmin(第三方库) 方 ...

  7. Python之使用pip安装三方库Error:Could not find a version that satisfies the requirement <package>(from versions: none),No matching distribution found for <package>

    出现多次使用pip安装包时提示以下报错: ERROR: Could not find a version that satisfies the requirement <package> ...

  8. Go之发送钉钉和邮箱

    smtp发送邮件 群发两个邮箱,一个163,一个QQ package main import ( "fmt" "net/smtp" "strings& ...

  9. 【Kata Daily 190909】The Supermarket Queue(超市队列)

    题目: There is a queue for the self-checkout tills at the supermarket. Your task is write a function t ...

  10. PhpExcel PhpSpreadsheet 锁定单元格 正确做法!!

    首先声明 PhpExcel 已经停止更新,转而代之的是 PhpSpreadsheet : 但是 !!不必担心 PhpSpreadsheet 包含了大部分的 PhpExcel 的功能 : //code ...