前文回顾

《单片机—HLK-W801并口驱动ST7789》
《单片机—HLK-W801驱动触摸屏》
《单片机—HLK-W801图形框架LVGL移植》
《单片机—HLK-W801图形框架LVGL下开发(一)》
《单片机—HLK-W801图形框架LVGL下开发(二)》
《单片机—HLK-W801图形框架LVGL下开发(三)》

2022年3月24日效果,增加了汉化,APP包括温湿度,计算器,wifi连接,在wifi连接状态下,能够进行NTP时间同步及查询天气。

海凌科w801开发的单片机主机

本章重点

之前的版本,说是在w801下开发,也只是硬件是w801,而软件依旧用的是w806的代码框架,原因还是w806的代码框架逻辑十分清晰,使用起来也简单明了。
不过经过一天的奋战,还是将所有部分都移植到了w801的代码框架上了,为的就是能上网啊。
真是年轻人为了上网,啥都做得出来

最新版本LVGL移植

还是简单的步骤,将源码和头文件放在到工程中,我放在了src下的app中

然后就是编译,可能会报一些函数引用的问题,调整下头文件包含的顺序即可。别问我为什么调整一下就可以,这是我多年工作经验出来的结果。

屏幕驱动

我用的是ST7789的并口屏幕,配合的是SPI的触摸屏接口。移植部分前面介绍过,是在w806上,在w801上,主要就是一个写并口的操作,这个在demo中并没有,所以还是通过修改单个gpio的方式,分析出了写8080并口的方式。

下面是关键的并口写入方式。

void P_WRITE_B0_B15(uint16_t data )
{u32 cpu_sr = 0;u32 reg;u32    reg_en;u32  setval=0;cpu_sr = tls_os_set_critical();reg_en = tls_reg_read32(HR_GPIO_DATA_EN + TLS_IO_AB_OFFSET);tls_reg_write32(HR_GPIO_DATA_EN + TLS_IO_AB_OFFSET, reg_en | P_DATA_PIN);reg = tls_reg_read32(HR_GPIO_DATA + TLS_IO_AB_OFFSET);setval=reg&0xFFFF0000;tls_reg_write32(HR_GPIO_DATA + TLS_IO_AB_OFFSET, setval | data);tls_reg_write32(HR_GPIO_DATA_EN + TLS_IO_AB_OFFSET, reg_en);tls_os_release_critical(cpu_sr);
}

其他部分继续参考《单片机—HLK-W801并口驱动ST7789》即可

触摸屏

这里的移植没有什么区别,就是替换一下原来文档中的GPIO的操作。
继续参考《单片机—HLK-W801驱动触摸屏》

Port层代码

这部分几乎还是没有变化,继续参考《单片机—HLK-W801图形框架LVGL移植》

主页功能

这里介绍一下我制作的这个主页

其实就是简单的时钟,配合几个button,实现了一个类似桌面菜单的功能,这里值得学习的一点,就是关于win空间的使用,每个简单功能,可以理解为一个app,都是在一个win上面实现了,在点击一个button的时候,会先关闭桌面,释放桌面的资源,包括定时任务,然后启用一个新的win来绘制所有的app内容。退出的时候,也是类似,释放所有资源,然后再重新绘制桌面。
这样才能在单片机这种资源比较少的设备上创建这种多个app的桌面。
资源紧张,就得省着用啊

WIFI联网

这里才是移植到w801上的最重要的目的。首先绘制了一个页面用来填写ssid和密码

这个空间在官方的例子中就能找到。
然后再点击确认的时候,调用官方wifidemo的接口就可以联网,并且稍微做个小弹窗,就知道wifi是否连接成功了。

下面是核心代码。

static void con_net_status_changed_event(u8 status )
{switch(status){case NETIF_WIFI_JOIN_SUCCESS:{mbox1 = lv_msgbox_create(NULL, "", "WIFI JOIN SUCCESS", NULL, true);lv_obj_center(mbox1);wifi_on=true;}break;case NETIF_WIFI_JOIN_FAILED:{mbox1 = lv_msgbox_create(NULL, "", "WIFI JOIN FAILED", NULL, true);lv_obj_center(mbox1);wifi_on=false;}break;case NETIF_WIFI_DISCONNECTED:{mbox1 = lv_msgbox_create(NULL, "", "WIFI DISCONNECTED", NULL, true);lv_obj_center(mbox1);wifi_on=false;}break;case NETIF_IP_NET_UP:{struct tls_ethif *tmpethif = tls_netif_get_ethif();ip_addr_t *ip=&tmpethif->ip_addr;sprintf(wifi_ip,"%d.%d.%d.%d", ip4_addr1(ip_2_ip4(ip)),ip4_addr2(ip_2_ip4(ip)), ip4_addr3(ip_2_ip4(ip)), ip4_addr4(ip_2_ip4(ip)));  printf("wifi_ip:%s\n",wifi_ip);
#if TLS_CONFIG_IPV6print_ipaddr(&tmpethif->ip6_addr[0]);print_ipaddr(&tmpethif->ip6_addr[1]);print_ipaddr(&tmpethif->ip6_addr[2]);
#endif}break;default://printf("UNKONWN STATE:%d\n", status);break;}
}int demo_connect_net(char *ssid, char *pwd)
{struct tls_param_ip *ip_param = NULL;u8 wireless_protocol = 0;if (!ssid){return WM_FAILED;}printf("ssid:%s\n", ssid);printf("password:%s\n", pwd);tls_wifi_disconnect();tls_param_get(TLS_PARAM_ID_WPROTOCOL, (void *) &wireless_protocol, TRUE);if (TLS_PARAM_IEEE80211_INFRA != wireless_protocol){tls_wifi_softap_destroy();wireless_protocol = TLS_PARAM_IEEE80211_INFRA;tls_param_set(TLS_PARAM_ID_WPROTOCOL, (void *) &wireless_protocol, FALSE);}tls_wifi_set_oneshot_flag(0);ip_param = tls_mem_alloc(sizeof(struct tls_param_ip));if (ip_param){tls_param_get(TLS_PARAM_ID_IP, ip_param, FALSE);ip_param->dhcp_enable = TRUE;tls_param_set(TLS_PARAM_ID_IP, ip_param, FALSE);tls_mem_free(ip_param);}tls_netif_add_status_event(con_net_status_changed_event);tls_wifi_connect((u8 *)ssid, strlen(ssid), (u8 *)pwd, strlen(pwd));printf("\nplease wait connect net......\n");return WM_SUCCESS;
}

NTP功能

前面的版本时间是手动设置,我们有了wifi,那自然是更希望联网对时了。界面就很简单,一个button就可以。

点击的时候,参考demo中的ntp操作,并且设置到实时时钟rtc中,就完成了

核心操作函数。

static void ntp_process(lv_event_t * e)
{lv_obj_t * mbox1=NULL;char resultntp[128]={0};unsigned int t;    struct tm *tblock;t = tls_ntp_client();tblock = localtime((const time_t *)&t);    //switch to local timetblock->tm_mon+=1;tls_set_rtc(tblock);sprintf(resultntp,"time:%d.%d.%d %02d:%02d:%02d",tblock->tm_year,tblock->tm_mon,tblock->tm_mday,tblock->tm_hour,tblock->tm_min,tblock->tm_sec);mbox1 = lv_msgbox_create(NULL, "", resultntp, NULL, true);lv_obj_center(mbox1);
}

天气预报

这里就是简单的自动调用web的客户端程序,参考demo,访问一个天气预报的接口,需要是http的,然后解析一下返回的数据即可。

我这里返回的数据是json格式,只取了天气那一项,然后显示到界面上就可以。

简陋是简陋了点,不过道理就是这样

注意事项

联网与不联网,可以通过记录在全局变量中,控制桌面不同的app出现,当wifi不连接的时候,我这里只显示本地的日期和时间设置,不显示NTP与天气预报

当网络连接之后,才显示联网的设置,并且不再显示本地设置时间和日期

并且在设置的操作之后,尽量要添加msg box来提示操作结果。

另外。这个w801的资源也比较紧张,之前还能放张老师的照片,现在只能黑屏当背景了

介绍硬件

这个单片机的主机,其实就是一块HLK W801的主板,加了一个触摸显示屏做的,被我焊接了一下,因为杜邦线实在是太容易掉了,反正也没别的屏幕了,然后加了一个DHT11模块,就被我塞到一个牙线盒子里了,

感兴趣的可以自己做一个。

代码下载

虽然是提供《代码下载地址》,
不过按照前面的步骤,还是自己一步一步搞一下更有成就感。因为关键的点基本都说清楚了。
最重要一点,毕竟下载还要花钱。

结束语

今天还是分享一些暖心的事情,毕竟生活还是烦心的事多,需要些温暖。


我跟我夫人说,我是一个没有远虑的人,如果眼前没有近忧,我就会觉得生活很快乐。小孩子也是这样,如果不是正在挨批评,他也永远都是快乐的。

单片机---HLK-W801图形框架LVGL下开发(四)相关推荐

  1. 单片机---HLK-W801图形框架LVGL移植

    背景介绍 最近接触到了一个开源的显示框架lvgl,在跑起了demo的时刻,发现这确实是个酷酷的东西. LVGL的作者是来自匈牙利的Gabor Kiss-Vamosikisvegabor,LVGL用C语 ...

  2. [Qt教程] 第20篇 2D绘图(十)图形视图框架(下)

    [Qt教程] 第20篇 2D绘图(十)图形视图框架(下) 楼主  发表于 2013-5-4 15:43:02 | 查看: 861| 回复: 0 图形视图框架(下) 版权声明 该文章原创于Qter开源社 ...

  3. 在桌面Linux环境下开发图形界面程序的方案对比

    在Linux下开发GUI程序的方法有很多,比如Gnome桌面使用GTK+作为默认的图形界面库,KDE桌面使用Qt作为默认的图形界面库,wxWidgets则是另一个使用广泛的图形库,此外使用Java中的 ...

  4. php的yii2框架下开发环境xampp,vim,xdebug,DBGp的搭建

    2019独角兽企业重金招聘Python工程师标准>>> 引言 Yii1.1的搭建过程见这里.下面做少许改动,加入composer部分,使之用于Yii2. 选择Linux桌面环境Dee ...

  5. 在 Linux 下开发和下载8051单片机程序

    在 Linux 下开发和下载8051单片机程序 在 Linux 下需要用 sdcc 开发8051单片机程序,用 stcgal 这个 python 程序将编译好的8051单片机程序下载到裸机上. sdc ...

  6. 【storybook】你需要一款能在独立环境下开发组件并生成可视化控件文档的框架吗?(一)

    storybook 介绍 入门 说说用法 prop-types .stories.jsx 下一篇: https://blog.csdn.net/tuzi007a/article/details/129 ...

  7. 写好测试,提升应用质量。涨薪分分钟!!!(二)之单元测试下开发模式、技术框架选择

    目录: 四. 单元测试下开发模式.技术框架选择 单元测试是按照测试范围来划分的.TDD.BDD 是按照开发模式来划分的.因此就有各种排列组合,这里我们只关心单元测试下的 TDD.BDD 方案. 在单元 ...

  8. 开源轻量级显示框架LVGL简介

    #01 LVGL是什么 LVGL的作者是来自匈牙利的Gabor Kiss-Vamosikisvegabor,LVGL用C语言编写,以实现最大的兼容性(与C ++兼容),模拟器可在没有嵌入式硬件的PC上 ...

  9. 【LVGL应用开发--基于STM32】第1章 初识LVGL

    文章目录 前言 1.1 LVGL简介 1.2 LVGL移植要求 1.3 LVGL源码下载与介绍 前言 在实际应用中,我们时常需要制作 UI 界面来实现人机交互,简单的 UI 可以直接编写代码,但对于那 ...

  10. Tao 1.2.0图形框架发布

    Tao 1.2.0图形框架发布 Tao图形框架是方便在Mono和.Net环境下进行游戏相关开发的库绑定和实用工具集.目前,对以下库提供支持: Cg - [Cg website] DevIL - [De ...

最新文章

  1. 02、在层级未知情况下通过递归查找子物体
  2. windows 代理软件_一款强大的远程控制实用软件,分享给你……
  3. 有时间担心中年危机,还不如用忧虑的时间来提升自己——再论程序员该如何避免所谓的中年危机...
  4. c++11 thread类的简单使用
  5. 腾讯会议扩容背后:100万核计算资源全由自研服务器星星海支撑
  6. win2k 修改时间服务器,Win2K服务器端设置教程 第四节 WWW服务器的设置(上)
  7. TCP/IP学习笔记
  8. 欧菲光:预计2020年全年净利润为8.1亿-9.1亿元
  9. 【Java笔记】【Java核心技术卷1】chapter3 D4变量
  10. python配什么数据库_python中常见数据库有哪些
  11. Linux命令:grep awk sed详解
  12. 2014蓝桥杯:李白打酒;奇怪的分式(枚举,最大公约数)
  13. 区块链 以太坊 智能合约 如何销毁 废弃 selfdestruct
  14. spring定时器详解
  15. 《老路用得上的商学课》16-20学习笔记
  16. python 经典图书排行榜_书榜 | 计算机书籍(9.2-9.8)销售排行榜
  17. auc是ROC曲线面积的直观理解
  18. python开发抢票软件_python自动抢票神器
  19. 【蓝桥杯-单片机学习笔记(三)】共阳数码管的静态显示
  20. 搭建个人网站---域名+解析+github

热门文章

  1. 基于ADS仿真的465khz检波电路
  2. DNS劫持新方法(“侧信道攻击“攻破“端口随机化“的研究)
  3. 大功率MOS管选型手册及可申请样品-KIA MOS管
  4. MySQL 数值拼接字符串
  5. 【图像压缩】基于PCNN实现图像的压缩重建附matlab代码
  6. Fragstats运行内存不够或卡顿问题解决
  7. PCS7服务器数据包安装位置,PCS7中应用PH服务器的配置问题
  8. sakai mysql_开源网络教学平台SAKAI开发环境的搭建 | 学步园
  9. JavaWeb书城项目(尚硅谷视频整理自用)
  10. 尔雅计算机基础答案山大,大学计算机基础2018尔雅满分答案