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
    +关注

    关注

    80

    文章

    5146

    浏览量

    199204
  • 智能手表
    +关注

    关注

    35

    文章

    3175

    浏览量

    111067
  • ESP8266
    +关注

    关注

    50

    文章

    944

    浏览量

    43771
收藏 人收藏

    评论

    相关推荐

    如何利用ESP8266实现氛围灯的设计?

    如何利用ESP8266实现氛围灯的设计?
    发表于 01-17 08:08

    基于ESP8266智能手表pcb设计

    描述ESP8266_SmartWatch
    发表于 07-26 06:22

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

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

    esp8266 at指令集详解

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

    esp8266中文资料汇总(esp8266引脚图_与单片机连接_串口wifi实例)

    本文首先介绍了esp8266引脚图功能与esp8266特性,其次介绍了 单片机与ESP8266串口连接及最小系统连接与程序分享,最后介绍了esp8266串口wifi实例。
    发表于 05-24 08:36 22w次阅读
    <b class='flag-5'>esp8266</b>中文资料汇总(<b class='flag-5'>esp8266</b>引脚图_与单片机连接_串口wifi实例)

    如何将ESP8266连接到WiFi

    在之前的ESP8266项目中,我简要介绍了ESP8266 WiFi模块,如何开始使用ESP8266和Arduino,ESP8266 ESP-
    的头像 发表于 07-29 11:32 8.5w次阅读
    如何将<b class='flag-5'>ESP8266</b>连接到WiFi

    怎样使用ESP8266 Flasher和Programmer烧写ESP8266 AT固件

    选择要连接的COM端口ESP8266 Flasher和Programmer + ESP8266 Wifi串行收发器模块。将BAUDRATE设置为115200。
    的头像 发表于 11-18 17:58 2w次阅读

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

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

    基于ESp8266智能插座

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

    ESP8266之硬件机理

    ESP8266硬件机理1.ESP8266简介2.硬件结构3.运行机理3.1 Warning3.2 机理4.快速搭建服务器Attention4.1进入STA模式4.2复位4.3获取附近能够连接
    发表于 12-09 12:21 29次下载
    <b class='flag-5'>ESP8266</b>之硬件机理

    ESP8266使用教程之初识

    串口与MCU通信,内置 TCP/IP 协议栈,实现串口与 WiFi 之间的装换。​ 通过正点原子的 ATK-ESP8266,传统的串口设备只需要通过串口配置,就可以通过网络传输自己的数据。二.引...
    发表于 01-04 18:59 76次下载
    <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 7次下载

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

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

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

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