1、通过网络获取日期、时间以及当地天气温度
2、有模拟时钟、背景切换、语言切换等功能
esp32+lvgl桌面时钟天气
一、准备材料
esp32开发板、1.28寸圆屏幕(非触摸)。
二、软件开发过程
1、获取网络天气和时间。
esp32自带2.4gwifi功能。使用wifi功能需包含头文件WiFi.h,直接利用esp32的wifi功能从网络获取时间,该时间会同步至esp32的内部时钟,若此时将wifi断开,esp32仍能获取准确的时间。

完成这些设置后,创建一些变量来存储读取的时间数据,只需要利用lvgl的定时器来定时调用获取时间的函数,即能保证时间的准确。
网络天气的获取是利用心知天气来获取的,但是免费版本只能获取当日的天气温度,但对于我们来说已经足够了,若需定位功能,则只需将api函数接口中的location改为ip即可,有时候定位可能不太准确。

通过心知天气api获得的数据格式为json,可以利用开源库ArduinoJson来解析这些数据。若使用vscode+platformio开发,可以直接在库函数中搜索json。
获取天气的完整程序如下,仍利用lvgl的定时器来定时调用该函数以保证天气的实时更新。

2、模拟时钟。
模拟时钟我是利用lvgl的表盘控件meter来实现的,也可以自己贴一些表盘或者表针的图片,表盘和表针创建好以后,设置一个定时器,来定时的获取时间并更新指针位置。


3、天气图片的加入
天气图片可以在网上找,最好找一些矢量天气图片,可以在阿里巴巴矢量图标库上找。

找到合适的图片以后,将这些图片放入lvgl的官方图片转换器: Online image converter - BMP, JPG or PNG to C array or binary | LVGL
点击convert即能获得相应的c数组,使用前只需要先利用LV_IMG_DECLARE(test)声明就能直接使用。
4、动态图片的加入
动态图片与图片的原理相似,只不过动态图片是由多帧照片组合而来的。 先找一张尺寸合适的动态图片。
以上图的猪背猪为例子,利用帧数拆分工具在线GIF图片帧修改工具 - UU在线工具
将图片导入,拆分成帧并保存。

将这些图片利用上述的官方图片转换工具分别转换成c数组,并分别命名为beizhu_1-beizhu_4,现在调用的文件中声明。

再创建一个静态数组来存放这些文件。

最后直接使用即可。

效果图下图。

在做这个时钟摆件的过程中遇到了很多问题,但是确实也真的学到了很多,所以一定要动手实践。
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您
文章目录1.开发板选择*用到的资源2.串口通信(个人理解)3.代码分析(注释比较详细)1.主函数2.串口1配置3.串口2配置以及中断函数4.注意问题5.源码链接1.开发板选择我用的是STM32F103RCT6的板子,不过代码大概在F103系列的板子上都可以运行,我试过在野火103的霸道板上也可以,主要看一下串口对应的引脚一不一样就行了,不一样的就更改一下。*用到的资源keil5软件这里用到了两个串口资源,采集数据一个,串口通信一个,板子对应引脚如下:串口1,TX:PA9,RX:PA10串口2,TX:PA2,RX:PA32.串口通信(个人理解)我就从串口采集传感器数据这个过程说一下我自己的理解,
在Rails自动生成的功能测试(test/functional/products_controller_test.rb)中,我看到以下代码:classProductsControllerTest我的问题是:方法调用products()在哪里/如何定义?products(:one)到底是什么意思?看代码,大概意思是“创建一个产品”,但是它是如何工作的呢?注意我是Ruby/Rails的新手,如果这些是微不足道的问题,我深表歉意。 最佳答案 如果您查看test/fixtures文件夹,您会看到一个products.yml文件。这是在您创建
在我的一些Controller中,我有一个before_filter检查用户是否登录?用于CRUD操作。application.rbdeflogged_in?unlesscurrent_userredirect_toroot_pathendendprivatedefcurrent_user_sessionreturn@current_user_sessionifdefined?(@current_user_session)@current_user_session=UserSession.findenddefcurrent_userreturn@current_userifdefine
动画/*INITIALIZEANANIMATION 初始化一个动画*-----------------------*/lv_anim_ta;lv_anim_init(&a);/*MANDATORYSETTINGS 必选设置*------------------*//*Setthe"animator"function 设置“动画”功能*/lv_anim_set_exec_cb(&a,(lv_anim_exec_xcb_t)lv_obj_set_x);/*Setthe"animator"function*/lv_anim_set_var(&a,obj);/*Lengthoftheanim
LL库和HAL库简介LL:Low-Layer,底层库HAL:HardwareAbstractionLayer,硬件抽象层库LL库和hal库对比,很精简,这实际上是一个精简的库。LL库的配置选择如下:在STM32CUBEMX中,点击菜单的“ProjectManager”–>“AdvancedSettings”,在下面的界面中选择“AdvancedSettings”,然后在每个模块后面选择使用的库总结:1、如果使用的MCU是小容量的,那么STM32CubeLL将是最佳选择;2、如果结合可移植性和优化,使用STM32CubeHAL并使用特定的优化实现替换一些调用,可保持最大的可移植性。另外HAL和L
require'pp'p*1..10这会打印出1-10。为什么这么简洁?您还可以用它做什么? 最佳答案 它是“splat”运算符。它可用于分解数组和范围并在赋值期间收集值。这里收集赋值中的值:a,*b=1,2,3,4=>a=1b=[2,3,4]在此示例中,内部数组([3,4])中的值被分解并收集到包含数组中:a=[1,2,*[3,4]]=>a=[1,2,3,4]您可以定义将参数收集到数组中的函数:deffoo(*args)pargsendfoo(1,2,"three",4)=>[1,2,"three",4]
我读过的关于Ruby符号的每一篇文章都在谈论符号相对于字符串的效率。但是,这不是1970年代。我的电脑可以处理一些额外的垃圾收集。我错了吗?我拥有最新最好的奔腾双核处理器和4GBRAM。我认为这应该足以处理一些字符串。 最佳答案 您的计算机可能能够处理“一点点额外的垃圾收集”,但是当“一点点”发生在运行数百万次的内部循环中时呢?如果它在内存有限的嵌入式系统上运行呢?有很多地方你可以随意使用字符串,但在某些地方你不能。这完全取决于上下文。 关于ruby-现代计算机的功能是否不足以处理字符串
我正在使用Windows并尝试运行一个现有的功能包,该功能包最初是在MacOS上构建的,这允许他们通过使用带空格的"\"来解决问题。我正在使用Ruby2.2.3和Cucumber。功能名称包含空格,我无法更改它。我尝试使用""和''来绕过空白,但每次都有同样的问题。这是问题的一个例子。如果我运行:cucumberfeatures/'Namecontainingwhitespaces.feature'它工作正常。但是当我运行时:cucumber-pmy_profile和cucumber.yml包含:my_profile:features/'Namecontainingwhitespace
单元测试的好方法是测试脚本在执行之间保持正确数据的能力——在使用Ctrl-C终止脚本然后重新运行之后?是否有针对执行类似操作的现有模块或脚本的任何测试可以针对最佳实践进行审查? 最佳答案 像http://avdi.org/devblog/2010/07/19/greenletters-painless-automation-and-testing-for-command-line-applications/一样使用库或者期望、运行、终止并重新运行您的程序,并检查它是否运行正确。好的做法是将程序设计为独立的模块,每个模块都经过良好测试