启明智显分享

2023-11-18

据数据显示,全球新能源汽车销量正大幅度增长,全球汽车电动化渗透率也由0.8%增长到7.74%,这不仅意味着汽车产业电动化浪潮的来临,也证实了我国新能源汽车行业正处于高速发展状态。随着电动汽车销售量与保有量的迅速增长,充电需求也持续攀升,在新基建政策的加持下,充电桩建设步入正轨并重回高速发展期。充电是新能源汽车补能的主流方式,也是构成新能源车产业的重要一环,充电问题被认为是解决电动汽车推广的“最后一公里”问题,对于推广发展新能源车来说,解决充电桩覆盖面问题是至关重要的。

 

充电桩行业在大量充电需求的推动下完成了转型,各企业应在充电桩建设方面更多衡量终端用户体验感,就目前来说,充电桩行业门槛较低,产品标准化程度较高,供应商数量多,存在着巨大的市场竞争力。配备智能屏成为大部分企业提高充电桩产品市场竞争力的选择。

为此,启明智显作为领先的智能屏解决方案提供商,特推出ZX4D30NEO1S串口屏应用于充电桩智能显示。ZX4D30NEO1S采用 Xtensa® 32 位 LX7 双核处理器,主频高达 240 MHz,同时集成 2.4 GHz Wi-Fi 和 Bluetooth 5 (LE)。用一颗芯片替代原有的MCU主控芯片,在满足设备联网及彩屏显示的同时省“一颗芯”的成本。给充电桩行业带来极具成本优势、高性能和低功耗的解决方案。

ZX4D30NEO1S智能串口屏介绍:

ZX4D30NEO1S智能串口屏选用4.3寸分辨率为 480(RGB)×272 全视角IPS工艺彩屏,能够实时显示二维码、充电量、充电剩余时间、输出功率、使用时间、以及异常警报提示,充电使用情况随时掌握,让充电变得更安全;硬件集成WIFI、蓝牙、RS485、串口等,支持OAT远程快速升级;支持通过串口外接刷卡器;

 

快速开发平台:8ms

8ms平台(//8ms.xyz)采用B/S架构并提供UI及功能层完整SDK,用户在平台开发UI,无须环境搭建,直接调用API接口,快速完成开发业务交互逻辑,降低学习成本;功能层封装了各类连接和功能,同时支持自行添加各类型驱动,用户只需要专注于自身产品的业务逻辑和应用协议即可,大大节省了客户的开发门槛和时间。

方案参数说明

开发说明:

编译SDK
加载对应开发板型号
Linux环境下

bash load.sh 
1): WT32_SC01 
2): WT154_C3SI1 
3): WT154_S2MI1 
4): WT_86_32_3ZW1 
5): WT280_S2MX1 
6): WT240_C3SI1 
7): WT_0_S2_240MW1 
8): ZX3D50CE02S_USRC_4832 
9): ZX3D95CE01S_AR_4848 
10): ZX3D95CE01S_UR_4848 
11): ZX4D30NE01S_UR_4827 
12): ZX4D60_AR_4896 
13): ZX2D10ECS_cESCP01
1
Set to 1-WT32_SC01
--- sdkconfig done

Done
Windows环境下
直接双击load_windowns.bat,选择对应的开发板机型

本地编译、烧录
idf.py build
idf.py flash

固件烧录

进入烧录模式

ESP32通过UART烧录时需要连接VCC、GND、EN、IO0(ESP32-C3为IO9)、TXD、RXD共计六个管脚,使用市面上大多数适配ESP32烧录设备时硬件会自动操作IO0、EN进入烧录模式。使用未适配的烧录设备时可以将IO0接地,通过控制EN重启芯片进入烧录模式。

烧录本地开发工程

正确连接模组、开发板后使用idf烧录

idf.py flash
  • 部分环境下可能需要使用参数 -p 手动指定串口号或 -b 指定波特率。

烧录本地固件

1.获取乐鑫flash_download_tool
2.选择对应的芯片型号和接口,选择ESP32S3

3.选择对应的烧录镜像并输入对应烧录地址

4.烧录完成后手动复位开发板

 

开发流程

第三方开发板的适配

若使用启明智显提供的开发板时可以直接通过加载配置文件的形式完成开发板各外设的初始化。在使用第三方开发板时需要按照 typedef void (*qmsd_board_init_cus)(qmsd_screen_rotation_t dir); 的函数指针定义自行实现相关初始化以及和UI库的对接。之后使用void qmsd_set_board_init_cus(qmsd_board_init_cus init_cus);来指定使用第三方的初始化方法。

添加8ms生成的UI代码

1.在8ms平台编译UI工程


2.确认工程编译成功

3.下载8ms源码

4.删除{sdk_dir}/components/qmsd_ui目录,将下载的源码解压至对应目录
5.参照上述章节进行编译和烧录

添加自定义逻辑代码

和UI相关的代码可以添加至 {sdk_dir}/components/qmsd_ui/ui/qmsd_internal_ui_cb.c中的各控件的回调函数中,也可以借助8ms的自定义回调将时间参数传递至{sdk_dir}/main/control/qmsd_ui_cb.c 中的qmsd_ui_cb中进行处理。值得注意的是这些函数正常情况下只会运行在GUI线程中,在这些函数中添加耗时或阻塞任务会导致UI性能下降或卡顿。 

跨线程的UI调度

当需要跨线程修改UI线程内部资源时需要使用互斥锁保证线程安全,可以使用以下api获取、释放互斥锁。

int qmsd_gui_lock(uint32_t timeout)
void qmsd_gui_unlock(void)

 

API指南

8ms相关

初始化页面列表
void qmsd_screen_list_init(int max);

注册页面
void qmsd_screen_register(lv_obj_t* obj,const char* id);

移除注册页面
void qmsd_screen_remove(const char *id);

为指定obj设置识别ID
void qmsd_obj_set_id(lv_obj_t* obj,const char *id);

打印当前已注册的所有页面
void qmsd_screen_print();

根据注册id搜索页面
lv_obj_t* qmsd_search_screen(const char *id);

根据注册id搜索控件
lv_obj_t* qmsd_search_widget(const char *id);

获取对应名称的图片资源
lv_img_src_t *qmsd_get_img(const char *w_name);

获取对应名称的字体资源
lv_font_t *qmsd_get_font(const char *w_name);

向页面的所有子控件发送事件
void qmsd_send_event_to_chill(lv_obj_t* obj, lv_obj_t* prev, qmsd_event event)

控制协议相关

  • 将控制协议通过文本消息发送至Ui线程内部
    int qmsd_ctrl_str(const char *json_str);

  • 利用互斥锁等待UI线程处理间隔解析并执行相关操作
    char *qmsd_ctrl_str_sync(const char *json_str);

  • 在GUI线程内部解析并处理控制协议,仅限在GUI线程内部使用
    char *qmsd_ctrl_str_gui(const char *json_str);

初始化

  • GUI初始化,custom_fb_size,自定义LVGL buffer大小,为0,表示使用默认参数,dir为屏幕方向(参看qmsd_screen_rotation_t的定义)
    esp_err_t qmsd_gui_init(uint32_t custom_fb_size, uint8_t dir);

  • 存储初始化,初始化qmsd_storage的NVS分区
    void qmsd_storage_init(void);

  • 初始化消息队列,一般用于控件回调给主线程发送消息
    int qmsd_main_msgque_init(int msgmax);

  • 通知链初始化,qmsd_api中用到很多通知链来通知事件
    int qmsd_notifier_register(struct qmsd_notifier_block *n);

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

启明智显分享 的相关文章

随机推荐

  • 蓝桥杯JAVA B组 2020(1)第五题 排序

    一 题目描述 小蓝最近学习了一些排序算法 其中冒泡排序让他印象深刻 在冒泡排序中 每次只能交换相邻的两个元素 小蓝发现 如果对一个字符串中的字符排序 只允许交换相邻的两个字符 则在所有可能的排序方案中 冒泡排序的总交换次数是最少的 例如 对
  • SQLCipher核心思想

    加密原理 page data iv hmac iv是一段随机数 可以保证每一页的iv值都不一样 和page data一起作用 用于生成hmac值 sizeof page data p
  • kubeasz 二进制安装k8s高可用集群

    一 kubeasz介绍 项目致力于提供快速部署高可用k8s集群的工具 同时也努力成为k8s实践 使用的参考书 基于二进制方式部署和利用ansible playbook实现自动化 既提供一键安装脚本 也可以根据安装指南分步执行安装各个组件 二
  • Maven2部署构件到Nexus时出现的Failed to transfer file错误

    原文出处 http www javatang com archives 2010 01 23 4518375 html 作者 Jet Mah from Java堂 声明 可以非商业性任意转载 转载时请务必以超链接形式标明文章原始出处 作者信
  • jni基础

    JNI相关 静态注册 java代码需要和C 代码相符通讯就需要通过JNI来进行注册 java public native String stringFromJNI 代表该函数的实现在so so Java com first firstndk
  • 内存管理方案

    内存管理方案 Memory Management System Author Owen 目 录 内存管理方案 1 目 录 1 1 概述 2 2 理论依据 2 2 1 不对内存进行管理 2 2 2 对内存进行内部管理 2 3 实现方案 2 3
  • RMI-Remote Method Invocation远程方法调用的使用

    手动启动服务方式 参考自 https www cnblogs com fanghao p 8918953 html 接口 import java rmi Remote import java rmi RemoteException publ
  • selenium二次封装

    使用到相关技术 selenium testng log4j maven selenium主要生成driver 获取页面元素等 testng主要Run程序 生成测试报告 管理用例执行顺序 断言等 log4j主要用来打印log日志 maven主
  • RuntimeError: CUDA unknown error - this may be due to an incorrectly set up environment

    解决方案 输入指令sudo shutdown r now即可重新启动驱动 如果还是无法解决则需要重新安装驱动
  • 【系统】C/C++内存管理之内存分配

    文章目录 0 内存分配方式 从静态存储区域分配 在栈上创建 在堆上分配 程序内存空间 1 C语言内存分配方式 静态与动态内存分配区别 1 1 静态分配方式 1 2 动态分配方式 1 malloc函数 2 calloc 函数 3 reallo
  • java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\x94' for column 'content' at row 1

    使用Mysql服务器的utf8字符编码 在存入移动端emoji表情时会报异常 Caused by java sql SQLException Incorrect string value xF0 x9F x98 x84 for column
  • 深度学习:实现mnist手写数字识别

    本文为 365天深度学习训练营 中的学习记录博客 原作者 K同学啊 接辅导 项目定制 我的环境 1 语言环境 Python 3 7 2 编译器 Pycharm 3 深度学习环境 TensorFlow2 5 一 前期工作 1 设置GPU 若使
  • Ubuntu20.04开机后,弹出检测到系统程序出现问题解决方法

    打开配置文件 sudo gedit etc default apport 然后 将其中的enable选项改成0 即可解决此问题
  • C++ *,&

    文章目录 语法 1 取地址运算符 2 间接寻址运算符 示例 1 可以累计使用间接寻址运算符来取消引用指向指针的指针 2 静态成员的地址 3 引用类型的地址 4 函数地址作为参数 4 示例 references 语法 1 取地址运算符 又称
  • c#量化交易_我用1天时间搭建自主量化交易(程序化交易)平台

    VirtualApi目前支持上海期货交易所的CTP回测 http www virtualapi cn 实盘期货 支持CTP http www kaihucn cn Simnow 上期CTP接口官方网站和模拟账户注册 http www sim
  • 【KITTI】KITTI数据集简介(一) — 激光雷达数据

    本文为博主原创文章 未经博主允许不得转载 本文为专栏 python三维点云从基础到深度学习 系列文章 地址为 https blog csdn net suiyingy article details 124017716 KITTI数据集的详
  • C++基础——new和delete动态开辟

    目录 前言 一 new关键字 格式2 动态开辟多个数据的堆区空间 数组 总结 二 自定义类型的开辟 1 区别 2 匹配错误讲解 错误示范例1 delete 的执行原理 错误示范2 三 malloc new失败的区别 1 malloc失败 2
  • 如何在WPS、MathType中输入傅立叶变换的符号

    这里写自定义目录标题 在MathType中 先输入大写F 选择上 然后在 mathtype 的 style Other 选择 Palace Script MT字体 如果没有该字体 选择Lucida Calligraphy字体 如果使用的是E
  • 设计模式-装饰模式

    装饰模式指的是在不必改变原类文件和使用继承的情况下 动态地扩展一个对象的功能 它是通过创建一个包装对象 也就是装饰来包裹真实的对象 在装饰模式中的各个角色有 抽象构件 Component 角色 给出一个抽象接口 以规范准备接收附加责任的对象
  • 启明智显分享

    据数据显示 全球新能源汽车销量正大幅度增长 全球汽车电动化渗透率也由0 8 增长到7 74 这不仅意味着汽车产业电动化浪潮的来临 也证实了我国新能源汽车行业正处于高速发展状态 随着电动汽车销售量与保有量的迅速增长 充电需求也持续攀升 在新基