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)系统方案安全篇(来看一下怎么样监听网络数据,监听电脑上位机软件的数据) 因为那个软件只能监听咱自己电脑上的数据,所以咱就用电 ...
随机推荐
- 【源码】spring循环引用
spring在单例,非构造方法注入的情况下允许循环依赖 1.循环依赖 a引用b,b引用a.a创建的时候需要b,但是b没有创建,需要先去创建b,b创建的时候又没有a,这就出现的循环依赖的问题 2.为什么 ...
- 循序渐进VUE+Element 前端应用开发(25)--- 各种界面组件的使用(1)
在我们使用Vue+Element开发前端的时候,往往涉及到很多界面组件的使用,其中很多直接采用Element官方的案例即可,有些则是在这个基础上封装更好利用.更少代码的组件:另外有些则是直接采用第三方 ...
- 【Luogu】P1306 斐波那契公约数 题解
原题链接 嗯...很多人应该是冲着这个标题来的 (斐波那契的魅力) 1.分析题面 点开题目,浏览一遍题目,嗯?这么简单?还是蓝题? 再看看数据范围,感受出题人深深的好意... \(n,m \leq 1 ...
- mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 微信小程序获取二维码API
<%@ WebHandler Language="C#" Class="ce" %> using System; using System.Web; ...
- MySQL 使用规范总结
MySQL已经成为世界上最受欢迎的数据库管理系统之一,无论是用在小型开发项目上,还是用在构建那较大型的网站,MySQL都用实力证明了自己是一个稳定.可靠.快速.可信的系统,足以胜任任何数据存储业务的需 ...
- C#两行代码实现三维地球
一. 为什么要用三维地球? 三维地球是地理信息技术的一个重要发展方向,相比较二维地图技术,三维地球最大的特点是更直观更形象地表达地理信息和空间上的方位.我们可以在三维气象模拟. ...
- iptables-centos|mysql navicat登陆不上
iptables-centos: vi /etc/sysconfig/iptables service iptables restart ====================== mysql na ...
- 僵尸进程与SIGCHLD信号
什么是僵尸进程? 首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区,关闭所有打开的文件等,但内核为每一个终止子进程保存了一定量的信息.这些信息至少包括进程ID,进程的终止状态,以及该 ...
- Linux_end
1.ps 查看进程 ps 查看进程 ps aux 查看所有进程 ps -ef 查看所有进程的详细信息 2.pstree 查看进程树 3.top 查看系统的健康状况 4.netstar 显示网络统计信息 ...