据数据显示,全球新能源汽车销量正大幅度增长,全球汽车电动化渗透率也由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);来指定使用第三方的初始化方法。
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线程内部资源时需要使用互斥锁保证线程安全,可以使用以下api获取、释放互斥锁。
int qmsd_gui_lock(uint32_t timeout) void qmsd_gui_unlock(void)
初始化页面列表
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);