基于MicroPython的自动网络时间校准器

栏目: Python · 发布时间: 5年前

内容简介:之前使用TPYBoard v202(主控ESP8266模块)开发板做过一款WIFI攻击神器,一开始使用Arduino源码做的,后来又接触到micropython。觉得使用micropython真是方便,而且ESP8266模块上面有很多可以挖掘出来的好玩的。后期用它又做过智能家庭控制平台,说白了就是用v202开发板作为Web服务器。最近,接触到了DS3231时钟模块,结合OLED显示屏,做了一个简单的时钟。为了防止时间偏差,从网上找了一个免费的获取时间的API,程序很简单,分享出来,有需要的小伙伴可以直接用。

前言

之前使用TPYBoard v202(主控ESP8266模块)开发板做过一款WIFI攻击神器,一开始使用Arduino源码做的,后来又接触到micropython。觉得使用micropython真是方便,而且ESP8266模块上面有很多可以挖掘出来的好玩的。后期用它又做过智能家庭控制平台,说白了就是用v202开发板作为Web服务器。最近,接触到了DS3231时钟模块,结合OLED显示屏,做了一个简单的时钟。为了防止时间偏差,从网上找了一个免费的获取时间的API,程序很简单,分享出来,有需要的小伙伴可以直接用。

WIFI攻击神器-Arduino篇:

邪恶改装:TPYBoard制作廉价WIFI干扰器

邪恶改装2:用单片机实现一次简单的WIFI密码欺骗

WIFI攻击神器-micropython篇: MicroPython实现WIFI干扰与抓包

智能家庭控制平台: 利用单片机快速实现家庭智能控制平台

材料准备

名称 数量
TPYBoard v202开发板 1块
DS3231时钟模块 1个
OLED显示屏 1个
面包板 1个
杜邦线 若干

准备好材料,接下来就是接线。

TPYBoard v202 DS3231时钟模块
3V3 VCC
GND GND
SDA SDA
SCL SCL
TPYBoard v202 OLED显示屏
GND GND
3V3 3V3
MI SCK
MO SDA
G16 RES
G15 DC
G5 CS

程序编写

先说下程序的思路:

1、开机上连接家中的WIFI网络,确保可以访问网络;

2、然后访问API获取到时间,更新DS3231的设置,并进行显示屏显示;

3、开启定时器,每隔1秒钟刷新下显示屏时间信息;

4、设定每天获取一次API更新下时间,用于时间的校正。

首先,编辑一个boot.py文件,里面主要是连接WIFI的程序。然后编辑一个main.py,里面主要是访问API、操作DS3231、显示屏等主要功能程序。v202开机会先运行boot.py再运行main.py文件。

boot.py 

import network
import time
from machine import Pin

LED = Pin(2,Pin.OUT)
#根据设定连接网络
count = 0
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
if not wlan.isconnected():
    print('connecting to TurnipSmart...')
    wlan.connect('WIFI名称','WIFI密码')
    while not wlan.isconnected() and count < 20:
        LED.value(not LED.value())
        count += 1
        time.sleep(0.5)
if wlan.isconnected(): 
    LED.value(0)
    print('ip address:',wlan.ifconfig()[0])
else:
    LED.value(1)
    print('TurnipSmart connect fail')

main.py

import urequests
import json
import time
from machine import SPI,Pin   #导入SPI、Pin库
import ssd1306                #导入OLED显示屏驱动库
from ds3231 import DS3231     #导入DS3231时钟模块库
from machine import Timer     #导入Timer库

#-----------------------DS3231模块-----------------------#
ds=DS3231()            #ds3231初始化
NOW_DATE = ''
#-----------------------OLED显示屏-----------------------#
#SPI接口对应的引脚定义
spi = SPI(baudrate=10000000, polarity=1, phase=0, sck=Pin(12,Pin.OUT), mosi=Pin(13,Pin.OUT), miso=Pin(2))
#OLED显示屏的设置,128宽 64高 spi对象 DC接的G15 RES接的G16 CS接的G5
display = ssd1306.SSD1306_SPI(128, 64, spi, Pin(15),Pin(16), Pin(5))
display.poweron()                   #打开显示屏
display.init_display()              #初始化显示
display.text('Waiting.....',1,1)    #显示的内容,x坐标,y坐标
display.show()                      #进行显示

def getNetTime():
    url = 'http://quan.suning.com/getSysTime.do'
    res=urequests.get(url).text
    print(res)
    j=json.loads(res)
    t2_date = j['sysTime2'].split()[0] #日期
    t2_time = j['sysTime2'].split()[1] #时间
    display.fill(0)                  #清屏
    display.text(t2_date,1,2)
    display.text(t2_time,1,15)
    display.show()
    #初始日期和时间,设置一次即可
    ds.DATE([int(x) for x in t2_date[2:].split('-')])   #设置初始日期年、月、日
    ds.TIME([int(x) for x in t2_time.split(':')])   #设置初始时间时、分、秒

def updateTime(t):
    global NOW_DATE
    #读取日期和时间,拼接成正常的时间格式
    date = '20'+'-'.join(ds.DATE())
    time = ':'.join(ds.TIME())
    if NOW_DATE != date:
        getNetTime()       #设定每天校对一下时间
        NOW_DATE = date
    else:
        display.fill(0)                  #清屏
        display.text(date,1,2)
        display.text(time,1,15)
        display.show()

if __name__ == '__main__':
    getNetTime()
    time.sleep(1)
    #-----------------------Timer定时器-----------------------#
    tim = Timer(-1)  #新建一个定时器
    #每隔1秒执行一次updateTime函数调用,用于更新OLED显示屏上的时间
    tim.init(period=1000, mode=Timer.PERIODIC, callback=updateTime)

里面还需要用到DS3231时钟模块库,已经写好了,直接拿来用就可以。记得也要下载到板子里,否则会提示找不到。文章末会有下载。

程序下载与调试

v202通过micro USB数据线接入PC,即可进行程序下载和REPL操作。插入PC之前,先确保一下器件的电源线没有接错,防止出现器件或开发板烧坏的情况。

1、插上PC之后,设备管理器会出现一个虚拟串口,开发板上用的是CH340芯片(USB转TTL串口),电脑没驱动的话,需要手动安装。

CH34X驱动下载

2、使用 MicroPython File Uploader 工具进行程序的下载,在这里就不介绍具体下载的步骤,大家可去参考现有教程。 TPYBoard v202 快速入手教程 boot.py 、main.py 和 ds3231.py 都需要下载到v202板子里。下载完毕后,点击【RUN】或者按板子的RST键都可以运行程序。

没找到上传附件的功能,把代码放到了GitHub上了。 GitHub地址

效果演示

基于MicroPython的自动网络时间校准器


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web标准设计

Web标准设计

刘杰(嗷嗷) / 清华大学出版社 / 2009-1 / 75.00元

一扇经常开启的门的铰链不需要润滑油。 一条湍急的河流不会变得污浊。 无论是声音还是想法都不可能在真空中传播。 Web标准如果不用就会腐朽。 这世界真奇妙! 专题页面:http://www.aoao.org.cn/book/web-standards-design/一起来看看 《Web标准设计》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具