本帖最后由 灰太狼 于 2023-9-5 09:28 编辑
本帖最后由 灰太狼 于 2023-9-4 16:24 编辑
1.作品展示
作品功能可见以下B站视频
[桌面天气站 | 小安派 FreeRTOS+LVGL开发练习]
壳体的话可以见以下的帖子:【[模型分享] 小安派AiPi-Eyes-S1壳体】
开源程序链接:AiPi_HZY_Weather: 使用小安派eyes-s1开发的天气站程序 (gitee.com)
2.作品说明
2.1硬件部分
硬件上使用到了AiPi-Eye-S1开发板以及3.5寸 240*320像素的电容触摸屏,日常使用时使用USB线通过开发板上的typec接口为设备进行供电。使用USB转TTL工具进行程序下载。
2.2软件部分
①开发环境
个人是在Windows环境下使用VSCode进行项目的开发,具体的环境搭建过程可参考论坛中的帖子:【零基础搭建小安派Windows 开发环境】
②ui设计
本项目使用了LVGL图形库,使用相应的辅助开发工具SquareLine Studio来进行界面设计与C代码生成。
③天气信息获取
本项目使用易客云天气提供的免费天气API接口来获取当前地区基础七日天气与基础实况天气。由于请求数据时使用到用户ID与密钥参数,因此需要进行账号注册。
④程序设计思路
本项目程序参考了官方给的天气站示例(AiPi-Open-Kits/AiPi-Eyes_weather at master · Ai-Thinker-Open/AiPi-Open-Kits · GitHub),其整体的实现思路如下:
- 系统初始化
- 基于FreeRTOS创建多个任务
(1)
wifi_main WiFi运行任务;
(2) lvgl_task 运行LVGL,实现触摸屏显示与触摸功能,当触发网络连接条件时,会向队列中发送WiFi名称密码数据;
(3) bl61x_show_heap_size_task 通过串口打印内存占用情况(设定波特率为2000000);
(4) queue_task 分析处理队列数据,执行相应程序。各任务间的通信是基于队列实现的,目前该任务处理的队列数据包含以下4种:
a.WiFi名称密码数据 -> 数据保存,进行WiFi连接,WiFi连接成功会向队列中发送WiFi连接成功数据;
b.WiFi连接成功数据 -> 创建https_get_weather_task 任务来获取时间、天气信息;
c.未来七日天气数据 -> 更新屏幕显示内容;
d.基础实况天气数据 -> 更新屏幕显示内容。
(5) https_get_weather_task 通过https获取未来七日天气及基础实况天气,成功获取后将向队列中发送相应数据。任务通过定时器http_timers 来设定数据获取的频率。
3. 使用说明
3.1 固件烧录
以下操作需要再环境配置完成后进行。
①程序编译
在项目根目录下打开终端,输入make
如无错误,最终会显示以下内容
②固件烧录
在终端中输入make flash COMX=COMxx 其中xx为实际连接的下载器的COM口号,如下图中COM口为20。
根据提示按下复位按钮,进行烧录
3.2 网络配置与天气账号
(1)在网络配置菜单中输入要连接的WiFi名称及密码。
(2)在天气账号菜单中输入注册易客云天气后个人的appid与appsecret。
(3)点击连接按钮,若配置正确,则会跳转到以下界面
3.3 界面切换
在主界面下点击下图所示的对应区域,可切换至相应界面,在子界面下触摸底部按钮可切换至主界面
4. 其他说明
发现长时间运行,会因http服务器连接问题偶然出现卡死的问题,正尝试进行解决。 |