本方案采用的是MCU+AT指令的形式开发,MCU是大家比较熟悉的意法半导体公司STM32F103C8T6,WiFi模块使用的是安信可ESP-12F,本方案是一个Demo设计,比较简单,仅实现了功能,算是一个抛砖引玉吧!

先上视频演示:https://v.youku.com/v_show/id_XNDE3OTE4MDY4NA==.html?spm=a2hzp.8244740.0.0

WiFi模块资料链接:https://docs.ai-thinker.com/esp8266

STM32F103C8芯片资料链接:https://www.stmicroelectronics.com.cn/content/st_com/zh/products/microcontrollers-microprocessors/stm32-32-bit-arm-cortex-mcus/stm32-mainstream-mcus/stm32f1-series/stm32f103/stm32f103c8.html#overview

硬件部分,由时钟电路+WiFi模块+MCU最小系统+OLED显示屏+稳压电路+按键电路组成,这里采用时钟电路是希望模块在断网后还能获取一个比较精准的时间,并且电路设计上增加了储能电容可以在断电一个月后保持时间数据不丢失,当然这里也可以用STM32里面的RTC时钟;OLED显示屏采用的是裸屏设计,使整体电路板一体化效果好些;其他电路都是参考开发板or硬件手册上设计的;硬件设计软件采用的是 Altium Designer (13.0),原理图概略图如下图所示:

完整硬件图纸链接:https://download.csdn.net/download/ps574134526/11174710

实物图如下图所示:(电路板是找厂家打样的,元器件是纯人工手焊)

软件部分,由底层驱动+WiFi联网+调用API接口并解析数据+OLED显示组成;首先分析一波,这里面用到了MCU的USARTI2C*2GPIO*2引脚资源,然后对应去找相关类似的例程,既然已经有轮子了,为何还要花时间去造轮子,当然是直接改例程来的舒服。这里开发方式采用的是库函数开发,用的是STM32的标准库,对应找到了OLED显示屏的驱动资料PCF8563的驱动资料WiFi模组的驱动资料按键输入的驱动资料;将它们整合到一个工程里面,然后更改里面的引脚配置等,就完成了整个设计的底层驱动

WiFi联网,这里WiFi是设置成了STA模式(STA模式是啥,可自行问度娘),然后连接手机开的热点(注意手机必须要能连接上公网,即我们常用的互联网)。具体如何设置可以参考WiFi模块的AT指令集,AT指令集在上面WiFi模块资料里面有。手机开的WiFi热点的账号密码需要事先知道,并写入在程序里面,后续如果需要更改热点的账号密码,就需要更改程序。

天气和时间更新,即调用API接口并解析数据,这里用到了两个API接口,第一个是心知天气的天气实况数据获取,因为是免费版所以只能获取到天气现象和气温两项数据;第二个是Nowapi的北京时间数据获取。因为用到的两个API接口是隶属于两个不同的服务器,所以程序上需要进行切换,连完这个服务器后需要断开连另一个服务器,比较麻烦。后面我发现其实Nowapi里面就有天气数据可以获取,完全可以通过只连接这个服务器就实现天气和时间数据的更新。实现方法参考下面的网址,写比较详细。

心知天气:https://docs.seniverse.com/api/weather/now.html、服务器IP116.62.81.138(域名api.seniverse.com)、默认端口80

Nowapi:https://www.nowapi.com/api/life.time、服务器IP103.205.4.43(域名api.k780.com)、默认端口80

解析数据用的是比较简单的方法,因为需要解析的数据量不大,所以并没有移植cjson,直接用strtok函数硬解。

OLED显示,OLED显示用的是I2C接口,然后给的例程只有常用的标点符号和26个英文字母的字库,如果需要汉字还需要自己添加字库,一般是用到什么汉字就添加什么汉字的字库,然后用例程里面给的功能函数去实现显示。

显示屏资料:http://pan.baidu.com/s/1dFri9Vz

下图是用到的所有.c文件(除库函数之外)

bsp_usart1.c是用来串口调试使用,可以打印在电脑串口调试助手上显示;bsp_SysTick.c是用来生成精准的延时函数,用于I2C通讯等对时序敏感的接口;bsp_esp8266.c里面是对WiFi模块的一些初始化配置和WiFi的功能函数;Common.c里面是一些辅助函数;test.c里面是实现WiFi配网应用和API接口调用及解析;oled.c里面显示屏的初始化配置和显示功能函数;bsp_pcf8563.c里面是时钟芯片的初始化配置和读写时间功能函数;bsp_key.c里面是按键的初始化配置、按键扫描功能函数和静态内容显示函数;bsp_TiMbase.c里面是定时器函数,这里为什么用到定时器,因为一般天气和时间数据刷新的频率不会太快,这里设定的是5分钟更新一次,那么这里就需要用到定时器。

完整程序代码链接:https://download.csdn.net/download/ps574134526/11176416

注意:"GET http://api.k780.com/?app=life.time&appkey=41298&sign=eb689df06015c995b73ae1f60c133a77&format=json\n" ,里面的appkey=41298和sign=eb689df06015c995b73ae1f60c133a77,最好更换成自己的appkey和sign(网址上注册账号)  "GET https://api.seniverse.com/v3/weather/now.json?key=SO0c3M39I7uTr9XjF&location=guangzhou&language=zh-Hans&unit=c\n",里面的key=SO0c3M39I7uTr9XjF和location=guangzhou,最好换成自己的Key和城市(网址上注册账号)

基于WiFi的网络授时时钟(带实时天气更新)设计——DIY方案分享相关推荐

  1. 通过NTP协议进行网络授时时钟同步服务

    通过NTP协议进行网络授时时钟同步服务 通过NTP协议进行网络授时时钟同步服务 NTP(Network Time Protocol)是由美國德拉瓦大學的D.L. Mills教授於1985年提出,除了可 ...

  2. 基于51单片机、DS1302时钟模块的电子闹钟设计

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.设计原理 1.DS1302介绍 2.闹钟音乐播放原理 二.程序设计 1.DS1302.h 2.ds1302.c 3.mu ...

  3. 基于51单片机的自动浇花系统设计/基于51单片机的智能抽奖系统控制设计/基于51单片机的数字时钟与日历显示控制设计 毕业设计

    1147基于51单片机的自动浇花系统设计 设计思路:通湿度传感器实时监测湿度,通过LCD显示出实时的湿度采集值,可以通过按键设定目标界限,当达到这个界限值时,浇花系统的电机装置运行. 电路包含:LCD ...

  4. (网络实验)基于Jnetpcap的网络嗅探器(抓包程序)设计与实现

    基于Jnetpcap的网络嗅探器(抓包程序)设计与实现 作者:程哥哥 学号:xxxx 引言: 此程序是由自己编写的个人网络嗅探器,相当于著名的包捕获软件Wireshark的简化版,界面参考至别人的博客 ...

  5. 【036】基于51单片机的电子时钟与秒表Proteus仿真设计

    一.压缩包资料内容 (1).基于51单片机的电子时钟与秒表proteus仿真设计一份: (2).基于51单片机的电子时钟与秒表proteus仿真设计keli源代码一份: (3).基于51单片机的电子时 ...

  6. linux 添加wifi网络打印机,基于WiFi无线网络的嵌入式打印终端的设计

    摘要:针对基于PC机的打印终端在实际运用中的许多不足提出了一种基于WiFi无线局域网技术的嵌入式移动打印终端设计方案.本方案采用S3C2440A为微处理器,以Linux为嵌入式操作系统,扩展了触摸屏. ...

  7. html广告植入保护,基于HTML5的网络视频互动广告信息植入平台设计与实现

    摘要: 目前,产品信息的获取主要来自于产品广告.其中报纸.广播.电视.和网络是传递广告信息的媒体.网络视频广告是一种新兴的广告形式,它结合了传统的网络广告和电视广告的双重优势,具有独特的商业价值.随着 ...

  8. 基于WT2605C-32N音频蓝牙语音芯片的实时录音上传技术方案介绍

    现代社会,信息技术的发展尤其迅速,信息和数据的重要性和安全性日渐深刻,在某些特殊场合,因为工作上的需要,或者日常生活的需求,往往需要记录和保留一些重要的声音.在某些时刻,录音成为记录生活,保存证据的重 ...

  9. 基于网络爬虫的新闻实时监测分析可视化系统(Java+MySQL+Web+Eclipse)

    目 录 1 绪论 1 1.1 论文研究背景与意义 1 1.2 论文研究内容 2 2 系统需求分析 4 2.1 系统需求概述 4 2.2 系统需求分析 4 2.2.1 系统功能要求 4 2.2.2 系统 ...

最新文章

  1. python使用imbalanced-learn的CondensedNearestNeighbour方法进行下采样处理数据不平衡问题
  2. java mysql aio_Java中的NIO,BIO,AIO分别是什么
  3. OpenCV中的HOG+SVM在自动驾驶车辆检测中的应用实例
  4. H - Checker FZU - 2041
  5. IntelliJ IDEA for Mac如何查看某个方法的实现
  6. Leetcode | Implement strStr()
  7. 配置ISCSI客户端(LINUX)
  8. div 重新加载_JS之 加载模糊文本动画
  9. 海致星图2022校招算法笔试题
  10. php表单密码由加密变明文,PHP 安全性漫谈 Linux+Apache+Mysql+PHP
  11. [剑指Offer] 43.左旋转字符串
  12. 容器监控实践—CAdvisor
  13. RK3399平台开发系列讲解(外设篇)3.35、GMAC RGMII Delayline Guide 窗口配置
  14. 使用Visio画各种可视化的流程图之用例图和类图
  15. FAT文件系统存储原理
  16. Android商业模式
  17. web开发设为首页、添加到收藏夹实现方法
  18. 牛客竞赛语法入门班选择结构习题【完结】
  19. pycharm破解操作
  20. app卡在启动页面android,uni-app运行时卡在启动界面

热门文章

  1. SpringCloud(完结)
  2. Jquery Md5加密解密
  3. windows达梦数据库卸载不完全,重新装达梦数据库现有服务失败/该实例名已被其他实例占用
  4. 论文阅读: Spatial Dual-Modality Graph Reasoning for Key Information Extraction (关键信息提取算法)
  5. Python读取EXCEL省份数据绘制地图
  6. 蚁剑有时候连不上webshell
  7. Chrome浏览器运行超图三维场景
  8. 小米AX6S刷OpenWrt和开启OpenClash,及刷回官网固件
  9. 计算机科学导论在线作业,南开21春学期《计算机科学导论》在线作业
  10. 十三:python知识总结(更新中)