完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我正在使用带有 C 语言的 esp-open-sdk 的ESP8266。
我尝试使用此代码来获取时间戳,但每次都失败 - 我只得到 0 : sntp_set_timezone(2); sntp_setservername(0, "fr.pool.ntp.org"); sntp_init(); 时间戳 = sntp_get_current_timestamp(); os_printf("time : %d and %sn", timestamp, sntp_get_real_time(timestamp)); 正如您可能已经从主题中了解到的那样,我正在尝试连接到服务器以执行 https 请求(我正在使用 espconn_secure_*** 函数),但每次都失败。 它可能是因为时间的关系(由于证书的有效期随时间推移而无法进行身份验证)或由于不支持的协议。TLS 协议用于安全交易,服务器使用 TLSv1.2,我在互联网上读到ESP8266仅支持 TLSv1.1;是吗? 另一件奇怪的事情是,在我尝试建立 tcp 连接后,我正确地获得了时间戳。 您接下来可以看到我如何尝试连接到服务器 - 在地址0x70000,有我正在尝试连接 ESP 的服务器的 CA: espconn_secure_ca_enable(1、0x70); espconn_secure_connect(&conn); 我是否正确使用espconn_secure_ca_enable?我是否给他正确的文件进行处理?这个功能有必要吗? |
|
相关推荐
1个回答
|
|
要在ESP8266上使用SNTP协议连接到SSL服务器,您需要确保正确配置SNTP库并获取正确的时间戳。以下是一些步骤和代码示例,帮助您实现这一目标。
1. 首先,确保您的ESP8266开发板已连接到互联网。 2. 在您的代码中,包含必要的头文件: ```c #include "osapi.h" #include "esp8266.h" #include "mem.h" #include "user_interface.h" #include "sntp.h" #include "espconn.h" #include "ssl3.h" ``` 3. 初始化SNTP: ```c void ICACHE_FLASH_ATTR user_init(void) { // 设置时区 sntp_set_timezone(8); // 设置NTP服务器 sntp_setservername(0, "pool.ntp.org"); // 初始化SNTP sntp_init(); } ``` 4. 获取当前时间戳: ```c os_timer_t sntp_time_get_timer; void ICACHE_FLASH_ATTR sntp_time_get_cb(void *arg) { time_t now = 0; struct tm timeinfo = {0}; char strftime_buf[64]; // 获取当前时间戳 now = sntp_get_current_timestamp(); if (now == 0) { os_printf("Failed to get timen"); } else { localtime_r(&now, &timeinfo); strftime(strftime_buf, sizeof(strftime_buf), "%c", &timeinfo); os_printf("Got time: %sn", strftime_buf); } } void ICACHE_FLASH_ATTR sntp_time_get() { os_timer_disarm(&sntp_time_get_timer); os_timer_setfn(&sntp_time_get_timer, (os_timer_func_t *)sntp_time_get_cb, NULL); os_timer_arm(&sntp_time_get_timer, 5000, 0); // 5秒后获取时间 } ``` 5. 在`user_init`函数中调用`sntp_time_get`: ```c void ICACHE_FLASH_ATTR user_init(void) { // 设置时区 sntp_set_timezone(8); // 设置NTP服务器 sntp_setservername(0, "pool.ntp.org"); // 初始化SNTP sntp_init(); // 获取时间戳 sntp_time_get(); } ``` 6. 确保您的ESP8266具有正确的SSL证书。您可以使用`espconn_secure_*`函数连接到HTTPS服务器。以下是连接到HTTPS服务器的示例代码: ```c #include "espconn.h" #include "mem.h" #include "osapi.h" #include "user_interface.h" LOCAL const char *default_certificate = "..."; // 这里填入您的SSL证书 LOCAL void ICACHE_FLASH_ATTR https_client_recv(void *arg, char *data, unsigned short len) { struct espconn *pesp_conn = (struct espconn *)arg; os_printf("Recv data: %sn", data); espconn_secure_disconnect(pesp_conn); } LOCAL void ICACHE_FLASH_ATTR https_client_connect(void *arg, struct espconn *pesp_conn) { if (pesp_conn == NULL) return; char *get_request = "GET / HTTP/1.1rnHost: www.example.comrnConnection: closernrn"; espconn_secure_send(pesp_conn, get_request, os_strlen(get_request)); } LOCAL void ICACHE_FLASH_ATTR https_client_reconnect(void *arg, struct espconn *pesp_conn) { espconn_secure_disconnect(pesp_conn); } LOCAL void ICACHE_FLASH_ATTR https_client_init(void) { struct espconn *pesp_conn = (struct espconn *)os_zalloc(sizeof(struct espconn)); espconn_secure_set_default_certificate(default_certificate, os_strlen(default_certificate)); espconn_secure_set_opt(pesp_conn, ESPCONN_FLAG_SECURE); pesp_conn->type = ESPCONN_TCP; pesp_conn->state = ESPCONN_NONE; pesp_conn->proto.tcp = (esp_tcp *)os_zalloc(sizeof(esp_tcp)); pesp_conn->proto.tcp->local_port = espconn_port(); pesp_conn->proto.tcp->remote_port = 443; struct ip_info ipconfig; os_memset(&ipconfig, 0, sizeof(ipconfig)); wifi_get_ip_info(STATION_IF, &ipconfig); os_memcpy(pesp_conn->proto.tcp->remote_ip, &ipconfig.ip, 4); espconn_secure_connect(pesp_conn); espconn_regist_recvcb(pesp_conn, https_client_recv); espconn_regist_connectcb(pesp_conn, https_client_connect); espconn_regist_reconcb(pesp_conn, https_client_reconnect); } void ICACHE |
|
|
|
只有小组成员才能发言,加入小组>>
545浏览 6评论
457浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
438浏览 5评论
441浏览 4评论
411浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 13:02 , Processed in 0.711439 second(s), Total 82, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号