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. iOS 14 egret 游戏卡顿问题分析和部分解决办法

    现象 总体而言,iOS 14 渲染性能变差,可以从以下三个测试看出. 测试1:简单demo,使用egret引擎显示3000个图(都是同一个100*100 png 纹理),逐帧做旋转.(博客园视频播放可 ...

  2. SpringBoot连接多数据源(HBASE,KUDU,ORACLE集成和开发库)

    前提:1.连接hadoop需要本地安装 winutils.exe 并在程序指定,不然程序会报错  IOException: HADOOP_HOME or hadoop.home.dir are not ...

  3. 企业微信公众号告警Python脚本

    #!/usr/bin/env python # -*- coding: utf-8 -*- import time import requests import json import os impo ...

  4. 【HNOI】分数分解

    题意描述 近来 IOI 专家们正在进行一项有关整数方程的研究,研究涉及到整数方程解集的统计问题,问题是这样的. 对任意的正整数 \(n\),我们有整数方程: \[\frac{1}{x_1}+\frac ...

  5. leetcode75:search-a-2d-matrix

    题目描述 请写出一个高效的在m*n矩阵中判断目标值是否存在的算法,矩阵具有如下特征: 每一行的数字都从左到右排序 每一行的第一个数字都比上一行最后一个数字大 例如: 对于下面的矩阵: [ [1, 3, ...

  6. LDA与PCA

    参考: https://www.cnblogs.com/pinard/p/6244265.html https://blog.csdn.net/qq_25680531/article/details/ ...

  7. Java安全之JNDI注入

    Java安全之JNDI注入 文章首发:Java安全之JNDI注入 0x00 前言 续上篇文内容,接着来学习JNDI注入相关知识.JNDI注入是Fastjson反序列化漏洞中的攻击手法之一. 0x01 ...

  8. Sentinel 的一些小扩展

    随着微服务的流行,服务和服务之间的稳定性变得越来越重要.Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制.熔断降级.系统自适应保护等多个维度来帮助您保障微服务的稳定 ...

  9. Jenkins - Linux下启动Jenkins报错hudson.WebAppMain#contextDestroyed: Shutting down a Jenkins instance that was still starting up

    报错截图 在Linux下直接运行jenkins.war报错,导致启动失败 报错原因 运行端口已被其他进程占用 解决方法 换个启动端口就可以啦!

  10. VGA详解及色块碰撞示例

    引言 VGA:video Graphics array,视频图形阵列,阴极射线显像管(CRT)显示器时代产物,很多老显卡.笔记本电脑.投影仪所用接口,已经比较过时. CRT是模拟设备,所以VGA也采用 ...