127浏览
查看: 127|回复: 6

[项目] 【花雕学编程】Arduino动手做(249)---GC9A01电量WiFi指示器

[复制链接]
【花雕学编程】Arduino动手做(249)---GC9A01电量WiFi指示器图2

【花雕学编程】Arduino动手做(249)---GC9A01电量WiFi指示器图1

驴友花雕  中级技神
 楼主|

发表于 2025-4-14 11:26:58

【花雕学编程】Arduino动手做(249)---GC9A01电量WiFi指示器

【花雕学编程】Arduino动手做(249)---GC9A01电量WiFi指示器图1

【花雕学编程】Arduino动手做(249)---GC9A01电量WiFi指示器图2
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-4-14 11:32:31

【花雕学编程】Arduino动手做(249)---GC9A01电量WiFi指示器

【花雕学编程】Arduino动手做(249)---GC9A01电量WiFi指示器图2

【花雕学编程】Arduino动手做(249)---GC9A01电量WiFi指示器图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-4-14 11:33:47

【花雕学编程】Arduino动手做(249)---GC9A01电量WiFi指示器

  【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  项目之八十八:GC9A01园屏之WiFi信号强度与电池电量的状态指示器

实验开源代码

  1. /*
  2.   【Arduino】189种传感器模块系列实验(资料代码+仿真编程+图形编程)
  3.   实验二百四十九:1.28寸圆形彩色TFT显示屏 高清IPS 模块 240*240 SPI接口GC9A01驱动
  4.   项目之八十八:GC9A01园屏之WiFi信号强度与电池电量的状态指示器
  5. */
  6. //       GC9A01---------- ESP32
  7. //       RST ------------ NC(复位引脚,此处未连接)
  8. //       CS ------------- D4(片选引脚,连接到ESP32的D4引脚)
  9. //       DC ------------- D2(数据/命令选择引脚,连接到ESP32的D2引脚)
  10. //       SDA ------------ D23 (green)(主数据输出引脚,连接到ESP32的D23引脚,绿色线)
  11. //       SCL ------------ D18 (yellow)(时钟信号引脚,连接到ESP32的D18引脚,黄色线)
  12. //       GND ------------ GND(接地引脚,连接到ESP32的接地端)
  13. //       VCC -------------3V3(电源引脚,连接到ESP32的3.3V电源)
  14. // 引入SPI通信库,用于与TFT屏幕进行SPI通信
  15. #include "SPI.h"
  16. // 引入Adafruit图形库,提供图形绘制的基础功能
  17. #include "Adafruit_GFX.h"
  18. // 引入Adafruit GC9A01A屏幕驱动库,用于控制GC9A01A型号的TFT屏幕
  19. #include "Adafruit_GC9A01A.h"
  20. // 定义TFT屏幕的片选引脚
  21. #define TFT_CS 4
  22. // 定义TFT屏幕的数据/命令选择引脚
  23. #define TFT_DC 2
  24. // 定义TFT屏幕的复位引脚,-1表示不使用该引脚
  25. #define TFT_RST -1
  26. // 创建Adafruit_GC9A01A对象,用于控制TFT屏幕
  27. Adafruit_GC9A01A tft = Adafruit_GC9A01A(TFT_CS, TFT_DC, TFT_RST);
  28. // 定义屏幕的宽度
  29. #define SCREEN_WIDTH 240
  30. // 定义屏幕的高度
  31. #define SCREEN_HEIGHT 240
  32. // 定义图标(如电池、WiFi信号图标)的大小
  33. #define ICON_SIZE 50
  34. // 定义显示文本的大小
  35. #define TEXT_SIZE 3
  36. // 定义状态更新的时间间隔,单位为毫秒
  37. #define UPDATE_SPEED 1000
  38. // 定义电池电量变量,初始值为100%
  39. int batteryLevel = 100;
  40. // 定义WiFi信号强度变量,初始值为5
  41. int wifiStrength = 5;
  42. // 初始化函数,在程序开始时执行一次
  43. void setup() {
  44.     // 初始化串口通信,波特率为115200,用于调试信息输出
  45.     Serial.begin(115200);
  46.     // 初始化TFT屏幕
  47.     tft.begin();
  48.     // 设置TFT屏幕的旋转方向为2,即旋转180度
  49.     tft.setRotation(2);
  50. }
  51. // 循环函数,程序开始后会不断循环执行
  52. void loop() {
  53.     // 用黑色填充整个屏幕,清除上一帧的显示内容
  54.     tft.fillScreen(tft.color565(0, 0, 0));
  55.     // 绘制电池图标
  56.     drawBatteryIcon();
  57.     // 绘制WiFi信号图标
  58.     drawWiFiIcon();
  59.     // 显示电池和WiFi的状态数值
  60.     displayStatusText();
  61.     // 更新电池电量和WiFi信号强度
  62.     updateStatus();
  63.     // 延迟一段时间,控制状态更新的速度
  64.     delay(UPDATE_SPEED);
  65. }
  66. // 绘制电池图标的函数
  67. void drawBatteryIcon() {
  68.     // 绘制电池的外框,矩形的左上角坐标为(70, 40),宽和高为ICON_SIZE,颜色为白色
  69.     tft.drawRect(70, 40, ICON_SIZE, ICON_SIZE, tft.color565(255, 255, 255));
  70.     // 计算电池电量对应的宽度,电池电量每3%对应1个像素宽度
  71.     int batteryWidth = batteryLevel / 3;
  72.     // 绘制电池内部的电量进度条,矩形的左上角坐标为(75, 45),宽度为batteryWidth,高度为ICON_SIZE - 10,颜色为绿色
  73.     tft.fillRect(75, 45, batteryWidth, ICON_SIZE - 10, tft.color565(0, 255, 0));
  74. }
  75. // 绘制WiFi信号图标的函数
  76. void drawWiFiIcon() {
  77.     // 循环绘制WiFi信号的圆圈,根据WiFi信号强度绘制不同数量的圆圈
  78.     for (int i = 0; i < wifiStrength; i++) {
  79.         // 计算每个圆圈的圆心坐标,x坐标为150 + (i * 8),y坐标为65
  80.         // 圆圈的半径为10 + i * 2,颜色为蓝色
  81.         tft.fillCircle(150 + (i * 8), 65, 10 + i * 2, tft.color565(0, 0, 255));
  82.     }
  83. }
  84. // 显示状态数值的函数
  85. void displayStatusText() {
  86.     // 设置文本颜色为白色
  87.     tft.setTextColor(tft.color565(255, 255, 255));
  88.     // 设置文本大小为TEXT_SIZE
  89.     tft.setTextSize(TEXT_SIZE);
  90.     // 设置文本的起始坐标为(10, 106),显示电池电量信息
  91.     tft.setCursor(10, 106);
  92.     tft.print("Battery: ");
  93.     tft.print(batteryLevel);
  94.     tft.print("%");
  95.     // 设置文本的起始坐标为(40, 160),显示WiFi信号强度信息
  96.     tft.setCursor(40, 160);
  97.     tft.print("WiFi: ");
  98.     tft.print(wifiStrength);
  99.     tft.print("/5");
  100. }
  101. // 更新状态的函数
  102. void updateStatus() {
  103.     // 随机减少电池电量,减少的范围为1到4
  104.     batteryLevel -= random(1, 5);
  105.     // 如果电池电量小于等于0,则将电池电量重置为100%
  106.     if (batteryLevel <= 0) batteryLevel = 100;
  107.     // 随机生成WiFi信号强度,范围为1到5
  108.     wifiStrength = random(1, 6);
  109. }   
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-4-14 11:35:16

【花雕学编程】Arduino动手做(249)---GC9A01电量WiFi指示器

这段代码的核心功能是 动态状态指示器,通过图标和数值显示电池电量和 WiFi 信号强度,并随着时间变化进行实时更新。

代码结构1️⃣ 初始化屏幕
  • 使用 Adafruit_GC9A01A 控制 TFT 显示屏,设置黑色背景。

2️⃣ 绘制电池图标
  • drawRect() 创建 白色矩形外框,表示电池边框。
  • fillRect() 绘制 绿色充电进度条,随着电量下降而变化。

3️⃣ 绘制 WiFi 信号图标
  • 使用 fillCircle() 生成 多个蓝色圆点,表示 WiFi 信号强度,信号越强圆点越多。

4️⃣ 显示状态数值
  • print() 实时显示 电池电量百分比WiFi 信号强度,让信息更加直观。

5️⃣ 动态更新数据
  • batteryLevel 变量 随机下降,模拟电池电量消耗,并在耗尽后重置为满格。
  • wifiStrength 变量 随机变化,模拟 WiFi 信号的波动。



最终效果屏幕上实时显示电池电量和 WiFi 信号强度
图标和数值不断更新,模拟真实状态变化
黑色背景 + 白色边框 + 绿色/蓝色图标 + 数值显示,提高视觉对比度

回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-4-14 11:38:08

【花雕学编程】Arduino动手做(249)---GC9A01电量WiFi指示器

实验场景图  动态图

【花雕学编程】Arduino动手做(249)---GC9A01电量WiFi指示器图2

【花雕学编程】Arduino动手做(249)---GC9A01电量WiFi指示器图1
回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 2025-4-14 11:40:27

【花雕学编程】Arduino动手做(249)---GC9A01电量WiFi指示器

【花雕学编程】Arduino动手做(249)---GC9A01电量WiFi指示器图1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail