a07a5051af470137914f4ea093844524
【迪文COF结构智能屏试用体验】远程控灯 以前使用过串口屏,而且在工作中接触过很多工业屏,所以对显示屏还算有些了解。但是,因为这个迪文屏的下载方式比较特别,而且,厂家强调SD卡下载程序过程中不能断电,所以,每次下载程序还是提心掉胆的。加上,开始不太熟悉,文件名、配置文件改个名,都有可能黑屏。而且,这个屏我始终没有安装上u***口的驱动,最后只能外接了USB-TTL在,uart2上,实现了串口的功能,顺便连接了uart4,通过51核,也实现了串口 通信功能。 还好,因为以前有用过PS,所以做画面,尤其是修改图片的操作还能应付,我倒觉得,这种方式更适合团队合作,专人完成界面设计,编程的人员专注程序设计。很适合做批产消费品。 下面我来分享一下,通过迪文DMG85480F050-01和ESP8266 WIFI模块实现远程控制3个LED灯的小例程。 先上个图:
迪文屏的显示控件和触控控件很丰富也挺有特点的,认真学习指南,并且找个官方例程仔细研究一番就能掌握,更多是通过图片切换产生动态效果。我觉得主要还是ps软件的技巧。 迪文屏的一个特点是,包含了两个核,一个用来实现GUI,另一个可以实现控制。Adc最大为16位,当然,转换速度不高,只是做一些简单应用,我尝试用光敏电阻实现了屏的亮度自动控制,效果还是可以的。就是在开启待机亮度的时候遇到点麻烦,不过厂家的技术支持很到位。只是软件上有些功能需要完善。 GUI的部分没有什么好展示的,51核部分,主要是通过串口实现和esp8266的通信,实现了I/O口的控制3个LED灯,esp8266中已经编好了程序,自动连接wifi以及贝壳物联平台,实现时间获取和平台下推数据的接收。 51核代码: 1. 开关的触摸控制 每个开关图标上覆盖触控键,并设置相同的变量地址1000, 分别设置键值0x0001,0x0002,0x0003 程序循环中查询0x1000的值,判断是哪个触控键被触碰。
2. 开关和灯的状态改变 当检测到第一个开关被触碰时,先读取该开关的状态,sys_read_vp(0x3100,(u8*)&s_kg,1); 然后翻转开关的状态,在写入到开关的状态变量中和灯的状态变量中。同时控制I/O口的电平。
- if(s_kg==1)
- {
- s_kg=0;
- sys_write_vp(0x3100,(u8*)&s_kg,1);
- sys_write_vp(0x3103,(u8*)&s_kg,1);
- P1_0=0;
- }
- While(1)
- {
- sys_read_vp(0x1000,(u8*)&g_ss,1);
- switch(g_ss)
- {
- case 1:
- sys_read_vp(0x3100,(u8*)&s_kg,1);
- if(s_kg==1)
- {
- s_kg=0;
- sys_write_vp(0x3100,(u8*)&s_kg,1);
- sys_write_vp(0x3103,(u8*)&s_kg,1);
- P1_0=0;
- }
- else
- {
- s_kg=1;
- sys_write_vp(0x3100,(u8*)&s_kg,1);
- sys_write_vp(0x3103,(u8*)&s_kg,1);
- P1_0=1;
- }
- g_ss=0;
- sys_write_vp(0x1000,(u8*)&g_ss,1);
- break;
- case 2:
- sys_read_vp(0x3101,(u8*)&s_kg,1);
- if(s_kg==1)
- {
- s_kg=0;
- sys_write_vp(0x3101,(u8*)&s_kg,1);
- sys_write_vp(0x3104,(u8*)&s_kg,1);
- P1_1=0;
- }
- else
- {
- s_kg=1;
- sys_write_vp(0x3101,(u8*)&s_kg,1);
- sys_write_vp(0x3104,(u8*)&s_kg,1);
- P1_1=1;
- }
- g_ss=0;
- sys_write_vp(0x1000,(u8*)&g_ss,1);
- break;
-
- case 3:
- sys_read_vp(0x3102,(u8*)&s_kg,1);
- if(s_kg==1)
- {
- s_kg=0;
- sys_write_vp(0x3102,(u8*)&s_kg,1);
- sys_write_vp(0x3105,(u8*)&s_kg,1);
- P1_2=0;
- }
- else
- {
- s_kg=1;
- sys_write_vp(0x3102,(u8*)&s_kg,1);
- sys_write_vp(0x3105,(u8*)&s_kg,1);
- P1_2=1;
- }
- g_ss=0;
- sys_write_vp(0x1000,(u8*)&g_ss,1);
- break;
-
- case 16:
- sys_read_vp(0x2108,(u8*)&s_kg,1);
- if(s_kg==1)
- {
- s_kg=0;
- sys_write_vp(0x2108,(u8*)&s_kg,1);
- auto_brt=0;
- }
- else
- {
- s_kg=1;
- sys_write_vp(0x2108,(u8*)&s_kg,1);
-
- auto_brt=1;
- }
- g_ss=0;
- sys_write_vp(0x1000,(u8*)&g_ss,1);
- break;
- }
复制代码
} 6 3. 远程控制的实现 这部分其实就是串口通信数据的解析,ESP8266已经做好了程序,每20s会通过串口发送时间的数据,格式如下: {"M":" time","T":"2022-03-17-410:16:34"} 平台下发的控制数据如下: {"M":"say","ID":"U1","NAME":"BIGIOT_SERVER","C":"play1","T":"1647483956"} {"M":"say","ID":"U1","NAME":"BIGIOT_SERVER","C":"stop1","T":"1647483956"} 其中:play1,stop1就是平台下发的命令,通过程序解析以后,发送到开关和灯的状态变量地址就实现了界面的变化和I/O控制。
- str=strstr(uart2_buf,""C":"play1","T"");
- if(str!=NULL && uart2_buf[0]=='{')
- {
- s_kg=1;
- sys_write_vp(0x3100,(u8*)&s_kg,1);
- sys_write_vp(0x3103,(u8*)&s_kg,1);
- P1_0=1;
- }
- str=strstr(uart2_buf,""C":"play2","T"");
- if(str!=NULL && uart2_buf[0]=='{')
- {
- s_kg=1;
- sys_write_vp(0x3101,(u8*)&s_kg,1);
- sys_write_vp(0x3104,(u8*)&s_kg,1);
- P1_1=1;
- }
复制代码
WeChat_20220322212316
|