ESP8266 ESP-01制作B站粉丝计数器 | Arduino IDE开发ESP8266 | ESP8266存储读取用户数据
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存储读取用户数据的更多相关文章
- ESP8266开发之旅 基础篇③ ESP8266与Arduino的开发说明
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- ESP8266开发之旅 进阶篇② 闲聊Arduino IDE For ESP8266烧录配置
授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...
- ECSHOP通过改变模板路径制作手机站
ECSHOP通过改变模板路径制作手机站 前提:不使用ECSHOP自带的mobile目录程序来制作手机站. 目的:手机站做成自动识别,通过改变模板路径来显示PC站或手机站. 待续
- Arduino IDE搭建ESP8266开发环境,文件下载过慢解决方法 | ESP-01制作WiFi开关教程,改造宿舍灯
1. Arduino IDE配置ESP8266环境 参考:https://www.jianshu.com/p/cb0274d612b5 首先从 Arduino 官网 下载最新版本的 Arduino I ...
- Arduino IDE for ESP8266 项目(1) 点亮灯+按键LED+pwm
官方文档 http://esp8266.github.io/Arduino/versions/2.1.0/doc/libraries.html 引脚口说明 http://yfrobot.com/thr ...
- Arduino IDE for ESP8266 ()esp8266项目 WIFI攻击器
https://www.wandianshenme.com/play/esp8266-nodemcu-create-portable-wifi-jammer/ 使用 ESP8266 制作 WiFi 干 ...
- 4-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(为域名申请SSl证书)
3-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(购买域名,域名绑定IP) 然后就是等着..... 假设可以了 咱呢是配置MQTT实现SSL安全加密通信,所以 ...
- 3-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(购买域名,域名绑定IP)
2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(监听Wi-Fi和APP的数据) 因为安全连接是和域名绑在一块的,所以需要申请域名 有没有不知道域名是什么的, ...
- 2-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(监听Wi-Fi和APP的数据)
1-STM32物联网开发WIFI(ESP8266)+GPRS(Air202)系统方案安全篇(来看一下怎么样监听网络数据,监听电脑上位机软件的数据) 因为那个软件只能监听咱自己电脑上的数据,所以咱就用电 ...
随机推荐
- 打造跨平台.NET Core后台服务
续之前讲的在TopShelf上部署ASP.NET Core程序,作为后台服务运行,自从.NET Core 3.0出现以后,出现了自带的Generic Host,使得自托管服务变为可能.这种方式和Top ...
- STM32入门系列-启动文件介绍
在启动文件内部使用的都是汇编语言,这个文件的作用是负责执行微控制器从"复位"到"开始执行 main 函数"中间这段启动时间所必须进行的工作.它完成的具体工作有: ...
- JAVA学习第一阶段(2)
21. ArrayList类和LinkList类 注意:add,contains,remove,retain(取交集) 都可以+all表示对集合的操作 ArrayList c = new ArrayL ...
- How to use vscode to build a springboot project
How to use vscode to build a springboot project 首先截图一个springboot官网的一个教程说明截图.可以根据这里的指南去创建一个HelloWorld ...
- css 两边宽度固定中间自适应宽度
#content_left{ //左 width:73px; height:100px; vertical-align:middle; margin-right:-100px; float:lef ...
- 14 RPC
14 RPC RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC协议假定某些 ...
- 双十一,就用turtle画个单身狗送给自己
今年的双十一到了 但还有谁记得双十一是 单身狗的节日 单身狗的我是时候站出来 捍卫自己的权益了 单身是一种怎样的状态? 我们所有人都单身过,但也许只有很少的人真正体验过. 短视频内容完全是假的,全程是 ...
- 下载DirectX SDK (June 2010)的地址记录
从微软官方下载 https://www.microsoft.com/en-us/download/details.aspx?id=6812 下载后截图
- 创建ABP Angular客户端(二)使用模板创建Angular前端
现在我们使用ABP CLI创建Angular客户端. 首先,进入控制台,创建一个空目录,进入这个目录,执行: abp new ZL.Test -u angular 这里我们使用与上一个系列相同的项目名 ...
- Spider--补充--Re模块_1
# @ Author : Collin_PXY # 正则表达式: import re # 1,分步写法: # 1)rule.search(string) pattern='各小区' rule=re.c ...