ESP8266及数码管的网络时钟
ESP822芯片是一款既可以当做服务器又可以被当做客户端的开发板。当选择ESP8266作为客户端时,可以连接WIFI进行网络请求。当网络配置好以后可以使用https请求,对相关的API进行请求。
先展示一下结果:
如上图显示即为12月15日22时41分
第一步:驱动数码管
1.八位数码管是通过两片595芯片级联控制的共阳极数码管,电路图如下。
八位数码管对应八位,当每一位写入高电平时,就相当于选择了对应的数码管点亮。当速度足够快时,人的肉眼就不会分辨出闪烁的效果。比如说 0000 0001 就是选择最右边的数码管显示数字。当选中位选以后再进行八位的段选,也就是说控制数码管显示什么数字。每位数码管实质是由八个led灯组成。因为是共阳极数码管,因此写入低电平时led会点亮。比如说:写入 1001 1111 数码管就会显示数字 “1”。当写入 0000 0001 1001 1111 时就会出现最右边数码管点亮且显示数字“1”的现象。至于数码管到底是怎么工作的以及数码管怎么显示对应的数字,并不是本文章的重点,建议百度可以知道的更加详细。
代码如下:
//595数码管模块
void DTSMG(u16 buff)
{int i;digitalWrite(4,LOW);//拉低电平for(i=0;i<=15;i++) //循环将16位二进制数写入两片级联的595中{digitalWrite(5,LOW);//拉低电平if(((buff>>i)&0x0001)==0) { digitalWrite(16,LOW);}//DIO 待扫描引脚为低电平else if(((buff>>i)&0x0001)==1) { digitalWrite(16,HIGH);}//待扫描引脚为高电平for(int j=0;j<1000;j++);digitalWrite(5,HIGH);//将二进制信息移位送入595}for(int j=0;j<1000;j++);digitalWrite(4,HIGH);//将16位二进制信息通过595持续输出
}
以上便为数码管控制代码。
以下即为ESP8266作为客户端访问API的代码
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <ESP8266WebServer.h>#define ssid "12345678" //这里的12345678改为自己的WiFi名称
#define password "12345678" //这里的12345678改为自己的WiFi密码
//测试HTTPS通讯的网站
const char *host = "***********"; //这里更换为需要访问的域名
const int httpsPort = 443; //HTTPS请求的端口443
char *ch3;/ /用于存放时间数据数据
int ad[8];
int x;
int h=0;//数码管数据即 0,1,2,3,4,5,6,7,8,9
u16 shujubao[16]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x19};void setup() {Serial.begin(9600); //设置波特率WiFi.mode(WIFI_STA); //设置ESP8266为无线终端工作模式WiFi.begin(ssid, password); //连接目标WiFiSerial.println("");Serial.println("Connecting"); Serial.println("");// 等待连接while (WiFi.status() != WL_CONNECTED) { //WiFi.status() != WL_CONNECTED判断是否连接成功delay(500); //延时Serial.print("."); //没连接成功时循环输出“.”}Serial.println("");Serial.print("Connected to ");Serial.println(ssid);Serial.print("IP address: ");Serial.println(WiFi.localIP()); //成功连接后通过串口监视器显示WiFi名称以及ESP8266的IP地址。//此处为配置ESP8266相关的三个引脚pinMode(4,OUTPUT);//D2 RCLpinMode(5,OUTPUT);//D1 SCLpinMode(16,OUTPUT);//D0
}//{"sysTime2":"2021-12-26 13:58:02","sysTime1":"20211226135802"}
//以上为实际请求回来的数据,需要提取的有效信息为第50位至第57位void fang()
{https_connect(); // 实现HTTPS访问通讯for(int i=50;i<=57;i++)//循环使用switch语句实现类型转换,将有用信息转换为int类型{
switch(ch3[i])
{
case '0' : ad[i-50]=0;break;
case '1' : ad[i-50]=1;break;
case '2' : ad[i-50]=2;break;
case '3' : ad[i-50]=3;break;
case '4' : ad[i-50]=4;break;
case '5' : ad[i-50]=5;break;
case '6' : ad[i-50]=6;break;
case '7' : ad[i-50]=7;break;
case '8' : ad[i-50]=8;break;
case '9' : ad[i-50]=9;break;
}} }//此处为一直循环显示数码管的部分
void loop()
{if(h==9999){//调用请求函数fang();h=0;}h++;//1 0000 0001 1001 1111 DTSMG((0x01<<8)+shujubao[ad[0]]);for(int j=0;j<1000;j++);//此处为延时//2 0000 0010 0010 0101DTSMG((0x02<<8)+shujubao[ad[1]]);for(int j=0;j<1000;j++);//3 0000 0100 0000 1101DTSMG((0x04<<8)+shujubao[ad[2]]);for(int j=0;j<1000;j++);//4 0000 1000 1001 1001DTSMG((0x08<<8)+shujubao[ad[3]]);for(int j=0;j<1000;j++);//5 0001 0000 0100 1001DTSMG((0x10<<8)+shujubao[ad[4]]);for(int j=0;j<1000;j++);//6 0010 0000 0100 0001DTSMG((0x20<<8)+shujubao[ad[5]]);for(int j=0;j<1000;j++);//7 0100 0000 0001 1111DTSMG((0x40<<8)+shujubao[ad[6]]);for(int j=0;j<1000;j++);//8 1000 0000 0000 0001DTSMG((0x80<<8)+shujubao[ad[7]]);for(int j=0;j<1000;j++);}//数码管模块
void DTSMG(u16 buff)
{int i;digitalWrite(4,LOW);for(i=0;i<=15;i++){digitalWrite(5,LOW);if(((buff>>i)&0x0001)==0) { digitalWrite(16,LOW);}//DIOelse if(((buff>>i)&0x0001)==1) { digitalWrite(16,HIGH);}for(int j=0;j<1000;j++);digitalWrite(5,HIGH);}for(int j=0;j<1000;j++);digitalWrite(4,HIGH);
}//网络调取API函数
void https_connect()
{//建立WiFiClientSecure对象WiFiClientSecure httpsClient;//串口监视器显示域名 Serial.println(host);//无验证方式连接 httpsClient.setInsecure();//用来判断是否连接超时httpsClient.setTimeout(15000); delay(1000); //延时Serial.println("HTTPS Connecting");Serial.println("");int r=0; while((!httpsClient.connect(host,httpsPort)) && (r < 300)){ // 尝试连接服务器并等待delay(100); //httpsClient.connect(host,httpsPort)用于连接到服务器Serial.print(".");r++;}if(r==30){ // 连接超时后输出"连接失败"信息并返回Serial.println("Connection failed");Serial.println(httpsClient.getLastSSLError());return;} else { Serial.println("Connected...");// 连接成功则输出“连接成功”信息}// 建立HTTPS请求信息字符串//此处的************应更换为自己需要访问的API地址String request = String("GET ")+"************"+" HTTP/1.1\r\n" + //请求行"Host: " + host + "\r\n" + //请求头"connection: close\r\n"+"\r\n";// 向服务器发送请求httpsClient.print(request); Serial.println("request sent");// 告知用户当前ESP8266已经成功接收服务器响应头信息。while (httpsClient.connected()){// 检查服务器响应信息。一旦查到响应头结束字符,则通过串口监视器告知ESP8266已经成功接收服务器响应头信息。String line = httpsClient.readStringUntil('\n'); //获取响应头信息//串口监视器显示响应头信息if (line == "\r"){ //判断头是否结束Serial.println("headers received");break;}}// 通过串口监视器输出服务器响应体信息(服务器报文)Serial.println("响应体:");String body;while(httpsClient.available()){ body= httpsClient.readStringUntil('}'); //获取响应体信息//此处为强制类型转换char *ch2 = const_cast<char*>(body.c_str());Serial.println(body);ch3= ch2;}httpsClient.stop(); //操作结束,断开服务器连接Serial.println("closing connection");
}
以上代码中有一些需要注意的地方
1、首先要更更改WiFi名称与wifi密码
2、需要更改域名地址
3、需要更改api请求地址
具体网络中可以请求的有关时间请求的网络API可以百度搜索
本文使用的有关esp8266作为客户端https请求的知识学习自“太极创客”。第一次写博客,不是很会,望各位大佬雅正。
ESP8266及数码管的网络时钟相关推荐
- ESP8266与STC8H8K单片机联动——天气时钟
基于ESP8266与STC单片机的天气时钟(包括DS18B20.TFT.串口.外部中断.ESP8266.STC.API等) 文章目录 基于ESP8266与STC单片机的天气时钟(包括DS18B20.T ...
- 校园网络时钟系统(标准化考场)建设方案
校园网络时钟系统(标准化考场)建设方案 校园网络时钟系统(标准化考场)建设方案 [摘要]时钟系统是一个大型标准计时系统,随着网络的普及,许多校园都建了自己的校园专网,使用的网络设备和服务器也日益增多, ...
- Esp8266 进阶之路21 【高级篇】浅谈 esp8266 如何在本地局域网网络情况下实现最大效率地和前端实现数据交互。(附带Demo)
本系列博客学习由非官方人员 半颗心脏 潜心所力所写,不做开发板.仅仅做个人技术交流分享,不做任何商业用途.如有不对之处,请留言,本人及时更改. 序号 SDK版本 内容 链接 1 nonos2.0 搭建 ...
- 单片机课程设计--网络时钟
单片机课程设计–网络时钟 测控1902 孙楷亮 文章目录 单片机课程设计--网络时钟 作品功能 目标功能 典型应用场景 总体计划 代码计划 时间规划 开发资源 开发环境 硬件资源 软件资源 文档资料 ...
- NTP网络时钟源(时钟系统)在标准化考场中应用
NTP网络时钟源(时钟系统)在标准化考场中应用 NTP网络时钟源(时钟系统)在标准化考场中应用 [摘要]时钟系统是一个大型标准计时系统,随着网络的普及,许多校园都建了自己的校园专网,使用的网络设备和服 ...
- linux系统下ntp网络时钟服务器(NTP服务器)的搭建和使用
linux系统下ntp网络时钟服务器(NTP服务器)的搭建和使用 linux系统下ntp网络时钟服务器(NTP服务器)的搭建和使用 安徽京准科技开发的NTP网络时间源设备 参考 ahjzsz.com ...
- RT-Thread Studio 项目实战教程 | 快速打造一个桌面mini网络时钟
寻求更清爽的阅读体验,请移步:Mculover666的个人博客. 项目效果视频 花半小时打造的桌面mini网络时钟(自动网络对时.温度显示.湿度显示) 1. RT-Thread Studio RT-T ...
- NTP网络时钟同步协议对计算机网络数据的重要性
NTP网络时钟同步协议对计算机网络数据的重要性 概述:电脑时间走时不准是出了名的.它一般是以廉价的振荡电路或石英钟为基础,每天的误差可达数秒,经过一段时间的累积就会出现较大的误差.随着不断增加的分散式 ...
- 分布式数据库服务器时钟同步(NTP网络时钟同步)北斗卫星同步时钟起到关键性作用
分布式数据库服务器时钟同步(NTP网络时钟同步)北斗卫星同步时钟起到关键性作用 分布式数据库服务器时钟同步(NTP网络时钟同步)北斗卫星同步时钟起到关键性作用 文章由安徽京准科技公司提供请勿转载 时间 ...
最新文章
- 将域名绑定到ip上,并实现访问不同二级子域名对应不同目录
- python读取二进制文件_如何用python读取二进制文件?
- 计算机图形学颜色表示,计算机图形学 颜色表示模型.ppt
- bash type php,Linux Bash Shell 寻找PHP(网站)挂马,后门
- Android系统性能优化(66)---APK启动加速
- Android开发笔记(三十)SQLite数据库基础操作
- Wannafly交流赛1: B. 白兔的式子(组合数)
- Php的入栈,PHP实现的栈数据结构示例【入栈、出栈、遍历栈】
- mysql 升级 乱码_mysql3升级到mysql5解决乱码心得
- 计算机三四级网络技术,全国计算机等级考试四级网络技术论述题真题(2-3)
- 1206、0805、0603、0402、0201、01005、008004,你手工焊接过的最小的封装是哪个
- 智能DNS之DNS原理与解析
- 手机上怎么访问电脑html页面,手机UC浏览器怎么访问电脑版 访问电脑页面方法...
- dbus-glib编程2:d-feet的使用
- CTSC2018 APIO2018 颓废 + 打铁记
- 云主机-本地内网通信OPEN-V
- 前端登录界面通用模版
- PostgreSQL函数——数值函数
- 安卓系统导航测试软件,安卓战GPS 凯立德导航软件实测解析
- Ubuntu20.04配置好文