0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于RA6M3-HMI-Board实现智能会议控制面板系统

冬至子 来源:robot_365 作者:robot_365 2023-10-08 11:36 次阅读

一、项目背景介绍

会议室是办公室里重要的场地,为决策,沟通,协调等提供了必要的工作场所。在会议室里有很多信息化的设备,为会议提供了各种高效而便利的环境。随着数字科技的发展,信息沟通交流也愈发频繁,会议室承载越来越多的功能。如:商业谈判、学术交流、部门沟通、访客接待等。作为各类信息高度集中的重要场所,智能办公是不可或缺的一部分。

而很多会议室这些设备是由不同供应商提供,使得这些设备管理和使用分散和混乱。而智能会议室就是对传统会议室进行改造升级,提供智能会议室整体解决方案,满足用户视频会议,会议预约及会议室设备控制等需求,实现了智慧会议体验,让企业会议更加高效、智能。

本项目就是使用RA6M3-HMI开发板,结合温湿度传感器与串口通信,对会议室内的灯光系统,空调,窗帘,音响,LED屏,视频会议系统进行集中的控制和管理。通过本控制面板能够控制会议室常用的设备和操作,通过智慧化的集成控制,大大提升会议室管理的便捷性,从而提升会议效率。

二、项目主要功能

智能会议室基于用户会议智能化的需求,通过AIoT物联网的方式,集成大数据与信息可视化,成功的解决了这项难题。免除会议冲突,提升管理效率的同时,带来便捷化的高效率体验,打造一个全新的智能会议室。

1、打造全新智能会议,高效化便捷化智能会议室
智能会议室控制面板联动设备软硬件一站式管控,通过控制LED显示屏设置高端大气的会议主题,无需敲门寻找会议室,在门口便可直观看到本场会议信息资讯,解决会议尴尬冲突。

2.控制管理会议室设备
智能会议室控制面板除开基础的线上会议预约功能外,系统还将整体设备联动,从会议室的灯光、空调、窗帘、会议面板、会议中控集成化管控,从软硬件层面上考虑会议室智能化的需求配置,并可定制化需求配置相对应的客制化系统,打造全新的智能会议室。
会议开始前,联动设备中控,即可设置提前打开办公室空调、灯光、投影等设备

3、上场会议时间过长,无时间提醒,会议冲突很明显。
智能会议室控制面板灯管控制基于情景模式,终端根据会议室使用状态,一键设定灯光组合和变换颜色,让人一目了然。会议结束设备提醒,通过硬件联动控制会议时间,提升会议效率。

三、RT-Thread开发概述

智能会议室控制面板软件系统所使用的RA6M3HMI开发板,已经支持RT-Therad系统,这里就采用RT_thread实时操作系统开就发。图形界面采用LVGL图形库,结合所开发会议业务逻辑部分以及数据采集与收发,完成整个软件开发。
其中RT-Thread开启多个线程支持系统的运行,主要线程有:

LVGL UI线程,该线程你完成LVGL的图形界面的显示和交互,实现UI各个组件的显示和人机交互时界面的绘制
传感器数据采集,这里使用了单独的线程管理传感器,分别采集温度和湿度传感器的数据
数据处理线程,这里主要处理,实时时钟I2C的数据处理,以及对外控制与串口通信的数据处理
通过RT-Thread多线程的设计,完成UI显示与数据采集,数据处理的异步执行,达到系统既能够快速响应用户的操作交互响应,又能够同步进行外部传感器信息的采集与外部设计控制通信。

四、硬件架构设计

主控板RA6M3 HMI Board硬件配置为:
• RA6M3(R7FA6M3AH3CFB):Cortex-M4F 内核,120Mhz 主频,具有 2MB Flash/640KB RAM,集成 TFT 控制器、2D 加速器和 JPEG 解码器。
• 4.3 寸 LCD (RGB 888)
• 板载仿真器
以太网
• RW007 (SPI 高速 WIFI)
USB-Device
• TF Crad
CAN
• 1 路麦克风,1 路扬声器
Arduino 扩展接口
• 2 路 PMOD 扩展接口
• 4 个按键:3 个用户按键,一个复位按键
硬件上分别使用,串口 9,分别是在 P109 和 P110作为串口调试,通过调试器的虚拟串口与上 位机通讯。UART9 连接板载Uart转USB 为日志输出端口。控制面板与外部设备控制通讯使用另外一个串口 4, UART4串口位于 P205 和 P206在开发板 上也直接标出.

使用I2C串联 Hi-Spark IoT开发套件中的温度与湿度传感器,使用了I2C2位于P603, P604接口上的温度与湿度数字传感器板。

连接说明:
GPIO 名称 Device 引脚
P205(UART TX) ARD_DIG_01 PC – COM RX
P206(UART RX) ARD_DIG_00 PC – COM TX
P603(I2C时钟) ARD_DIG_04 SCL
P604(I2C数据) ARD_DIG_05 SDA
温湿度I2C传感器地址为:0x38,

五、软件系统设计

软件开发工具使用 KEIL5集成开发环境与 HMI开发支持包,Renesas RA Flexible Software Package(FSP) v3.5.0 瑞萨扳级配置包。

在HMI开发包内带有 RT-Thread软件系统,以及LVGL图形库。这里只要专注设计业务层的UI即可。

UI设计使用Squareline Studio 1.3.2版本,通过该软件能够快速构建软件的UI布局以及相关的交互事件设计。

主UI设计采用三级切换界面形式,分别是1。首页,显示当前会议时间,以及房间的温湿度数据。2控制页面,设置对会议室中常用的对灯光,窗帘,音响,空调,LED大屏与摄像设备的控制功能入口.3。设置主要设置预设的灯光场景方案,会议提醒定时,以及与会议室设备的通讯参数

在Squareline能够完成界面上所有的空间的布置与属性的设置以及Event的设置,英文字体字库的生成。在设计好界面可预览查看界面的效果,确认无误后,机可以使用导出生成LVGL的界面应用代码,在导出时,注意设置工程的LVGL的版本以及模板。

因为在智慧会议室终端这个软件里,需要显示中文,因此需要设计中文的字库,中文字库使用 LVGLFontTool V0.4软件来生成中文字库,因为中文汉字数量比较多,如果把整个中文字库全部生成,将造成ROM超出无法在RA6M3硬件上使用。因此这里把界面上以及软件运行过程中所有会出现的中文文字单独列出来,生成一个定制的字库,这样就小了许多,这个字库一共260个汉字,完全够本软件使用。字体使用雅黑16号字体。

中文字体为了显示美观,使用了4级抗锯齿,采用GB2312编码,点击生成代码,既生成了雅黑中文汉字字库,这个字库加入到LVGL的字体库中,使用时和其它字库显示文件一样操作即可。
应用逻辑部分使用两个个单独的RT-Thread线程,一个完成定时的从I2C 上采集温度湿度传感器的数据和RTC时间数据,实时的更新的界面上。另一个另一个线程完成UART串口通讯的数据处理,主要负责完成UI操作会议室功能时,把各个开关操作和量化操作转换成开关数据和控制数据并格式化,按一定的协议发送到上位机去。同时接收上位机的反馈,将外部设备的状态数据解析出来,反馈给应用的界面上。

六、软件模块实现

软件实现使用 KEIL5集成工具来进行开发,首先下载FSP3.5版本的配置文件以及,以及KEIL工具中所学要的DFP板级支持包,在KEIL的包管理中,选择Renesas.RA_DFP.3.5.0,即可顺利安装支持包。再下载setup_fsp_v3_5_0_rasc_v2021-10.exe FSP 配置工具 和 RA6M3-HMI SDK模板包,其中模板不是必须的,没有模板创建的工程师最小的公程,缺少很多必要的开发支持,这里建议使用 RA6M3-HMI SDK ,通过从模板中创建新工程,即可顺利的添加入,许多现成的板上软件,如WIFI网络配置,SD 卡文件管理,RT-Thread操作系统系统管理,以及线程,事件,信号对象等的查看,和一个shell,能通过串口方便的操作板子。在RA6M3-HMISDK里有开发板出厂带的应用的例程,方便快速学习和研究开发板的使用。

创建好工程之后,先选择好FSP,取消默认的FSP设置,选择3.5.0,这样才能正确对该开发板进行配置,否则将无法配置正确。

选择好FSP版本后,进入FSP配置面板,配置应用中所需的设备资源,这里将会调用瑞萨的FSP即灵活软件配置工具,根据项目需要,这里添加一些必要连接设备和端口,如I2C,UART,UART调试,和其它一些感兴趣的可以测试的IO设备,如GPIO,SPI,CAN等。这里不是打开的越多越好,打开的越多,造成系统资源的使用增多,使得应用开发时,会遇到如堆栈等不够用的情况。

点击FSP后,找到 Flex Software 下的RA Configure ,点击启动,即出现FSP配置界面
添加外设,因为硬件IO很多是多功能的复用,这里需要根据需求,并逐一配置各个设备的硬件端口,如名称,地址,引脚等。
设置完毕后,点击生成工程,即可生成配置好的工程代码框架。
再把前面有SquareLine UI工程生成的LVGLUI导出目录完整的移到board目录下,
把APP的字体、图片资源代码移进去
再开发逻辑处理代码,把便携好的逻辑代码放到 src 目录下,并且加入到到工程目录下
修改project 里的包含路径,是得UI访问LVGL的头文件路径正确:

/*
实时定时器时钟实现
/
#include
#include
#include
#define DBG_LEVEL DBG_LOG
#define DBG_SECTION_NAME "rtc"
#include
#define RTC_NAME "rtc" /
rt_hw_rtc_register("rtc") in rtc_drv.c*/
rt_sem_t rtc_init_sem = RT_NULL;
int user_rtc_init(void)
{
rt_err_t ret = RT_EOK;
time_t now;
rt_device_t device = RT_NULL;
/ 创建初始化完成信号量 /
rtc_init_sem = rt_sem_create("rtc init flag", 0, 0);
if(rtc_init_sem == RT_NULL)
{
rt_kprintf("rtc sem init failed!n");
return RT_ERROR;
}
/ 寻找设备 /
device = rt_device_find(RTC_NAME);
if (!device)
{
rt_kprintf("find %s failed!n", RTC_NAME);
return RT_ERROR;
}
/ 初始化RTC设备 /
if(rt_device_open(device, 0) != RT_EOK)
{
rt_kprintf("open %s failed!n", RTC_NAME);
return RT_ERROR;
}
/* 设置日期 /
ret = set_date(2023, 10, 5);
if (ret != RT_EOK)
{
rt_kprintf("set RTC date failedn");
return ret;
}
/
设置时间 /
ret = set_time(23, 45, 00);
if (ret != RT_EOK)
{
rt_kprintf("set RTC time failedn");
return ret;
}
rt_sem_release(rtc_init_sem); //rt_sem_take
/
获取时间 */
now = time(RT_NULL);
rt_kprintf("RTC device init success,now time is %sn", ctime(&now));
return ret;
}
/ 使用裝置初始化 /
INIT_ENV_EXPORT(user_rtc_init);
static time_t now;
void user_alarm_callback(rt_alarm_t alarm, time_t timestamp)
{
now = time(RT_NULL);
rt_kprintf("The alarm clock rings, now time is %sn", ctime(&now));
rt_alarm_stop(alarm);
}
void alarm_test(void)
{
rt_kprintf("alarm_test ... n");
if(rt_sem_trytake(rtc_init_sem) != RT_EOK)
{
rt_kprintf("please init rtc firstn");
return ;
}
struct rt_alarm_setup setup;
struct rt_alarm * alarm = RT_NULL;
static time_t now;
struct tm p_tm;
if (alarm != RT_NULL)
return;
/*获取当前时间戳,并把下一秒时间设置为闹钟时间 */
now = time(NULL) + 5;
gmtime_r(&now,&p_tm);
setup.flag = RT_ALARM_SECOND;
setup.wktime.tm_year = p_tm.tm_year;
setup.wktime.tm_mon = p_tm.tm_mon;
setup.wktime.tm_mday = p_tm.tm_mday;
setup.wktime.tm_wday = p_tm.tm_wday;
setup.wktime.tm_hour = p_tm.tm_hour;
setup.wktime.tm_min = p_tm.tm_min;
setup.wktime.tm_sec = p_tm.tm_sec;
alarm = rt_alarm_create(user_alarm_callback, &setup);
if(RT_NULL != alarm)
{
rt_alarm_start(alarm);
}
rt_sem_release(rtc_init_sem);
}
/ export msh cmd /
MSH_CMD_EXPORT(alarm_test,a alarm test);

修改完成后,再编译工程,如果修改正确,编译将会顺利完成,生成了目标烧写文件

点击download按钮,将会自动烧写生成的文件进板子里,烧写过程分别是:擦除,写入,校验,重启
重启后调试串口可以看到APP已经成功的启动运行起来,界面也显示出来。

成功运行时的HMI-Board界面,经过调试和测试基本达到了预设的目标,在调试中会发现因为界面图片文件使用过多,此时会出现生成的文件超出flash的限制大小,因为RA6M3-HMI Board只有2M的Flash,因此对于复杂多层的UI还是难以承担,一般采用减少UI图片资源的使用,共用UI图片,减少字体资源等方式。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 以太网
    +关注

    关注

    40

    文章

    5079

    浏览量

    166251
  • 仿真器
    +关注

    关注

    14

    文章

    988

    浏览量

    82998
  • LED屏
    +关注

    关注

    0

    文章

    189

    浏览量

    16494
  • 串口通信
    +关注

    关注

    32

    文章

    1578

    浏览量

    54870
  • 温湿度传感器

    关注

    5

    文章

    549

    浏览量

    35251
收藏 人收藏

    评论

    相关推荐

    无接触控制面板系统设计要点

    板)无菌,几乎是不可能的。 Holo Industries公司开发了一系列非接触控制面板,避免细菌传播。最开始的两个应用是针对餐厅电梯和公共信息板的:设备将浮动的控制面板图像投影到空中,用户可以激活投影的面板,当用户触摸空中
    的头像 发表于 11-19 15:35 2818次阅读

    加湿器app与wifi控制面板之间的链接

    我们小组想做个wifi手机控制智能控制加湿器 现在遇到个很棘手的问题,就是我们没有加湿器app与制作出来的wifi控制面板通过wifi链接使用,因为他们说app与
    发表于 12-25 13:39

    pcb 控制面板

    `我在画一个灯的pcb,就剩IQS133的控制面板的部分,不知道控制面板在AD下怎么画了,有没有大神给些意见或建议的,谢谢~`
    发表于 06-14 15:57

    AllJoyn核心应用教程:Base Services服务之控制面板

    帮助展现一个控制面板。该工具使用一个XML文件来定义控制面板组件,并生成相应的代码来实现具体的控制面板。 注:XML文件在控制面板服务中不能
    发表于 09-21 10:40

    win8系统隐藏控制面板选项的操作方法

    “隐藏指定的“控制面板”项”。如图:    3、双击“隐藏指定的“控制面板”项”,打开“隐藏指定的“控制面板”项”窗口,如图:    4、选择“已启用”,然后然后点击选项区域的“显示”
    发表于 11-30 16:38

    开源虚拟主机为什么可以控制面板

    开源虚拟主机为什么可以控制面板?开源虚拟主机控制面板可以做什么?
    发表于 10-19 09:30

    本周四晚19:00知识赋能第3期直播丨OpenHarmony智能家居项目之控制面板功能实现

    的布局设计以及ArkUI相关组件的使用,开发者们纷纷积极留言互动,给出好评!而第3节直播《OpenHarmony智能家居项目之控制面板界面功能实现》中,连志安老师将介绍基于标准
    发表于 07-13 17:27

    数码印像机的控制面板/存储卡

    数码印像机的控制面板/存储卡  控制面板         &n
    发表于 12-23 14:38 849次阅读

    微软或逐步移除Windows 10中的控制面板

    Windows电脑中的控制面板往往包含针对系统设置的一些高级选项,而微软已准备逐步将控制面板系统中移除。但这一过程又是循序渐进的,现有系统
    的头像 发表于 03-24 09:17 2181次阅读

    微软计划隐藏Windows 10传统的控制面板

    多年来,微软一直在Windows10上提供两种不同的设置体验。新的简化的设置应用程序现在位于前端和中心,而传统的控制面板仍然可以在Windows系统>控制面板下的“开始”菜单中找到。
    的头像 发表于 03-26 15:45 1776次阅读

    win8控制面板在哪打开?

    其实打开Win8控制面板的方法有很多,笔者要列出来的话,估计可以列出上十种方法,看过Win8使用指南的朋友可能会觉得打开Win8控制面板没有Win7方便,其实也不是这样的,在Win8系统中我们打开
    的头像 发表于 07-29 09:37 3417次阅读
    win8<b class='flag-5'>控制面板</b>在哪打开?

    nvidia控制面板怎么设置

    在我们日常生活中偶尔会遇到一些自己不知道如何解决的问题,比如设置nvidia控制面板。那么我们应该怎样解决这种自己不知道如何设置nvidia控制面板的情况呢?那么接下来就由我来介绍一下设置nvidia控制面板的步骤吧。
    的头像 发表于 01-22 16:43 1.6w次阅读
    nvidia<b class='flag-5'>控制面板</b>怎么设置

    CANoe控制面板的应用

    CANoe控制面板的应用说明。
    发表于 04-20 16:17 32次下载

    废弃的控制面板开源分享

    电子发烧友网站提供《废弃的控制面板开源分享.zip》资料免费下载
    发表于 11-16 11:15 0次下载
    废弃的<b class='flag-5'>控制面板</b>开源分享

    伺服控制面板开源分享

    电子发烧友网站提供《伺服控制面板开源分享.zip》资料免费下载
    发表于 12-09 15:39 0次下载
    伺服<b class='flag-5'>控制面板</b>开源分享