安信可ESP-C3-12F模组应用之物联网时钟

Posted 安信可科技

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安信可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

以上是关于安信可ESP-C3-12F模组应用之物联网时钟的主要内容,如果未能解决你的问题,请参考以下文章

安信可内测离线语音模块VB-01与ESP-C3-12F通信

开源硬件小项目:安信可ESP-C3F控制WS2812

二次开发应用安信可ESP32/ESP8266模组入网阿里生活物联网平台

安信可EC系列模组接入OneNET物联网开放平台的多协议接入产品

安信可EC系列模组接入OneNET物联网开放平台的多协议接入产品

安信可EC系列模组接入OneNET物联网开放平台的多协议接入产品