【ART-Pi与RT-Thread入门】⑦启用NTP同步时钟


本篇是基于上一篇 【ART-Pi与RT-Thread入门】⑥启用ART-Pi硬件RTC和Alarm组件的项目来进行

添加netutils组件

在项目的RT-Thread Settings软件包点击+Add
在这里插入图片描述
搜索netutils并添加
在这里插入图片描述

使能NTP 客户端

双击netutils进入配置
在这里插入图片描述
选中使能NTP 客户端
在这里插入图片描述

NTP服务器设置

NTP服务器可以在两个地方指定:

  1. 在软件包的settings中设置
    在这里插入图片描述
  2. 直接在代码中设定
ntp_sync_to_rtc("time1.cloud.tencent.com");

>>>>>>>点击这里查找好用的ntp服务器<<<<<<<

连接WIFI的几种方法

这里说一下快速连接wifi的几种方法

1. 使用finsh命令

在finsh命令行中使用 wifi join ssid password即可。

2. 代码中直接设置ssid和密码

#define WLAN_SSID               "ssid"
#define WLAN_PASSWORD           "password"
...
rt_wlan_connect(WLAN_SSID, WLAN_PASSWORD);

然后在代码中添加如下语句可以下次自动重连:

 /* init Wi-Fi auto connect feature */
    wlan_autoconnect_init();
    /* enable auto reconnect on WLAN device */
    rt_wlan_config_autoreconnect(RT_TRUE);

设置wlan连接回调

ntp需要网络才能正确获得时间,所以我们需要注册一个wlan连接成功的回调函数,在此回调函数中执行ntp同步。

rt_wlan_register_event_handler(RT_WLAN_EVT_READY, wlan_ready_handler, RT_NULL);

在回调函数中进行一次同步,并且打印10次时间,然后创建一个ntp线程,线程每隔2小时进行一次同步。

void wlan_ready_handler(int event, struct rt_wlan_buff *buff, void *parameter)
{
    rt_kprintf("wlan ready, sync time to RTC...\r\n");
    ntp_sync_to_rtc("time1.cloud.tencent.com");
    time_t now;
    struct tm *info;
    char buffer[80];

    for (int i = 0; i< 10; i++)
    {
        time(&now);
        info = localtime(&now);
        strftime(buffer,80,"%Y%m%d_%H%M%S\n", info);//以年月日_时分秒的形式表示当前时间
        rt_kprintf("%s",buffer);
        rt_thread_mdelay(1000);
    }
    ntp_tid = rt_thread_create("ntp_thread", ntp_thread_entry, RT_NULL, 2048, 25, 10);
    if (ntp_tid != RT_NULL)
    {
        rt_thread_startup(ntp_tid);
    }
}

完整代码

/*
 * Copyright (c) 2006-2020, RT-Thread Development Team
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2020-09-02     RT-Thread    first version
 */

#include <rtthread.h>
#include <rtdevice.h>
#include "drv_common.h"

//#define WLAN_SSID               "ssid"
//#define WLAN_PASSWORD           "password"
#define LED_PIN GET_PIN(I, 8)

extern void wlan_autoconnect_init(void);
extern timer_t ntp_syn_to_rtc(const char* hostname);
static rt_thread_t ntp_tid;

static void ntp_thread_entry()
{
    rt_kprintf("ntp_thread started.");
    while(1)
    {
        ntp_sync_to_rtc("time1.cloud.tencent.com");
        rt_thread_mdelay(2*60*60*1000);//2 hours interval
    }

}


void wlan_ready_handler(int event, struct rt_wlan_buff *buff, void *parameter)
{
    rt_kprintf("wlan ready, sync time to RTC...\r\n");
    ntp_sync_to_rtc("time1.cloud.tencent.com");
    time_t now;
    struct tm *info;
    char buffer[80];

    for (int i = 0; i< 10; i++)
    {
        time(&now);
        info = localtime(&now);
        strftime(buffer,80,"%Y%m%d_%H%M%S\n", info);//以年月日_时分秒的形式表示当前时间
        rt_kprintf("%s",buffer);
        rt_thread_mdelay(1000);
    }
    ntp_tid = rt_thread_create("ntp_thread", ntp_thread_entry, RT_NULL, 2048, 25, 10);
    if (ntp_tid != RT_NULL)
    {
        rt_thread_startup(ntp_tid);
    }
}


int main(void)
{
    rt_uint32_t count = 1;
    rt_pin_mode(LED_PIN, PIN_MODE_OUTPUT);
    /* register network ready event callback */
    rt_wlan_register_event_handler(RT_WLAN_EVT_READY, wlan_ready_handler, RT_NULL);
    //Connect waln
//    rt_wlan_connect(WLAN_SSID, WLAN_PASSWORD);
    /* init Wi-Fi auto connect feature */
    wlan_autoconnect_init();
    /* enable auto reconnect on WLAN device */
    rt_wlan_config_autoreconnect(RT_TRUE);

    while(count++)
    {
        rt_thread_mdelay(500);
        rt_pin_write(LED_PIN, PIN_HIGH);
        rt_thread_mdelay(500);
        rt_pin_write(LED_PIN, PIN_LOW);
    }
    return RT_EOK;
}

#include "stm32h7xx.h"
static int vtor_config(void)
{
    /* Vector Table Relocation in Internal QSPI_FLASH */
    SCB->VTOR = QSPI_BASE;
    return 0;
}
INIT_BOARD_EXPORT(vtor_config);
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作者:Signx 概述 当前的人脸识别摄像头,价格昂贵,拟改造成stm32单片机版本的,节省成本 功能: 1.连接摄像头OV2640,用fish指令开启摄像头 2.将摄像头数据传到电脑显示图片 3.将摄像头数据传到spi显示屏显示(未完成) 4.用人脸识别算法识别人脸开锁(未完成) 5.可登录到tencent Cloud云平台,实现上云 开发环境: 硬件:Art-pi+OV2640 RT-Thread版本:4.0.2 开发工具及版本:rt-stuidio V2.0.0 RT-Thread使用情况概述: 硬件框架:art-pi官方开发板+OV2640(dma+DCMI) 软件框架说明: 见思维导图 软件模块说明: 见思维导图 该系统的思维脑图如下: 演示效果: 视频: 实物图如下: 实现的效果如图: 连接电路如图所示: 实现功能: 1.连接摄像头OV2640,用fish指令开启摄像头 2.将摄像头数据传到电脑显示图片 3.将摄像头数据传到spi显示屏显示(未完成) 4.用人脸识别算法识别人脸开锁(未完成) 5.可登录到tencent Cloud云平台,实现上云主要碰到的技术难点: 1.art-pi组建库里有ov2640的软件包,本以为直接能用的,结果发现有很多缺失 首先是io口的确实,没有定义到足够的io口,所以代码里又加上了io口的定义以及初始化: io口定义代码: typedef enum { BMP_QQVGA = 0x00, /* BMP Image QQVGA 160x120 Size */ BMP_QVGA = 0x01, /* BMP Image VGA 800*480 Size */ JPEG_160x120 = 0x02, /* JPEG Image 160x120 Size */ JPEG_176x144 = 0x03, /* JPEG Image 176x144 Size */ JPEG_320x240 = 0x04, /* JPEG Image 320x240 Size */ JPEG_352x288 = 0x05 /* JPEG Image 352x288 Size */ }ImageFormat_TypeDef; /*摄像头接口 */ //IIC SCCB //#define CAMERA_I2C I2C1 //#define CAMERA_I2C_CLK_ENABLE() __HAL_RCC_I2C1_CLK_ENABLE() // //#define CAMERA_I2C_SCL_PIN GPIO_PIN_8 //#define CAMERA_I2C_SCL_GPIO_PORT GPIOB //#define CAMERA_I2C_SCL_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() //#define CAMERA_I2C_SCL_AF GPIO_AF4_I2C1 // //#define CAMERA_I2C_SDA_PIN GPIO_PIN_9 //#define CAMERA_I2C_SDA_GPIO_PORT GPIOB //#define CAMERA_I2C_SDA_GPIO_CLK_ENABLE() __HAL_RCC_GPIOB_CLK_ENABLE() //#define CAMERA_I2C_SDA_AF GPIO_AF4_I2C1 //VSYNC #define DCMI_VSYNC_GPIO_PORT GPIOI #define DCMI_VSYNC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOI_CLK_ENABLE() #define DCMI_VSYNC_GPIO_PIN GPIO_PIN_5 #define DCMI_VSYNC_AF GPIO_AF13_DCMI // HSYNC #define DCMI_HSYNC_GPIO_PORT GPIOH #define DCMI_HSYNC_GPIO_CLK_ENABLE() __HAL_RCC_GPIOH_CLK_ENABLE() #define DCMI_HSYNC_GPIO_PIN GPIO_PIN_8 #define DCMI_HSYNC_AF GPIO_AF13_DCMI //PIXCLK #define DCMI_PIX

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值