FastBond2阶段2-基于ESP32的智能闹钟
该智能闹钟可同时显示环境的温度和湿度信息以及具体的时间与日期信息,可设置关闭闹铃的方式,让用户拥有更强的可自定义化,使用ESP32主控,提供了与其他物联网设备进行数据交换的接口。
标签
嵌入式系统
ESP32
FastBond第二季
KKBNO
更新2023-11-06
重庆电力高等专科学校
447

一、项目介绍

1. 简介:本项目是一个可以通过显示屏显示出湿度,温度和时间信息的智能闹钟,用户如果设定了闹钟,那么就可以选择关闭闹铃的方式,可以是一键关闭,也可以是通过输入正确的密码来关闭闹铃,以此来增强闹钟的叫醒功能,让睡眠更安心。由于主控使用了ESP32,其可以使用蓝牙和WiFi的功能也为后续接入其他物联网设备提供了可能。

2.市场应用介绍:该产品以较为新颖的概念,有别于传统的闹钟,以输入密码才能关闭闹钟的方式,可以预防他人误关你的闹钟,也集成了温湿度,让功能更齐全,同时主控为ESP32的缘故,也可做为丰富物联网生态的产品。

二、原理图及PCB介绍

流程图及原理图初步设计都是使用得捷的Scheme-it来完成,非常方便!!也希望在后续在更多的项目上用起来!在元件上,MCU使用了FastBond活动中要求厂商中的乐鑫ESP32-S3,强大的处理性能和功能助力我更便捷得实现了该项目。

本项目的主要框图如下,得捷网站链接如下:智能闹钟

FrZK-2xSgZlchRZsogJ45TKYJ01N

使用Scheme-it设计的原理图导出到KiCad后,有一些地方并不匹配,比如网络标签并不识别,用户自定义的符号引脚未分配等等,因此需要继续更改加以完善。经过完善的原理图如下:

FowBTqLDiAQje0lBuYft9pSVZ0qe

本项目由于采用机械键盘轴做为矩阵按键,故为节省PCB空间,节约成本,在原理图中并未添加ESP32-S3和电源部分,而是采用ESP32-S3的供电口为闹钟供电,而且将各数据IO口用排针引出,便于ESP32-S3连接,接下来对重点模块进行介绍:

Frc1tFZgCu08Esm5djbzbbOEULzC

该模块是本智能闹钟设计重点,设计需求为16个按键的键盘矩阵输出,而采用传统的矩阵电路,不仅要占用8个IO口,而且为防止鬼键现象,还需添加16个二极管,这不仅抢占了PCB空间,也为产品的稳定性埋下隐患,故该项目,采用74hc165d移位寄存器,它有串行输出,并行输入的特点,同时也支持多个74hc165d进行级联,扩充更多的并行输入口,例如本项目就采用两个74hc165d来扫描16个按键信息,而且经过级联后,对于MCU的IO口占用不变,仅需3个即可,采用该方案还能实现全键无冲的功能,为后续开发键盘提供了技术基础。

之后便是PCB绘制了,PCB图如下:

FgilHkiDYMPYGHChRM5Pxd1blU5f

三、功能展示

Fn8SbbYv07WoOWVioy9TMT5mwYja

图中OLED显示屏年月时钟时间显示正常,DHT11的温湿度也读取正在,其中Alarm Clock显示ON,表示闹钟已开启,下面便显示闹钟时间为18:30,后面的P(Password)显示ON,表明密码关闭闹钟已开启。

四、关键代码展示

74hc165读取并行输入口数据代码:

def key_74hc165_read_2byte():
    i = 0
    temp = 0
    
    HC165_CE.value(1)
    
    HC165_PL.value(0)
    
    HC165_PL.value(1)
    
    HC165_CE.value(0)
    
    if HC165_OUT() == 1:
        temp |= 0x01
    while i < 15:
        temp = temp << 1
        HC165_CLK.value(0)
        time.sleep_us(5)
        #time.sleep_us(5)
        HC165_CLK.value(1)
        
        if HC165_OUT() == 1:
            temp |= 0x01
            
        i += 1
    return temp

读取时间代码:

from machine import RTC

def get_current_time(rtc):
    """
    获取当前时间并返回一个包含年、月、日、时、分和秒的元组。
    """
    current_time = rtc.datetime()
    year, month, day, week, hour, minute, second, _ = current_time
    return year, month, day, hour, minute, second

def format_time_strings(year, month, day, hour, minute, second):
    """
    根据给定的时间信息,格式化日期和时间字符串。
    """
    date_str = "{:02d}-{:02d}-{:02d}".format(year, month, day)
    time_str = "{:02d}:{:02d}:{:02d}".format(hour, minute, second)
    return date_str, time_str

读取dht11数据:

import dht
from machine import Pin

class DHT11:
    def __init__(self, pin):
        self.dht_sensor = dht.DHT11(Pin(pin))

    def read_temperature_and_humidity(self):
        try:
            self.dht_sensor.measure()
            temperature_celsius = self.dht_sensor.temperature()
            humidity_percentage = self.dht_sensor.humidity()
            return temperature_celsius, humidity_percentage
        except Exception as e:
            return None

将74hc165读取数据与按键值匹配:

def key():
    key_74hc165_init()
    
    key_num = 0
    key_last = key_74hc165_read_2byte()
    time.sleep_us(40)
    key_next = key_74hc165_read_2byte()
    
    if key_last == key_next:
        
        if key_next == 32512: key_num = 1
        if key_next == 48896: key_num = 2
        if key_next == 57088: key_num = 3
        if key_next == 61184: key_num = 4
        if key_next == 63232: key_num = 5
        if key_next == 64256: key_num = 6
        if key_next == 64768: key_num = 7
        if key_next == 65024: key_num = 8
        if key_next == 65408: key_num = 9
        if key_next == 65344: key_num = 10
        if key_next == 65312: key_num = 11
        if key_next == 65296: key_num = 12
        if key_next == 65288: key_num = 13
        if key_next == 65284: key_num = 14
        if key_next == 65282: key_num = 15
        if key_next == 65281: key_num = 16
        
    return key_num

五、总结

很感谢硬禾学堂举办的FastBond2活动,让我有机会通过这个活动使用一些未曾尝试过的芯片来做一些不大但很有意义的制作。这之中虽然遇到了很多难题,例如由于ESP-S3使用的micro python在网络上实例和教程少,加之没学过python,第一次学习该语言,对语言有应用熟练度也不高,对自身挑战难度高,但经过埋头学习后,收获颇大。对于该产品来说还不够便携,后续也打算不断优化,将MCU和电池一起加装在PCB上,同时也使用更高功率的喇叭,提高闹钟的音量,让该闹钟能真正实用起来,走进我的日常生活中。

 

附件下载
密码闹钟.kicad_sch
密码闹钟程序.rar
团队介绍
我们是一群充满激情、对电子技术着迷的人,我们通过自学、实践和与社区互动来不断提高自己的技能和知识,追求在电子领域的创新和实用性应用。我们会在学习中或个人兴趣中找到机会,将电子技术应用到各种不同的领域中。
团队成员
KKBNO
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号