物联网开发(二)-利用ESP8266制作一个B站粉丝显示器(牛刀小试)

Kirima ·
更新时间:2024-05-15
· 827 次阅读

文章目录利用ESP8266制作一个B站粉丝显示器(牛刀小试)所需材料:一块ESP8266开发板+0.96寸OLED+一根USB线+一台电脑1.Arduino开发环境搭建2.安装所需库文件3.打开项目-->加载库-->管理库3.添加esp8266库4.下载ESP8266离线安装包5.添加OLED显示相关的库文件6.将如下代码直接复制到你的工程中7.修改完成之后点之记编译上传 利用ESP8266制作一个B站粉丝显示器(牛刀小试)

对于一个刚进入物联网的小白来说。esp8266无非是很好地入门工具。
本篇博文就是利用ESP8266制作一个B站粉丝显示器。效果如下:
在这里插入图片描述
这里你不需要跟我一样用这种开发板,就那种10几块钱的小板子加上0.96寸的OLED就可以了。

所需材料:一块ESP8266开发板+0.96寸OLED+一根USB线+一台电脑 1.Arduino开发环境搭建

这里说一下我为啥用Arduino,因为esp8266支持SDK开发和AT指令开发。单这两种开发前者难度较大,后者需要额外的单片机,正好我疫情在家没有材料,只好买了这个集成了OLED和DHT11的开发板。
Arduino开发环境搭建请参考我上一篇文章:物联网开发(一)-Arduino开发环境搭建

2.安装所需库文件

1.打开文件–>首选项。在附加开发板管理器中添加:http://arduino.esp8266.com/stable/package_esp8266com_index.json
在这里插入图片描述

3.打开项目–>加载库–>管理库

在这里插入图片描述

3.添加esp8266库

搜索之后安装,但是在这里很能安装不成功,因为服务器在国之外但是我们可以采用离线下载的方式。
在这里插入图片描述

4.下载ESP8266离线安装包

点击下载 下载完成之后(这是一个.exe可执行文件)直接点之记安装即可。安装完成之后就会出现ESP8266的库了,选在对应型号的开发板,我们这里选择NodeMCU 1.0
在这里插入图片描述

5.添加OLED显示相关的库文件

链接:https://pan.baidu.com/s/1NJ0ckIc7lVUnGBFNtScyLw 提取码:37qq

将文件下载完成之后,将这三个文件解压之后直接放到下面这个路径的libraries文件中。
在这里插入图片描述
在这里插入图片描述

6.将如下代码直接复制到你的工程中 /************************************************************* ESP8266 with 0.96inch OLED 引脚 VCC VCC GND GND SDA SDA(2) SCL SCL(14) *************************************************************/ #if defined(ESP32) //ESP32 #include #include #include #include #elif defined(ESP8266) //ESP8266 #include #include #include #include #else #error "Please check your mode setting,it must be esp8266 or esp32." #endif #include #include #include #include // 定时器 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); // WiFi 名称与密码 const char *ssid = "xxxxxxxx"; //这里填你家中的wifi名 const char *password = "xxxxxxxxxxxx";//这里填你家中的wifi密码 //24*24小电视的点阵图 const unsigned char bilibilitv_24u[] U8X8_PROGMEM = {0x00, 0x00, 0x02, 0x00, 0x00, 0x03, 0x30, 0x00, 0x01, 0xe0, 0x80, 0x01, 0x80, 0xc3, 0x00, 0x00, 0xef, 0x00, 0xff, 0xff, 0xff, 0x03, 0x00, 0xc0, 0xf9, 0xff, 0xdf, 0x09, 0x00, 0xd0, 0x09, 0x00, 0xd0, 0x89, 0xc1, 0xd1, 0xe9, 0x81, 0xd3, 0x69, 0x00, 0xd6, 0x09, 0x91, 0xd0, 0x09, 0xdb, 0xd0, 0x09, 0x7e, 0xd0, 0x0d, 0x00, 0xd0, 0x4d, 0x89, 0xdb, 0xfb, 0xff, 0xdf, 0x03, 0x00, 0xc0, 0xff, 0xff, 0xff, 0x78, 0x00, 0x1e, 0x30, 0x00, 0x0c }; // B 站 API 网址: follower, view, likes String NAME = "xxxxxxxxxx"; //改成自己的名字 String UID = "xxxxxxxxxxx"; //改成自己的UID String followerUrl = "http://api.bilibili.com/x/relation/stat?vmid=" + UID; // 粉丝数 String viewAndLikesUrl = "http://api.bilibili.com/x/space/upstat?mid=" + UID; // 播放数、点赞数 long follower = 0; // 粉丝数 long view = 0; // 播放数 long likes = 0; // 获赞数 void setup() { // OLED 初始化 u8g2.begin(); u8g2.enableUTF8Print(); u8g2.clearDisplay(); u8g2.setFont(u8g2_font_wqy12_t_gb2312a); u8g2.drawXBMP( 16 , 9 , 24 , 24 , bilibilitv_24u ); u8g2.setCursor(45, 19); u8g2.print("Powered by"); u8g2.setCursor(45, 31); u8g2.print("@小师弟"); u8g2.setFont(u8g2_font_wqy12_t_gb2312a); u8g2.setCursor(10, 50); u8g2.print("www.liuyao-blog.cn"); u8g2.sendBuffer(); delay(5000); u8g2.setFont(u8g2_font_wqy12_t_gb2312b); u8g2.setFontPosTop(); u8g2.clearDisplay(); 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(60, timerCallback); // 每隔1min // 第一次调用获取数据函数,方便开机即可显示 getFollower(followerUrl); getViewAndLikes(viewAndLikesUrl); } void loop() { while (flag) { if (count == 0) { // display data Serial.println("count = 0, display data"); u8g2.firstPage(); do { display(follower, likes, view); } while (u8g2.nextPage()); flag = false; } else if (count == 1) { // get follower Serial.println("count = 1, get follower"); getFollower(followerUrl); flag = false; } else if (count == 2) { // get view and likes Serial.println("count = 2, get view and likes"); getViewAndLikes(viewAndLikesUrl); flag = false; } } } // 定时器回调函数 void timerCallback() { count++; if (count == 3) { count = 0; } 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("Get OK"); String resBuff = http.getString(); // ---------- ArduinoJson V5 ---------- JsonObject &root = jsonBuffer.parseObject(resBuff); if (!root.success()) { Serial.println("parseObject() failed"); return; } follower = root["data"]["follower"]; Serial.print("Fans: "); 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("Get OK"); String resBuff = http.getString(); // ---------- ArduinoJson V5 ---------- JsonObject &root = jsonBuffer.parseObject(resBuff); if (!root.success()) { Serial.println("parseObject() failed"); return; } likes = root["data"]["likes"]; view = root["data"]["archive"]["view"]; Serial.print("Likes: "); Serial.println(likes); Serial.print("View: "); Serial.println(view); } else { Serial.printf("[HTTP] GET... failed, error: %d\n", httpCode); } http.end(); } // OLED 显示数据 void display(long follower, long likes, long view) { u8g2.clearDisplay(); u8g2.setCursor(5, 25); u8g2.print("粉丝数:" + String(follower)); u8g2.setCursor(5, 39); u8g2.print("获赞数:" + String(likes)); u8g2.setCursor(5, 52); u8g2.print("播放数:" + String(view)); u8g2.setCursor(5, 7); u8g2.print("bilibili@" + String(NAME)); //改成自己的名字 }

需要修改的地方都在程序中注释了

7.修改完成之后点之记编译上传

至此大功告成!!!!!


作者:果果小师弟



esp esp8266 物联网

需要 登录 后方可回复, 如果你还没有账号请 注册新账号