站长网站建设,网站空间和域名区别,html创建站点的步骤,网站的功能包括哪些内容ESP32使用TCP HTTP访问API接口JSON解析获取数据API接口代码解析获取时间代码烧录效果总结API接口 单片机常用的API接口基本都是返回的一串JSON格式的数据#xff0c;这里以ESP32联网获取时间信息作为获取API数据的示例#xff0c;以便后续移植使用。 很多功能性的API接…
ESP32使用TCP HTTP访问API接口JSON解析获取数据API接口代码解析获取时间代码烧录效果总结API接口 单片机常用的API接口基本都是返回的一串JSON格式的数据这里以ESP32联网获取时间信息作为获取API数据的示例以便后续移植使用。 很多功能性的API接口都可以直接百度找到这里也是直接搜索 时间API接口 找到不少接口有下面几个
淘宝时间服务器时间接口
http://api.m.taobao.com/rest/api3.do?apimtop.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?otypejson
返回数据格式
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(JsonInformationnull Circle--) //如果JsonInformation返回值为null那么循环3次请求时间的操作{ApiInformation HTTPRequestApi();JsonInformation ApiJSONAnalysis(ApiInformation);if(JsonInformationnull Circle0) 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 WifiSSIDYXDZ; //定义wifi名称
String WifiPasswordYXDZ1234; //定义wifi密码/*定义获取北京时间需要访问的IP地址、端口以及网址子页或参数*/
const char* ApiHost api.m.taobao.com;
uint16_t ApiPort80;
const char* GetSysApi /rest/api3.do?apimtop.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 ApiPort8082;
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].asString();/*由于是获取的时间才有下面这部分,如果是其他的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].asString();代码烧录效果 这里使用的是一块C3的板子ESP32、S2、C3都有过测试代码完全可以通用 总结 代码主要针对API接口的访问JSON函数以及时间转换等功能可以参照进行修改时间转换部分的代码过于臃肿勿喷勿喷。实在是一下没想到有什么好的办法只好硬着头皮去做转换了功能看起来没什么问题索性就这样了。