兰州做网站优化/网站建设黄页
ESP32使用TCP HTTP访问API接口JSON解析获取数据
- API接口
- 代码解析
- 获取时间
- 代码烧录效果
- 总结
API接口
单片机常用的API接口
基本都是返回的一串JSON格式
的数据,这里以ESP32
联网获取时间信息
作为获取API数据的示例,以便后续移植使用。
很多功能性的API接口
都可以直接百度找到,这里也是直接搜索 时间API接口
找到不少接口有下面几个
淘宝时间服务器时间接口:
http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp
返回json数据格式:
{"api":"mtop.common.getTimestamp","v":"*","ret":["SUCCESS::接口调用成功"],"data":{"t":"1586519130440"}}苏宁时间服务器接口api:
http://quan.suning.com/getSysTime.do
返回json数据格式:
{"sysTime2":"2020-04-10 19:46:50","sysTime1":"20200410194650"}腾讯获取当前时间API:
http://vv.video.qq.com/checktime?otype=json
返回数据格式:
QZOutputJson={"s":"o","t":1678083300,"ip":"xxx.xxx.xxx.xxx","pos":"---","rand":"B2Pg8mOVaTTJAA94YMiZzA=="};
测试下来这里比较推荐使用 淘宝的时间接口
,相对来说稳定一些,缺点是获取的是UTC时间的毫秒数需要进行计算得到具体时间。
需要代码可以在下方留言邮箱。
代码解析
下面是初始化以及主函数的主要功能代码
需要代码可以在下方留言或者私信邮箱,不要只留需要代码哦,没地方发。
void setup() {// put your setup code here, to run once:Serial.begin(115200); //启动串口通信,波特率为115200WifiConfiguration();
}void loop() {// put your main code here, to run repeatedly:int Circle;AgainStart:if(WiFi.status() == WL_CONNECTED) //如果wifi连接成功才执行一下操作{/*HTTP请求API函数并返回值给JSON函数进行解析,JSON函数取出来的需要的信息返回到 变量 JsonInformation 中*/ApiInformation = HTTPRequestApi();JsonInformation = ApiJSONAnalysis(ApiInformation);Circle = 3;while(JsonInformation=="null" && Circle--) //如果JsonInformation返回值为null那么循环3次请求时间的操作{ApiInformation = HTTPRequestApi();JsonInformation = ApiJSONAnalysis(ApiInformation);if(JsonInformation=="null" && Circle==0) goto AgainStart;}Serial.print("\r\nApi Information:\r\n");Serial.print(ApiInformation);Serial.print("\r\nJson Information:\r\n");Serial.print(JsonInformation);}else{Serial.print("\r\nwifi Reconnect...");WifiConfiguration();}delay(10000);//delay(10000);
}
头部宏定义
/*存储多个WiFi的连接信息*/
String WifiSSID="YXDZ"; //定义wifi名称
String WifiPassword="YXDZ1234"; //定义wifi密码/*定义获取北京时间需要访问的IP地址、端口以及网址子页或参数*/
const char* ApiHost = "api.m.taobao.com";
uint16_t ApiPort=80;
const char* GetSysApi = "/rest/api3.do?api=mtop.common.getTimestamp";/*存放最终API接口获取数据以及JSON解析转换后的信息*/
String ApiInformation = "";
String JsonInformation = "";void WifiConfiguration(void); //wifi初始化并连接
String HTTPRequestApi(void); //请求API
String ApiJSONAnalysis(String JsonData); //Api Json解析函数
定义的参数比较简单,用户如果需要访问其他的API接口,只需要修改 wifi的名称与密码
、API接口的地址
、端口
以及子页地址
如果刚好也是需要获取时间的话那么只需要将 wifi的名称与密码
修改为自己使用的即可
如果你需要的是访问其他的API或者网页
,那么可以参考下面的示例进行修改,当然JSON解析
的函数肯定是无效的了,由于参数不同后面JSON解析的函数需要另外编写并修改。
如下所示,如果我们需要访问其他的网页,例如:http://www.jxl.wiki:8082/test.txt (自己临时做的测试网页,不一定能一直访问),将宏定义中的参数修改为如下所示,即可变更为访问上面的网页了
/*定义获取北京时间需要访问的IP地址、端口以及网址子页或参数*/
const char* ApiHost = "www.jxl.wiki";
uint16_t ApiPort=8082;
const char* GetSysApi = "/test.txt";
网页显示结果如下所示,简单显示一个 Hello World!...
ESP32获取网页打印信息如下
获取时间
需要代码可以在下方留言或者私信邮箱,不要只留需要代码哦,没地方发。
由于时间是计算的从1970年1月1日
到现在的毫秒数,不能直观的展示给人看,因此示例代码中 String ApiJSONAnalysis(String JsonData);
这个函数中不仅做了json数据
的解析,另外还对时间做了处理,可以看成以下两个部分
String ApiJSONAnalysis(String JsonData) //Api Json解析函数
{/*从JSON数据中提取时间数据,但是是JSON格式的,需要转换成data time格式的,JSON格式时间是从1970年到现在的时间毫秒数*/String JSONTime,JsonAnalysisInformation;unsigned int Year,Month,Day,Hour,Minute,Second,MonthSecond,DaySecond,JSONTime_1_6,JSONTime_7_13; //Month存储第几月的时间,MonthSecond存储当年度过所有月的秒数,其他类似bool LeapYearFlag = 0; //闰年标志位,0为平年,1位闰年,默认参数为0const size_t capacity = JSON_OBJECT_SIZE(4) + JSON_ARRAY_SIZE(1) + JSON_OBJECT_SIZE(1) + 130;DynamicJsonDocument JsonDataObject(capacity);deserializeJson(JsonDataObject,JsonData);JsonAnalysisInformation = JsonDataObject["data"]["t"].as<String>();/*由于是获取的时间才有下面这部分,如果是其他的API接口可以不需要,直接返回获取到的JsonAnalysisInformation就可以*/JSONTime = JsonAnalysisInformation;/*unsigned int型无法存取这么大的数字,将string型拆分之后再转换为unsigned int型substring(N,M) 函数可以将第N个开始到第M个的字符串截取出来,之后再用toInt()转换成整形*/JSONTime_1_6 = (JSONTime.substring(0,6)).toInt()*10000; //从第1个数到第6个截取出来,第一个数的标号是0,最后一个不截取,并转化为unsigned int型数据,顺便*10000,以便节约后续计算资源JSONTime_7_13 = (JSONTime.substring(6,13)).toInt()/1000; //从第7个数到第13个截取出来,第一个数的标号是0,最后一个不截取,并转化为unsigned int型数据,顺便/1000把单位转换成秒,以便节约后续计算资源.........
其中只有下面这部分的代码是用来做json数据
解析的,只需要把定义的变量JsonAnalysisInformation
加上即可,其余的如果不需要可以全部删掉
const size_t capacity = JSON_OBJECT_SIZE(4) + JSON_ARRAY_SIZE(1) + JSON_OBJECT_SIZE(1) + 130;DynamicJsonDocument JsonDataObject(capacity);deserializeJson(JsonDataObject,JsonData);JsonAnalysisInformation = JsonDataObject["data"]["t"].as<String>();
代码烧录效果
这里使用的是一块C3的板子,ESP32、S2、C3都有过测试代码完全可以通用
总结
代码主要针对API接口的访问,JSON函数以及时间转换等功能可以参照进行修改,时间转换部分的代码过于臃肿,勿喷,勿喷。实在是一下没想到有什么好的办法只好硬着头皮去做转换了,功能看起来没什么问题索性就这样了。
相关文章:

ESP32使用TCP HTTP访问API接口JSON解析获取数据
ESP32使用TCP HTTP访问API接口JSON解析获取数据API接口代码解析获取时间代码烧录效果总结API接口 单片机常用的API接口基本都是返回的一串JSON格式的数据,这里以ESP32联网获取时间信息作为获取API数据的示例,以便后续移植使用。 很多功能性的API接…...

spring security 实现自定义认证和登录(4):使用token进行验证
前面我们实现了给客户端下发token,虽然客户端拿到了token,但我们还没处理客户端下一次携带token请求时如何验证,我们想要实现拿得到token之后,只需要验证token,不需要用户再携带用户名和密码了。 1. 禁用 UsernamePass…...

戴眼镜检测和识别2:Pytorch实现戴眼镜检测和识别(含戴眼镜数据集和训练代码)
Pytorch实现戴眼镜检测和识别(含戴眼镜数据集和训练代码) 目录 Pytorch实现戴眼镜检测和识别(含戴眼镜数据集和训练代码) 1.戴眼镜检测和识别方法 2.戴眼镜数据集 3.人脸检测模型 4.戴眼镜分类模型训练 (1)项目安装 (2)准…...

信息收集之Google Hacking
Google HackingGoogleHacking作为常用且方便的信息收集搜索引擎工具,它是利用谷歌搜索强大,可以搜出不想被看到的后台、泄露的信息、未授权访问,甚至还有一些网站配置密码和网站漏洞等。掌握了Google Hacking基本使用方法,或许下一…...

【面试题】如何避免使用过多的 if else?
大厂面试题分享 面试题库前后端面试题库 (面试必备) 推荐:★★★★★地址:前端面试题库一、引言相信大家听说过回调地狱——回调函数层层嵌套,极大降低代码可读性。其实,if-else层层嵌套,如下图…...

oneblog_justauth_三方登录配置【Gitee】
文章目录oneblog添加第三方平台gitee中创建三方应用完善信息oneblog添加第三方平台 1.oneblog管理端,点击左侧菜单 网站管理——>社会化登录配置管理 ,添加一个社会化登录 2.编辑信息如下,选择gitee平台后复制redirectUri,然后去gitee获取clientId和…...

33- PyTorch实现分类和线性回归 (PyTorch系列) (深度学习)
知识要点 pytorch最常见的创建模型的方式, 子类 读取数据: data pd.read_csv(./dataset/credit-a.csv, headerNone) 数据转换为tensor: X torch.from_numpy(X.values).type(torch.FloatTensor) 创建简单模型: from torch import nn model nn.Sequential(nn.Linear(15, 1…...

C++基础——Ubuntu下编写C++环境配置总结(C++基本简介、Ubuntu环境配置、编写简单C++例程)
【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《QT开发实战》 《嵌入式通用开发实战》 《从0到1学习嵌入式Linux开发》 《Android开发实战》 《实用硬件方案设计》 长期持续带来更多案例与技术文章分享…...

项目管理中,导致进度失控的五种错误
项目管理中对工期的控制主要是进度控制,在项目进行中中,由于项目时间跨度长,人员繁杂,如果管理不规范,就容易导致项目进度滞后,如何管理好施工进度是管理者需要解决的问题之一。 1、项目计划缺乏执行力 安…...

C# 中的abstract和virtual
重新理解了下关键字abstract,做出以下总结: 1.标记为abstract的类不能实例化,但是依然可以有构造函数,也可以重载构造函数,在子类中调用 2.abstract类中可以有abstract标记的方法和属性,也可以没有,被标记…...

第六十周总结——React数据管理
React数据管理 代码仓库 React批量更新 React中的批量更新就是将多次更新合并处理,最终只渲染一次,来获得更好的性能。 React18版本之前的批量更新 // react 17 react-dom 17 react-scripts 4.0.3 import * as ReactDOM from "react-dom"…...

Springboot之@Async异步指定自定义线程池使用
开发中会碰到一些耗时较长或者不需要立即得到执行结果的逻辑,比如消息推送、商品同步等都可以使用异步方法,这时我们可以用到Async。但是直接使用 Async 会有风险,当我们没有指定线程池时,他会默认使用其Spring自带的 SimpleAsync…...

视频知识点(23)- TS格式详解指南
*《音视频开发》系列-总览*(点我) 一、格式简介 TS视频封装格式,是一种被广泛应用的多媒体文件格式。它的全称是MPEG2-TS,其中TS是“Transport Stream”的缩写。TS(Transport Stream)流是一种传输流,它由固定长度(188 字节)的 TS 包组成,TS 包是对PES包的一种封装方式…...

linux篇【16】:传输层协议<后序>
目录 六.滑动窗口 (1)发送缓冲区结构 (2)滑动窗口介绍 (3)滑动窗口不一定只会向右移动。滑动窗口可以变大也可以变小。 (4)那么如果出现了丢包, 如何进行重传? 这里分两种情况…...

【C语言】动态内存管理
一.为什么存在动态内存分配? 我们已经掌握的内存开辟方式有:int val 20;//在栈空间上开辟四个字节 char arr[10] {0};//在栈空间上开辟10个字节的连续空间 但是上述的开辟空间的方式有两个特点: 1. 空间开辟大小是固定的。 2. 数组在申明的…...

【Pytorch】AutoGrad个人理解
前提知识:[Pytorch] 前向传播和反向传播示例_友人小A的博客-CSDN博客 目录 简介 叶子节点 Tensor AutoGrad Functions 简介 torch.autograd是PyTorch的自动微分引擎(自动求导),为神经网络训练提供动力。torch.autograd需要对…...

华硕z790让独显和集显同时工作
系统用了一段时间,现在想让显卡主要做深度学习训练,集显用来连接显示器。却发现显示器接到集显接口无信号。 打售后客服也没有解决,现在把解决方案记录一下。 这是客服给的方案: 请开机后进BIOS---Advanced---System Agent (SA)…...

提高编程思维的python代码
1.通过函数取差。举例:返回有差别的列表元素 from math import floordef difference_by(a,b,fn):b set(map(fn, b))return [i for i in a if fn(i) not in b] print(difference_by([2.1, 1.2], [2.3, 3.4], floor))2.一行代码调用多个函数 def add(a, b):return …...

CSS背景background属性整理
1.background-color background-color属性:设置元素的背景颜色 2.background-position background-position属性:设置背景图像的起始位置,需要把 background-attachment 属性设置为 "fixed",才能保证该属性在 Firefo…...

AQS底层源码深度剖析-Lock锁
目录 AQS底层源码深度剖析-Lock锁 ReentrantLock底层原理 为什么把获取锁失败的线程加入到阻塞队列中,而不是采取其它方法? 总结:三大核心原理 CAS是啥? 代码模拟一个CAS: 公平锁与非公平锁 可重入锁的应用场景&…...

网络编程(二)
6. TCP 三次握手四次挥手 HTTP 协议是 Hype Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器(sever)传输超文本到客户端(本地浏览器…...

访问学者进入美国哪些东西不能带?
随着疫情的稳定,各国签证的逐步放开,成功申请到国外访问学者、博士后如何顺利的进入国外,哪些东西不能带,下面就随知识人网小编一起看一看。一、畜禽肉类(Meats, Livestock and Poultry)不论是新鲜的、干燥的、罐头的、真空包装的…...

灵巧手抓持<分类><仿真>
获取灵巧手抓取物体时的抓持类型,需要考虑:手本身的结构、被抓取物体的形状尺寸、抓持操作任务的条件。 研究方法:基于模型的方法、基于数据驱动的方法 基于模型的方法:建立灵巧手抓持相关的运动学和动力学模型建立目标函数求解…...

CENTO OS上的网络安全工具(十九)ClickHouse集群部署
一、VMware上集群部署ClickHouse (一)网络设置 1. 通过修改文件设置网络参数 (1)CentOS 在CENTOS上的网络安全工具(十六)容器特色的Linux操作_lhyzws的博客-CSDN博客中我们提到过可以使用更改配置文件的方式…...

tesseract -图像识别
下载链接:https://digi.bib.uni-mannheim.de/tesseract/如下选择最新的版本,这里我选择tesseract-ocr-w64-setup-5.3.0.20221222.exe有如下python模块操作tesseractpyocr 国内源:pip install -i https://pypi.mirrors.ustc.edu.cn/simple/ py…...

JavaScript Math 算数对象
文章目录JavaScript Math 算数对象Math 对象Math 对象属性Math 对象方法算数值算数方法JavaScript Math 算数对象 Math(算数)对象的作用是:执行常见的算数任务。 Math 对象 Math(算数)对象的作用是:执行普…...

一体机HDATA节点添加和删除
瀚高数据库 目录 文档用途 详细信息 文档用途 一体机可在线添加、删除数据库集群节点。 详细信息 一体机可在线添加、删除数据库集群节点。具体操作步骤如下 一、节点添加 集群可以在其他机器上通过配置hghac.yaml文件,将新节点加入集群。 集群操作 1…...

关于 interface{} 会有啥注意事项?上
学习 golang ,对于 interface{} 接口类型,我们一定绕不过,咱们一起来看看 使用 interface{} 的时候,都有哪些注意事项吧 interface {} 可以用于模拟多态 xdm 咱们写一个简单的例子,就举动物的例子 写一个 Animal 的…...

Matlab中旧版modem.qammod与新版不兼容
最近,因为课题需要,在研究通信。在网上下了一个2015年左右的代码,其中用的是matlab旧版中的modem.qammod函数,但是旧版中的函数已经被删除了,(这里必须得吐槽一下,直接该函数内部运行机制就行呀…...

通达信指标公式颜色代码的四种写法(COLOR/RGB)
通达信指标公式颜色代码有四种写法,分别为COLOR颜色的英文、COLOR十六进制、RGBX十六进制、RGB(R,G,B)。标题有点尴尬,让我想到孔乙己“茴”字的四种写法,哈哈。 一、COLOR颜色的英文 “COLOR颜色的英文”这种写法比较简单,函数库…...