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网络时钟同步)北斗卫星同步时钟起到关键性作用 文章由安徽京准科技公司提供请勿转载 时间 ...
最新文章
- 翻翻git之---溜的飞起的载入效果AVLoadingIndicatorView
- Putty通过ssh代理连接远程服务
- [翻译] 构建完美的WPF开发工作站
- 微信小程序————经纬度转化为具体位置(逆地址解析)
- php ci框架 自动验证,CodeIgniter表单验证方法实例详解
- 前端学习(3339):ant design中加上icon图标
- oracle用户身份认证,oracle用户身份认证方式
- linux命令--vi,vim
- 希尔伯特变换(1)-基础理论
- Digester解析XML文件
- 重邮第八届ACM大赛-决赛题解报告
- 7-3 判断素数 (10 分)
- linux中prometheus的使用
- 搭建政务民生可视化管理系统 | 智慧城市
- 如何解决WIN10电脑搜索文件慢的问题办法
- 利用Python(pyserial、minimalmodbus、modbus_tk)进行单片机通信
- 传感器原理与检测技术复习笔记第六章-压电式传感器
- ui设计为什么要切图,切图是什么意思?
- c语言成绩与平均分问题,用C语言编程平均分数
- Shader实战(1):Unity中使物体不受光照影响(不区分明暗面)
热门文章
- origin图上显示数据标签_半分钟教程:Origin 中如何设置非等距 X 轴刻度
- 定时任务假死问题排查
- PyTorch多卡/多GPU/分布式DPP的基本概念(noderanklocal_ranknnodesnode_ranknproc_per_nodeworld_size)
- 任何人都可以借助Workers在Cloudflare上运行JavaScript了
- 市场调研-全球与中国建筑电台市场现状及未来发展趋势
- Matlab 之灰色预测模型GM(1,1)和GM(1,n)
- [双系统]win7下安装Ubuntu16.04
- DIY ROV系列(六)水下机器人控制系统
- 学术交流 | InForSec 2023年网络空间安全国际学术研究成果分享及青年学者论坛
- 出海东南亚:印尼网红营销现状和发展趋势