【嵌入式】复刻SQFMI开源的Watchy墨水屏电子表——(2)软件部分

        书接上文 基于乐鑫 ESP32-PICO-D4 模块的墨水屏智能手表开源项目Watchy 完成了硬件部分,接下来就是软件部分:

一 开发环境配置(Arduino + ESP32)

       首先需要进行 Arduino + ESP32 开发环境的安装配置,过程参考之前的帖子

【嵌入式】Arduino IDE + ESP32开发环境配置_arduino ide esp32-CSDN博客

【1】可以从Arduino中文社区获取所需的安装包:

【2】下载 Arduino IDE 2.2.1 版本并安装(不太推荐最新版本的IDE,踩到的坑和解决办法参考上面的帖子)。这个过程中选择默认或者自定义的安装地址均可(注意不要有中文路径),另外提示的驱动之类需要全部安装上;

【3】修改中文并添加附加开发板地址:

  1. 打开Arduino IDE菜单 > 文件 >首选项 >编辑器语言 >中文(简体);
  2. 打开Arduino IDE菜单 > 文件 >首选项,在 附加开发板管理器网址输入框中,填入以下网址:

https://arduino.me/packages/esp32.json

【4】安装社区离线包:

        先关闭Anduino IDE,再使用下载好的esp32安装包,直接运行,程序会自动解压到相应位置(我这边使用的是ESP32 2.0.9版本)。

        解压完成后,重启Arduino IDE,即可在 菜单栏>工具>开发板 中找到你使用的esp32开发板。

        至此完成了 Arduino + ESP32 开发环境的配置。

二 Watchy相关库的下载安装

        Watchy 预装了固件,可演示所有基本功能。 您还可以在 Arduino 中尝试不同的表盘和示例。所以在上面开发环境的基础上,可以直接导入 Watchy 库:

【1】项目——>导入库——>管理库,搜索 Watchy,安装最新版本(我这边安装的是V1.4.14版本):

【2】其依赖项也都自动下载,确保所有依赖项都已更新到最新版本,包括 GxEPD2、Adafruit GFX、DS3232RTC、BMA423、WiFiManager、Arduino_JSON、rtc_pcf8563 等。

        至此完成了Watchy库及其依赖项的下载安装。

三 编译烧录

【1】拉取项目软件,以下两种方式均可

        (1)从开源软件库https://github.com/sqfmi/Watchy上拉取V1.4.14软件版本,选择对应界面示例的工程文件直接进入Arduino:

        (2)从库中直接选取示例:

【2】 插入 Watchy 上的 USB,选择显示的串行端口。如果没有任何显示,或者上传有问题,请确保您安装了 USB 串口驱动程序(CP210x USB to UART Bridge VCP Drivers - Silicon Labs)。 还要确保使用的是 USB 数据线,而不是充电线。 还要尝试不同的 USB 端口;

【3】选择 工具——>开发板——>ESP32 Arduino——>Watchy

【4】选择 工具——>Board Revision——>Watchy v2.0

【5】选择 工具——>Partition Scheme——>Huge App

【6】其他选项默认即可,选择好之后如下所示:

【7】验证示例并上传到之前焊好的 Watchy 硬件

        验证成功之后的打印:

        上传成功之后的打印:

        至此程序成功编译烧录。

四 配置和使用

        程序烧录进去之后,应该可以看到墨水屏上出现预期界面,但是时间不对,Wifi也没有连接,这都需要通过四个按钮进入菜单进行配置:

【1】日期时间配置

        按 SW1(菜单/确认)进入菜单,选择 Set Time 进入日期时间配置界面,配置完成之后确认自动退回主界面。此时若实时时钟芯片也正常工作,那么就会开始走时了。

【2】WiFi配置

        (1)按 SW1(菜单/确认)进入菜单,选择 Setup WiFi 进入WiFi配置界面

        (2)从手机或电脑/笔记本电脑等其他设备连接到 "Watchy Ap "无线网络;

        (3)自动跳转或者在浏览器中打开 192.168.4.1;

        (4)点击 "Configure WiFi"(配置 WiFi)。选择要连接的外部WiFi,并输入 SSID 和密码(注:SSID 可通过此屏幕顶部列出的网络预填);

        (5)点击 "保存 "按钮并等待 Watchy 。 如果连接失败,Watchy 会显示 "Setup failed & timed out!",否则会显示本地 IP 地址和已连接网络的 SSID 并进行确认。连接成功如下所示:

【3】天气配置

        连接WiFi的情况下,可以通过 https://openweathermap.org/current#cityid 网站获得天气。setting.h 中,默认是纽约的天气,如需修改,要查找中对应城市的API ID:

        而后修改 setting,h 中的CITY_ID 宏即可:

#define CITY_ID "1799962" //Nan Jing City https://openweathermap.org/current#cityid

【4】自定义界面

(1)创建基本表盘

        要创建基本表盘,只需用自定义代码覆盖 drawWatchFace() 方法即可,例如 myFirstWatchFace.ino

#include <Watchy.h> //include the Watchy library
#include <Fonts/FreeMonoOblique24pt7b.h> //include any fonts you want to use
#include "settings.h" //same file as the one from 7_SEG exampleclass MyFirstWatchFace : public Watchy{ //inherit and extend Watchy classpublic:MyFirstWatchFace(const watchySettings& s) : Watchy(s) {}void drawWatchFace(){ //override this method to customize how the watch face looksdisplay.setFont(&FreeMonoOblique24pt7b);display.setCursor(25, 110);if(currentTime.Hour < 10){ //use the currentTime struct to print latest timedisplay.print("0");}display.print(currentTime.Hour);display.print(":");if(currentTime.Minute < 10){display.print("0");}  display.println(currentTime.Minute);   }
};MyFirstWatchFace m(settings); //instantiate your watchfacevoid setup() {m.init(); //call init in setup
}void loop() {// this should never run, Watchy deep sleeps after init();
}

(2)显示图像

        由于电子纸显示屏仅为黑白,因此您需要先将希望显示的任何图像/图标转换为黑白。 然后需要将图像转换成字节数组,并存储到 Watchy 的闪存中。

        可以使用我上传资源https://download.csdn.net/download/sinat_33408502/90490883中的 Image2Lcd 2.9 工具或者作者提供的网络工具 image2cpp 将图像转换为字节数组:

  1. 上传你的图片,然后调整设置。 如果图像已经是黑白的,那么可以将亮度阈值设为默认值;如果图像是彩色的,则可以调整该设置,使图像在预览时看起来合适;
  2. 在 "代码输出格式 "选项中,选择 Arduino 代码,在标识符下为其命名,然后单击 "生成代码"。 复制文本框中的内容并粘贴到与 Arduino 草图相同目录下的 *.h 文件中;
  3. 在手表界面文件(如 myFirstWatchFace.ino)中包含该头文件,如 #include "myImage.h";
  4. 在 drawWatchFace() 方法中使用 display.drawBitmap(x_origin, y_origin, imageByteArrayName, width, height, color) 来显示图像。 这些绘制/打印语句的顺序很重要,如果先调用 display.drawBitmap(),然后再调用 display.println("Hello World!"),文本就会显示在图像的顶部。

(3)修改字体

        可以使用我上传资源https://download.csdn.net/download/sinat_33408502/90490883中的 PCtoLCD200工具或者作者提供的网络工具truetype2gfx - Converting fonts from TrueType to Adafruit GFX进行转换自定义字体:

  1. 上传所选字体并设置字体大小。 点击获取 GFX 字体文件下载字体文件,如 Seven_Segment10pt7b.h;
  2. 在手表界面文件(如 myFirstWatchFace.ino)中包含该头文件,如 #include "Seven_Segment10pt7b.h";
  3. 使用 display.setFont(&Seven_Segment10pt7b) 设置当前字体(不要忘记字体名称前的 "ampersand")。 每次希望使用其他字体时,都必须调用 display.setFont() 方法。 使用 display.setCursor(x, y) 设置开始打印文本的位置,坐标指的是要打印文本的左下角。

(4)界面模拟器 WatchySim(https://github.com/LeeHolmes/watchysim

        当您开发出更复杂的表盘时,反复修改、编译并上传到 Watchy 的过程可能会非常繁琐。 当您的 Watchy 只能报告现实生活中的情况时,要反复检查您的表盘是否能处理所有可能的情况(如天气状况和步数)也是一项挑战。

        为此,社区开发了 WatchySim - Watchy 的模拟器。 WatchySim 为您提供了一个类似 Watchy 的 SDK 来开发您的手表界面,但您也可以在一个标准的基于 Windows GDI 的应用程序中测试它们:

【5】成果展示

        焊接 & 烧录完成之后的显示:

        没做外壳,没装陀螺仪芯片(所以步数为0),电池用橡皮筋绑了一下。完成了上面的日期时间、WiFi、天气相关配置的成果展示:

五 附录

【1】官网:Watchy by SQFMI | Watchy

【2】Watchy硬件开源地址:https://github.com/sqfmi/watchy-hardware

【3】Watchy软件开源地址:https://github.com/sqfmi/Watchy

【4】Watchy界面模拟器开源地址:https://github.com/LeeHolmes/watchysim

【5】自制ESP32墨水屏手表——Watchy(硬件):https://zhuanlan.zhihu.com/p/496892487

【6】Arduino IDE + ESP32开发环境配置:【嵌入式】Arduino IDE + ESP32开发环境配置_arduino ide esp32-CSDN博客

【7】复刻SQFMI开源的Watchy墨水屏电子表——(1)硬件部分:

【嵌入式】复刻SQFMI开源的Watchy墨水屏电子表——(1)硬件部分-CSDNhuoqu

【8】图片转换工具(Image2Lcd 2.9)和字库转换工具(PCtoLCD200):https://download.csdn.net/download/sinat_33408502/90490883

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/37304.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于微信小程序端base64解码问题

由于atob是浏览器端的&#xff0c;对于微信小程序不支持&#xff0c;导致模拟器【开发工具】显示正常&#xff0c;但真机异常解析失败问题&#xff0c;微信小程序原有的api&#xff0c;官方文档中也废弃了 解决方案&#xff1a; 调用&#xff1a; const decodedString ba…

如何通过Odoo 18创建与配置服务器操作

如何通过Odoo 18创建与配置服务器操作 服务器操作是Odoo实现业务流程自动化的核心工具&#xff0c;允许你在服务器端执行自动化任务&#xff0c;通常由按钮点击或自动化工作流等事件触发。这些操作使用 Python 编写&#xff0c;能够执行复杂的业务逻辑&#xff0c;从而增强 Od…

Windows主机、虚拟机Ubuntu、开发板,三者之间文件互传

以下内容源于日常学习的整理&#xff0c;欢迎交流。 下图是Windows主机、虚拟机Ubuntu、开发者三者之间文件互传的方式示意图&#xff1a; 注意&#xff0c;下面谈及的所有方式&#xff0c;都要求两者的IP地址处于同一网段&#xff0c;涉及到的软件资源见felm。 一、Windows主…

[设计模式与源码]1_Spring三级缓存中的单例模式

欢迎来到啾啾的博客&#x1f431;&#xff0c;一个致力于构建完善的Java程序员知识体系的博客&#x1f4da;&#xff0c;记录学习的点滴&#xff0c;分享工作的思考、实用的技巧&#xff0c;偶尔分享一些杂谈&#x1f4ac;。 欢迎评论交流&#xff0c;感谢您的阅读&#x1f604…

微服务架构中的API网关:Spring Cloud与Kong/Traefik等方案对比

微服务架构中的API网关&#xff1a;Spring Cloud与Kong/Traefik等方案对比 一、API 网关的概念二、API 网关的主要功能2.1 统一入口与路由转发2.2 安全与权限控制2.3 流量管理与容错2.4 API 管理与聚合2.5 监控与日志2.5 协议转换与适配2.6 控制平面与配置管理 三、API 网关选型…

中兴B860AV3.2-T/B860AV3.1-T2_S905L3-B_2+8G_安卓9.0_先线刷+后卡刷固件-完美修复反复重启瑕疵

中兴电信B860AV3.2-T&#xff0f;B860AV3.1-T2_晶晨S905L3-B芯片_28G_安卓9.0_先线刷后卡刷-刷机固件包&#xff0c;完美修复刷机后盒子反复重启的瑕疵。 这两款盒子是可以通刷的&#xff0c;最早这个固件之前论坛本人以及其他水友都有分享交流过不少的固件&#xff0c;大概都…

Stable Diffusion lora训练(一)

一、不同维度的LoRA训练步数建议 2D风格训练 数据规模&#xff1a;建议20-50张高质量图片&#xff08;分辨率≥10241024&#xff09;&#xff0c;覆盖多角度、多表情的平面风格。步数范围&#xff1a;总步数控制在1000-2000步&#xff0c;公式为 总步数 Repeat Image Epoch …

Web3 时代数据保护的关键挑战与应对策略

Web3 时代数据保护的关键挑战与应对策略 随着互联网技术的飞速发展&#xff0c;我们正步入 Web3 时代&#xff0c;这是一个以去中心化、用户主权和数据隐私为核心的新时代。在这个时代&#xff0c;数据保护成为了一个至关重要的议题。本文将探讨 Web3 时代数据保护面临的主要挑…

微信小程序计算属性与监听器:miniprogram-computed

小程序框架没有提供计算属性相关的 api &#xff0c;但是官方为开发者提供了拓展工具库 miniprogram-computed。 该工具库提供了两个功能&#xff1a; 计算属性 computed监听器 watch 一、安装 miniprogram-computed 在项目的根目录下&#xff0c;使用如下命令&#xff0c;…

实体机安装linux视频教程。windows和ubuntu共存。启动时选择切换引导系统。

登录ubuntu官网下载iso镜像。 https://ubuntu.com/download 桌面版带G U I 操作界面&#xff0c;服务版靠远程命令行操作&#xff0c;类似wsl&#xff0c;没有图形界面&#xff0c;显卡跑满无需分散算力到显示交互界面上。 点alter natice downloads可以下载旧版本。具体版本选…

Numpy

一、Numpy优势 学习目标 目标 了解Numpy运算速度上的优势 知道Numpy的数组内存块风格 知道Numpy的并行化运算 1 Numpy介绍 Numpy&#xff08;Numerical Python&#xff09;是一个开源的Python科学计算库&#xff0c;用于快速处理任意维度的数组。 Numpy支持常见的数组和矩…

小红书不绑定手机号会显示ip吗

小红书作为一个生活方式分享平台&#xff0c;拥有庞大的用户群体。在小红书上&#xff0c;用户可以分享自己的生活点滴、购物心得、美食体验等&#xff0c;与其他用户进行互动交流。最近&#xff0c;不少用户对于小红书是否会在不绑定手机号的情况下显示IP属地产生了疑问&#…

FPGA multiboot 方案

FPGA multiboot 方案 初版方案 初版方案不需要软件参与&#xff0c;只是为了验证flash启动。当前已完成。 使用jtag 通过vivaod harwaremanager去将fpga bit流文件加载到demo板flash中。 具体操作&#xff1a; 约束添加for golden bitstream # 设置电源参考&#xff0c;1.…

SpringBoot的启动原理?

大家好&#xff0c;我是锋哥。今天分享关于【SpringBoot的启动原理&#xff1f;】面试题。希望对大家有帮助&#xff1b; SpringBoot的启动原理&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Boot的启动原理主要是通过 SpringApplication 类来…

aws训练快速入门教程

AWS 相关核心概念 简洁地介绍一下AWS训练云服务的核心关联概念: AWS核心服务层: 基础设施层: EC2(计算), S3(存储), RDS(数据库)等人工智能层: SageMaker(训练平台), AI服务等 机器学习服务分级: 高层: 预构建AI服务(开箱即用)中层: SageMaker(主要训练平台)底层: 框架和基…

(一)飞行器的姿态欧拉角, 欧拉旋转, 完全数学推导(基于坐标基的变换矩阵).(偏航角,俯仰角,横滚角)

(这篇写的全是基矢变换矩阵)不是坐标变换矩阵,坐标变换矩阵的话转置一下,之后会有推导. 是通过M转置变换到P撇点.

工程管理系统简介 工程管理系统源码 java工程管理系统 工程管理系统功能设计

鸿鹄工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离构建工程项目管理系统 1. 项目背景 一、随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;公司对内部工程管…

在 Windows 系统下,将 FFmpeg 编译为 .so 文件

1. 准备环境 确保你的 Windows 系统已安装以下工具&#xff1a; Android Studio NDK&#xff08;Native Development Kit&#xff09; MSYS2&#xff08;用于提供类 Unix 环境&#xff09; FFmpeg 源码 Git Bash&#xff08;可选&#xff0c;推荐使用&#xff09; 安装 …

蓝桥杯备考---》分类讨论之Fixed Points

这道题的意思啊&#xff0c;就是说我们在数组里输入n个数&#xff0c;我们尽可能让下标和数组的值相同&#xff0c;我们只能交换一次&#xff0c;最多能有多少个值和下标一样 这里我们需要分类讨论&#xff0c;如果每个下标的值都符合要求&#xff0c;我们就不交换了 如果不是…

什么是数学建模?数学建模是将实际问题转化为数学问题

数学建模是将实际问题转化为数学问题&#xff0c;并通过数学工具进行分析、求解和验证的过程。 一、数学建模的基本流程 问题分析 • 明确目标&#xff1a;确定需要解决的核心问题。 • 简化现实&#xff1a;识别关键变量、忽略次要因素。 • 定义输入和输出&#xff1a;明确模…