IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> 安信可ESP-C3-12F模组应用之物联网时钟 -> 正文阅读

[嵌入式]安信可ESP-C3-12F模组应用之物联网时钟

1. 项目功能简介

物联网时钟应用以安信可ESP-C3-12F模组为主控模块,外接MAX7219 八位数码管、DS1302 RTC时钟模块、5个功能按键以及两个只是灯组成。设备访问NTP服务器获取本地时间,并存储到DS1302 RTC时钟中,RTC时钟基于当前的时间计时,同时,实时时间通过数码管显示出来。设备可通过按键指示进入各种模式,模式包括:时间自动校准模式、手动校准模式、以及配网模式。
物联网时钟主要由五个功能模块组成:
a. NTP时间获取,用于时间校准
b. RTC实时时钟,用于系统计时
c. 8位数码管显示模块,用于显示当前时间或模式切换
d. 按键,用于工作模式的切换
e. LED灯,用于网络状态指示

2. 硬件准备

硬件名称数量
ESP-C3-12F模组1
4位阴极数码管2
MAX7219驱动芯片1
DS1302 RTC时钟模块1
按键5
LED灯2
LED灯2
AMS11171
电容、电阻若干

3. 源码分析

整个设备源码主要分为三大块:NTP时间获取、MAX7219 八位数码管驱动以及DS1302 RTC时钟模块驱动。
在这里插入图片描述

3.1 NTP时间获取分析

NTP时间的获取,我们通过调用ESP32C3官方SDK中的SNTP函数库的API即可实现NTP时间的获取,具体操作步骤如下:

  1. 初始化sntp:
	sntp_setoperatingmode(SNTP_OPMODE_POLL);
	sntp_setservername(0, "ntp1.aliyun.com);		//配置访问的NTP服务器
	sntp_init();								
  1. 获取时间戳并解析:
    setenv("TZ", "CST-8", 1);						//设置中国时区——东八区
    tzset();
    time(&now);										//读取时间戳
    SNTP_SET_SYSTEM_TIME(now);
    localtime_r(&now, &timeinfo);					///解析时间戳,获取年月日时分秒周等信息

3.2 MAX7219 八位数码管驱动分析

MAX7219 八位数码管模块由MAX7219芯片以及两个4位阴极数码管组成,其中MAX7219芯片用于驱动并点亮数码管,从而实现实时时间的显示功能。
MAX7219芯片主要通过半双工的SPI总线实现驱动,在本设备中,我们通过模拟SPI总线的方法实现对改芯片的驱动。驱动该芯片主要用到的API有:

  1. 引脚初始化:max7219_spi_gpio_init(void)
	gpio_config_t max7219_io = {
		.intr_type = GPIO_INTR_DISABLE,
		.mode = GPIO_MODE_OUTPUT,
		.pin_bit_mask = MAX7219_PIN_SEL,
		.pull_down_en = 0,
		.pull_up_en = 0,
	};
	gpio_config(&max7219_io);
  1. 写一个字节数据:** spi_max7129_write_byte(uint8_t data) **
    uint8_t i = 0;
    gpio_set_level(PIN_NUM_CS, 0);
    for (;i < 8;i++) {
        gpio_set_level(PIN_NUM_CLK, 0);
        gpio_set_level(PIN_NUM_MOSI, data & 0X80);
        data = data << 1;
        gpio_set_level(PIN_NUM_CLK, 1);
    }
  1. 写数据到指定寄存器中:** write_max7129(uint8_t address, uint8_t data) **
    gpio_set_level(PIN_NUM_CS, 0);
    spi_max7129_write_byte(address);
    spi_max7129_write_byte(data);
    gpio_set_level(PIN_NUM_CS, 1);

最后,用户根据max7129的芯片数据手册写数据至对应的配置寄存器中,用于配置数码管的显示亮度等参数以及设置显示内容。这里我们通过配置显示检测寄存器用以检测数码管是否正常工作。
通过数据手册描述(如下图)可得,显示检测我们需要往0x0F寄存器写入0x01数据:
在这里插入图片描述
代码实现:

    max7219_spi_gpio_init();
	write_max7129(0x0f, 0x01);

3.3 DS1302 RTC时钟模块驱动分析

DS1302 RTC时钟模块主要通过同步半双工通讯串口完成驱动,该模块的驱动需要用到一根时钟线(I/O)、一根数据线(SCLK)以及一根控制线。用户根据该模块数据手册中关于驱动的时序图写驱动程序。相关驱动代码如下:

  1. 读、写以及传输接口:
	void DS1302_transferBegin(DS1302_Dev* dev);
	void DS1302_transferEnd(DS1302_Dev* dev);
	void DS1302_writeAddrCmd(DS1302_Dev* dev, uint8_t value);
	void DS1302_writeByte(DS1302_Dev* dev, uint8_t value);
	uint8_t DS1302_readByte(DS1302_Dev* dev);
	void DS1302_readBuffer(DS1302_Dev* dev, void* buf, uint8_t len);
  1. 时间获取以及写入接口:
void DS1302_setDateTime(DS1302_Dev* dev, DS1302_DateTime* dateTime);
bool DS1302_getDateTime(DS1302_Dev* dev, DS1302_DateTime* dateTime);
void DS1302_setTime(DS1302_Dev* dev, uint8_t hour, uint8_t minute, uint8_t second);
bool DS1302_getTime(DS1302_Dev* dev, uint8_t* hour, uint8_t* minute, uint8_t* second);
  1. 数据格式转换接口:
uint8_t bcdToDec(uint8_t bcd);
uint8_t decToBcd(uint8_t dec);

3.4 工程源码获取

源码获取链接:https://gitee.com/seahi007/esp-c3_-io-ttimer.git

4. 效果展示

在这里插入图片描述

更多资料

以上就是本期分享的内容,目的在于让大家快速适应新品方案的开发,以上提供的驱动源码联系我们可以免费提供

官方官网:https://www.ai-thinker.com
开发资料:https://docs.ai-thinker.com/
官方论坛:http://bbs.ai-thinker.com
公司地址: 深圳市宝安区西乡固戍华丰智慧创新港C栋410

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-24 15:04:06  更:2021-10-24 15:05:21 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:52:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码