Funpack-3-5 Arduino UNO R4 WiFi基于Arduino Cloud实现远程点灯
该项目使用了Arduino UNO R4 WiFi,实现了基于Arduino Cloud远程点灯的设计,它的主要功能为:通过UNO R4 WiFi接收Arduino Cloud的数据,将接收到的数据处理后在LED矩阵上显示指定内容。。
标签
Funpack活动
Arduino UNO R4 WiFi
Arduino Cloud
C6C6C6
更新2025-01-13
14

一、项目简介

本项目基于 Arduino UNO R4 WiFi 开发板,利用其内置的 Wi-Fi 功能,以及板载 LED 矩阵,构建一个智能灯控制系统。该系统旨在通过网络连接至云端平台,实现对灯的远程控制,包括开关和亮度调节。同时,系统会根据亮度值实时控制板载 12x8 LED 矩阵的显示效果。当亮度值在 0% 到 90% 之间时,矩阵会逐渐点亮相应的区域,模拟亮度的变化;当亮度值超过 90% 时,矩阵会显示太阳图标,以视觉化方式呈现高亮度状态。此项目为提供了一个探索智能家居控制和可视化展示的实现方案。

二、硬件简介

Arduino UNO R4 WiFi 是一款功能强大的开发板,它在经典的 UNO 基础上进行了大幅升级,集成了瑞萨电子的 RA4M1 微处理器和乐鑫的 ESP32-S3 芯片,使其在处理能力、无线通信和外设方面都得到了显著提升。

1. 核心处理器 - 瑞萨 RA4M1 微处理器:

  • 高性能: 基于 Arm Cortex-M4 内核,主频高达 48MHz,相比传统 UNO 的 ATmega328P 具有更强的计算能力,可以更快地执行复杂的算法和处理数据。
  • 低功耗: 采用低功耗设计,有助于延长电池供电时的运行时间。
  • 大容量存储: 配备 256KB Flash 和 32KB SRAM,可以存储更大的程序和数据,满足更复杂的应用需求。
  • 丰富的外设: 集成了丰富的片上外设,例如 ADC、DAC、定时器、PWM、I2C、SPI 等,为硬件扩展提供了便利。

2. 无线通信 - 乐鑫 ESP32-S3 芯片:

  • Wi-Fi 802.11 b/g/n: 支持 2.4GHz Wi-Fi 网络,可以方便地连接到互联网,实现远程控制和数据传输。
  • Bluetooth 5 (LE): 支持蓝牙 5 低功耗协议,可以与其他蓝牙设备进行通信,为未来的扩展提供了更多可能性。
  • 双核处理: ESP32-S3 芯片本身就是一个双核处理器,可以独立运行一些任务,减轻主处理器的负担。

3. 板载 LED 矩阵:

  • 12x8 LED 矩阵: 提供了一个方便的显示输出,无需外接显示模块,可以直接显示字符、图形和动画效果。
  • 可控性强: 每个 LED 都可以单独控制,可以实现多种显示效果,例如亮度调节、动画显示、图标显示等。

三、Arduino Cloud简介

Arduino Cloud 是 Arduino 官方提供的云平台,旨在为物联网 (IoT) 项目提供一个全面的开发和管理环境。它简化了物联网设备的开发、部署和管理流程,使得创客和开发者可以更加专注于实现他们的创意,而无需花费大量时间在基础设施的搭建上。

  1. 在线 IDE (Integrated Development Environment):
    • Arduino Cloud 提供了一个基于 Web 的集成开发环境,可以直接在浏览器中编写、编译和上传 Arduino 代码。
    • 无需安装本地 IDE 和驱动程序,简化了开发环境的设置。
    • 支持代码版本控制和团队协作,方便团队开发和管理项目。
    • 集成了丰富的示例代码和库,方便快速入门和开发。
  2. 物联网设备管理 (Device Management):
    • 可以方便地将 Arduino 开发板(例如 Arduino UNO R4 WiFi)连接到云平台。
    • 通过在线界面可以查看设备的连接状态、传感器数据和控制状态。
    • 支持设备分组管理,方便管理大量的物联网设备。
    • 可以远程更新设备固件,方便维护和升级。
  3. 数据存储和可视化 (Data Storage & Visualization):
    • 提供云端数据存储服务,可以将传感器数据存储在云端,便于长期存储和分析。
    • 提供强大的数据可视化工具,可以将数据以图表、仪表盘等形式呈现,方便用户观察和分析数据。
    • 可以设置数据阈值和警报,当数据超出预设范围时,及时通知用户。
  4. 远程控制和自动化 (Remote Control & Automation):
    • 通过 Arduino Cloud 提供的 API 或 Web 界面,可以实现对设备的远程控制。
    • 支持创建自定义规则和自动化流程,可以根据设定的条件自动控制设备。
    • 可以与其他云服务集成,实现更强大的功能。
  5. 安全性和可靠性:
    • 采用安全可靠的加密协议,保障数据传输和存储的安全。
    • 提供高可用性的云服务,确保设备的稳定运行。

软件方案简介

本项目的软件部分主要基于 Arduino 编程环境进行开发,实现以下核心功能:

  1. 云端连接与通信:利用 Arduino Cloud 的官方库,建立 Arduino UNO R4 WiFi 与云平台的连接。
  2. 数据处理与控制:从云端接收控制指令(例如:开关、亮度值),并解析这些指令。根据解析得到的亮度值,调整 LED灯亮起的数目,从而实现 LED 灯的亮度调节。根据亮度值,动态调整板载 LED 矩阵的显示效果。
  3. LED 矩阵显示控制:利用 Arduino 提供的 LED 矩阵控制库,实现对 LED 矩阵的独立控制。根据亮度值,控制 LED 矩阵上点亮的 LED 数量,模拟亮度的变化 (0-90%)。当亮度值超过 90% 时,在 LED 矩阵上显示预设的太阳图标。171584e6351853b9f7362aa1a83995f.png

Arduino Cloud置步骤

前提条件:

  • 你已经拥有一个 Arduino Cloud 账号(如果没有,请先注册一个)。
  • 你已经安装了 Arduino IDE 或使用 Arduino Web Editor,接下来以Arduino Web Editor为例。
  • 你的 Arduino UNO R4 WiFi 开发板已正确连接到电脑。
  1. 配置设备:首先,需要将开发板连接到计算机,并在“Devices”选项卡中配置您的设备。点击“+DEVICE”,不同板卡可能配置有所不同,但根据安装向导一般可以完成设备配置。图中为Arduino UNO R4 WiFi配置完成后的效果。05a658c78afe1a8a8a0589a1b1ba1de.png
  2. 创建物体:配置设备后,我们可以在“Things”选项卡中创建一个物体,它是主板的虚拟孪生。在这里,我们配置网络详细信息,选择要关联的设备并创建要同步的变量。点击“+THING”进入设置页面,首先在Associated Device选择刚才配置的设备,跟随向导完成关联设备。接着在Network下配置需要连接的WIFI名和密码。最后点击Cloud Variables旁边的”ADD“添加云变量,命名并选择变量类型为Dimmed light。图中为Arduino UNO R4 WiFi配置完后的效果。956d6ec55d89c81c801cf95b87ea84f.png
  3. 编写程序:成创建物体后,不要退出当前页面点击右上角的“Sketch”进入程序编写页面。和Arduino IDE编程相同,根据自己的需求编写程序,完成程序编写后点击左上角的“→”将代码下载到开发板中。
  4. 创建仪表板:完成程序编写后(或在程序编写前),进入“Dashboard“选项卡,点击”+DASHBOARD“创建仪表板。点击左上角进入编辑模式,可以添加各种仪表板,这里选择添加了Dimmed light,并将其关联到之前创建的云变量。47cff26e7516684d9892271bb878c7c.png

五、代码实现

void clearFrame()

  • 功能: 清除 frame 数组,将所有 LED 像素设置为熄灭状态。
  • 作用: 在绘制新的 LED 矩阵图案之前,需要先清除之前的状态。
void clearFrame(){
  for (int i = 0; i < 8; i++) {
       for (int j = 0; j < 12; j++) {
           frame[i][j] = 0;
      }
  }
}

void randomLight(int numLights)

  • 功能: 根据传入的 numLights 参数,随机点亮 LED 矩阵上的指定数量的 LED。
  • 作用: 用于模拟灯的亮度变化,当亮度值在 0-90% 时,矩阵随机点亮相应数量的 LED。
void randomLight(int numLights) {
 if (numLights > 8 * 12) {
   numLights = 8 * 12;
}

 clearFrame();
 
 int litCount = 0;
 while (litCount < numLights) {
     int row = random(8);
     int col = random(12);
     
     if(frame[row][col] == 0){
         frame[row][col] = 1;
         litCount++;
    }
}
}

void drawSun()

  • 功能: 在 LED 矩阵上绘制太阳图标。
  • 作用: 当亮度值超过 90% 时,显示太阳图标。
void drawSun() {

 clearFrame();
 
 // 设置太阳中心
 int centerX = 6; // 水平中心点
 int centerY = 4; // 垂直中心点
 int radius = 2;  // 太阳半径

 // 绘制太阳核心
 for (int y = 0; y < 8; y++) {
   for (int x = 0; x < 12; x++) {
     int dx = x - centerX;
     int dy = y - centerY;
     if (dx * dx + dy * dy <= radius * radius) {
        frame[y][x] = 1;
    }
  }
}
 // 绘制光芒
 frame[centerY-3][centerX]   = 1; // 上
 frame[centerY+3][centerX]   = 1; // 下
 frame[centerY][centerX-3]   = 1; // 左
 frame[centerY][centerX+3]   = 1; // 右
 frame[centerY-2][centerX-2] = 1; // 左上
 frame[centerY-2][centerX+2] = 1; // 右上
 frame[centerY+2][centerX-2] = 1; // 左下
 frame[centerY+2][centerX+2] = 1; // 右下
}

void onLightChange()

  • 功能: 当 Arduino Cloud 上的 light 变量的值被修改时,此函数被调用。
  • 作用: 首先判断 light.getSwitch() 的值,判断灯是否开启,如果开启,则继续下面的流程。
  • brightness = light.getBrightness();: 从 Arduino Cloud 获取灯的亮度值。
  • 判断 brightness 是否大于 89,如果大于,显示太阳图标
  • 判断 brightness 是否等于 lastBrightness, 如果不相等,则根据当前亮度,随机点亮LED
  • 如果灯未开启,则清除LED矩阵
void onLightChange()  {
 //then check if switch is on/off
 if (light.getSwitch()) {
   brightness = light.getBrightness();
   if (brightness > 89) {
       // 静态显示太阳
         drawSun();
         matrix.renderBitmap(frame, 8, 12);
  } else {
     // 比较当前亮度和上次亮度
     if (brightness != lastBrightness) {
       // 如果亮度值改变,则更新 LED 矩阵
       randomLight(brightness);
       matrix.renderBitmap(frame, 8, 12);
       // 更新 lastBrightness
       lastBrightness = brightness;
    }
  }
}
 else{
   clearFrame();
   matrix.renderBitmap(frame, 8, 12);
}
}

六、效果展示

通过调整Dimmed light滑块来对应调整灯光亮度,0到90%时,矩阵点亮随机位置对应数量的LED灯,90%以上时,灯板显示出太阳的图标。

下载.jpg

下载 (1).jpg

七、总结与展望

总结

本次项目,我基于 Arduino UNO R4 WiFi 开发板构建了一个智能灯控制系统,通过网络连接云端,实现了远程控制和可视化显示。在项目过程中,我收获颇丰,具体总结如下:

  • 掌握了 Arduino UNO R4 WiFi 的开发:
    • 熟悉了 Arduino UNO R4 WiFi 的硬件特性,包括其强大的处理器、无线通信能力和板载 LED 矩阵。
    • 学会了使用 Arduino IDE 和相关库,进行代码编写、编译和上传。
    • 成功利用 UNO R4 WiFi 的 Wi-Fi 功能连接到 Arduino Cloud。
  • 实现了云端连接和远程控制:
    • 理解并掌握了 Arduino Cloud 的基本概念和使用方法。
    • 成功地将 UNO R4 WiFi 设备注册到 Arduino Cloud,并实现了远程控制灯的开关和亮度。
    • 能够通过 Arduino Cloud 的仪表盘实时查看和调整灯的亮度值。
  • 实现了 LED 矩阵的动态显示:
    • 学习并掌握了 Arduino LED 矩阵控制库的使用方法。
    • 根据灯的亮度值,实现了 LED 矩阵的动态显示,包括模拟亮度变化的逐渐点亮效果和高亮度下的太阳图标。
    • 代码中使用了随机数模拟点亮效果,提升了显示效果的趣味性。
  • 提升了物联网开发能力:
    • 通过实践加深了对物联网概念的理解,以及对物联网设备开发流程的掌握。
    • 学习了如何利用云平台进行远程控制和数据管理,为未来的物联网项目开发积累了宝贵的经验。


展望

  • 优化 LED 矩阵显示效果:
    • 目前 LED 矩阵的显示效果比较简单,未来计划尝试更复杂的动画效果和过渡效果,提升用户体验。
    • 可以考虑增加显示亮度变化时的过渡效果。
    • 可以考虑添加更多不同的图标显示,实现更多可视化效果。
  • 增加更多控制功能:
    • 当前项目仅支持亮度调节和开关控制,未来计划增加更多控制功能,例如定时开关灯、根据环境光调节等。
附件下载
funpack-3-5_dec29a.zip
项目代码
团队介绍
萌新嵌入式爱好者。
评论
0 / 100
查看更多
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2024 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号