0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何利用ESP8266实现智能手表的设计

科技观察员 来源:Hans-Günther Nusseck 作者:Hans-Günther Nusseck 2022-04-01 15:29 次阅读

这是一款简单的ESP8266手表,具有多个位置的 WiFi 连接、NTP 时间服务器同步和比较功能。

背景

你可以买一块现成的智能手表,它有很多花哨的功能,但实质上你并没有改变任何东西。或者你可以买一个类似蒸汽朋克的开发工具包手表,自己编写你感兴趣的功能。

这款手表实际上不是手表,而是一个设计为扫描 WiFi 网络、阻止选定连接、创建数十个网络和混淆 WiFi 扫描仪的设备。之前有人开发了类似的软件,里面有很多有趣的功能,但就是没有真正的时间显示。造成这种情况的一个原因可能是该设备不包含实时时钟 (RTC)。这意味着每次重新启动设备时都会丢失时间设置。但是该设备有一个 WiFi 芯片,因此只需要使用正确的代码之后,您就可以从时间服务器获取时间了。

NTP

我对 WiFi 攻击不感兴趣,但对如何实现时间服务器功能感兴趣。网络时间协议(NTP) 是一种基于网络的时钟同步协议。espressive ESP SDK提供了访问 NTP 服务器和轻松转换时间的功能。让您无需担心 UDP 连接和数据交换。只需包含库Time.h ,定义 NTP 服务器名称,从服务器创建时间变量,配置通信并获取时间:

pYYBAGJGqbyANhS1AACRbOvZZBY337.png

通过这种简单的方式,您可以从时间服务器获取当前时间(以秒为单位)。此值(NTP 时间戳)编码为自 1900 年 1 月 1 日 00:00:00 以来的秒数,也称为“纪元”。例如,值1587775785对应于以下日期:Saturday, 25. April 2020 00:49:45

要将 epoch 值转换为可管理的值,库中提供了函数localtime_r() 。此函数将纪元转换为结构,以便您可以直接处理分钟、秒、小时和日期值:

// the tm structure contains the following data:
//
// int tm_sec; --> 0 .. 59
// int tm_min; --> 0 .. 59
// int tm_hour; --> 0 .. 23
// int tm_mday; --> 1 .. 31
// int tm_mon; --> 0 .. 11 (0 = January)
// int tm_year; --> years since 1900
// int tm_wday; --> 0 .. 6 (0 = Sunday)
// int tm_yday; --> 0 .. 365
// int tm_isdst; --> Daylight Saving Time flag
//
tm dateTime;

void loop() {
// time() fetch the actual time from the NTP server
// and store it as epoch into the variable
time(&NTPTime);
// localtime_r() converts the epoch into the tm-structure
localtime_r(&NTPTime, &dateTime);
Serial.print(dateTime.tm_hour);
Serial.print(':');
Serial.print(dateTime.tm_min);
Serial.print(':');
Serial.println(dateTime.tm_sec);
delay(1000);
}

注意:月份 ( tm_mon ) 和星期几 ( tm_wday ) 的值:它们从 0 开始,而不是从 1!要获得正确的年份值,您只需将值tm_year添加 1900 。

手表

为了保持代码简单、干净和可读,我为手表编写了一个类,它封装了 LED、按钮和显示屏。Watch-object 需要在开始时进行初始化。然后您可以轻松访问 LED、显示屏或按钮,而无需任何进一步的初始化。

poYBAGJGqbWAfbCAAAIJR_ySfu4099.png

该库需要以下库:

poYBAGJGqbCAY02rAADBMIQ59AQ650.png

确保它们已安装。最简单的方法是在 Platformio.ini 文件中输入 lib 依赖项:

pYYBAGJGqayAPFHpAAB1_fadvEA020.png

还可以看到,我选择了标准的espressif8266平台和nodemcuv2作为板定义,这可以使上传工作正常,无需任何进一步的调整。

时间漂移

由于手表没有实时时钟(RTC),因此必须使用处理器时钟来计算时间。sysTime_now ()函数返回自系统启动以来经过的秒数。该值也是一个纪元,因此可以使用函数localtime_r()进行转换。但这还不是全部:您还可以简单地为其添加一个纪元并获得一个新的时间值。这正是我在代码中所做的,以使系统时间与 NTP 时间同步。启动时系统时间为零,即 01.01.1970。按下导航按钮,从时间服务器检索当前时间信息。然后将此信息添加到系统时间。因此,系统时间具有当前时间,并且每次调用该函数sysTime_now()实际时间被计数。再次向上按下按钮可从时间服务器检索当前时间值。但是现在当前系统时间值只与时间服务器值进行比较。时间本身没有改变。如果处理器时钟非常准确,那么即使在较长一段时间内也不会出现可测量的偏差。

时区

时间服务器的返回值始终为 UTC。但是有一种非常简单的方法可以自动将时间转换为所需的时区:您只需通过设置TZ环境变量来指定时区:

poYBAGJGqaaALuPFAABdzHSYs_8403.png

现在,无论何时调用localtime_r()函数,值都会根据配置的时区自动转换。时区字符串看起来很奇怪,但这里有一个时区字符串列表,可以简单地复制您需要的字符串。最理想的情况是在字符串中也定义了夏令时,因此切换的同时也会自动变换。唯一需要注意的是电池始终处于充电状态。根据使用情况,它可能会持续大约 7 小时左右。

其他版本

该固件“开箱即用”也适用于旧版手表和“DSTIKE WiFi Deauther OLED V6”板:

pYYBAGJGqaOAaC_oAAYvHI7yjQc143.png

故障排除

例:使用最新版本的显示驱动程序时,屏幕不再工作,并且屏幕显示黑色。

为此,必须编辑 platformio.ini 文件中的 lib-deps:

pYYBAGJGqZ-ATiqzAAAypzeplE8714.png

然后用这些命令

poYBAGJGqZqAU1aiAAAdjiVBO4U739.png
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • WIFI
    +关注

    关注

    81

    文章

    5297

    浏览量

    203778
  • 智能手表
    +关注

    关注

    36

    文章

    3291

    浏览量

    114111
  • ESP8266
    +关注

    关注

    50

    文章

    962

    浏览量

    45045
收藏 人收藏

    评论

    相关推荐

    ESP8266系列模块选型

    ESP8266系列模块选型ESP8266 ESP-01 ESO-02
    发表于 01-05 17:34 37次下载

    使用esp8266实现STM32联网(最简单USART方法)

    到电脑上的java程序 这一篇 esp8266与STM32连接,电脑通过STM32配置esp8266实现联网发送数据具体流程如下图 2= esp8266怎么和STM32连接(引脚连
    发表于 11-22 11:51 1.3w次阅读

    esp8266 at指令集详解

    ESP8266可广泛应用于智能电网、智能交通、智能家具、手持设备、工业控制等领域。本文介绍了esp8266 at指令集,以及
    发表于 12-08 13:52 14.4w次阅读
    <b class='flag-5'>esp8266</b> at指令集详解

    使用ESP8266实现智能杯垫的设计资料免费下载

    本文档的主要内容详细介绍的是使用ESP8266实现智能杯垫的设计原理图和源程序文件免费下载。
    发表于 02-24 08:00 1次下载

    ESP8266

    优点1.性能稳定ESP8266EX 的工作温度范围大,且能够保持稳定的性能,能适应各种操作环境。2.低功耗ESP8266EX 专为移动设备、可穿戴电子产品和物联网应用而设计,通过多项专有技术实现
    发表于 11-07 10:36 26次下载
    <b class='flag-5'>ESP8266</b>

    基于ESp8266智能插座

    基于ESp8266智能插座基于ESP8266+STM32F1的智慧生活套件文章目录基于ESP8266+STM32F1的智慧生活套件一、项目背景二、项目分析三、产品框架四、设计思路五、
    发表于 12-01 09:21 32次下载
    基于<b class='flag-5'>ESp8266</b>的<b class='flag-5'>智能</b>插座

    利用ESP8266模块实现远程用手机控制开关

    利用ESP8266模块实现远程用手机控制开关文章目录前言一、ESP8266是什么?二、使用步骤1.密钥与核心库2.连接Wi-Fi3.手机端控制函数总结插入链接与图片列表前言随着万物联网
    发表于 12-04 13:06 16次下载
    <b class='flag-5'>利用</b><b class='flag-5'>ESP8266</b>模块<b class='flag-5'>实现</b>远程用手机控制开关

    利用esp8266接入小爱同学,实现智能台灯的改造物联网初识

    硬件准备1.继电器WIFI智能插座模块2.USB转ESP8266WIFI模块3.ESP8266模块软件环境搭建1.小爱同学app,或者米家app,点灯 Blinker app2.ArdunioIDE
    发表于 01-04 10:44 17次下载
    <b class='flag-5'>利用</b><b class='flag-5'>esp8266</b>接入小爱同学,<b class='flag-5'>实现</b><b class='flag-5'>智能</b>台灯的改造物联网初识

    ESP8266使用教程之初识

    串口与MCU通信,内置 TCP/IP 协议栈,实现串口与 WiFi 之间的装换。​ 通过正点原子的 ATK-ESP8266,传统的串口设备只需要通过串口配置,就可以通过网络传输自己的数据。二.引...
    发表于 01-04 18:59 80次下载
    <b class='flag-5'>ESP8266</b>使用教程之初识

    ESP8266智能手表设计分享

    电子发烧友网站提供《ESP8266智能手表设计分享.zip》资料免费下载
    发表于 08-09 10:49 1次下载
    <b class='flag-5'>ESP8266</b><b class='flag-5'>智能手表</b>设计分享

    基于ESP8266的WiFi车

    该项目使用 NodeMcu esp8266 和 Blynk 由您的智能手机控制的最简单的 wifi 汽车。
    发表于 12-08 10:15 10次下载

    使用智能手机控制Esp8266情绪灯

    电子发烧友网站提供《使用智能手机控制Esp8266情绪灯.zip》资料免费下载
    发表于 02-07 09:22 1次下载
    使用<b class='flag-5'>智能手</b>机控制<b class='flag-5'>Esp8266</b>情绪灯

    ESP8266硬件

    目前市面上有关ESP8266模组有很多的种类,但是都是使用的乐鑫公司开发的ESP8266的wifi模组,而且种类也很多。
    的头像 发表于 02-10 14:25 4783次阅读
    <b class='flag-5'>ESP8266</b>硬件

    ESP8266接入小爱同学—智能LED台灯或风扇(利用继电器)

    的具体配置可参考 先说一下本次预期想要实现的功能: 1.利用WiFiManager库实现自动配网,亦能够满足在不同WiFi下可以不用更改程序即可链接不同的WiFi 2.利用
    发表于 05-04 11:37 1次下载
    <b class='flag-5'>ESP8266</b>接入小爱同学—<b class='flag-5'>智能</b>LED台灯或风扇(<b class='flag-5'>利用</b>继电器)

    ESP8266初次如何实现无线通信(基于电脑与ESP8266)

    一.需要的软件及硬件 1.软件 2.硬件 二.ESP8266的使用 .ESP8266的介绍 2.ESP8266进行初始AT指令的配置步骤 三.所用软件安装分享 ESP8266
    发表于 05-30 09:53 28次下载
    <b class='flag-5'>ESP8266</b>初次如何<b class='flag-5'>实现</b>无线通信(基于电脑与<b class='flag-5'>ESP8266</b>)