leoaran 2019-05-30
前言
之前使用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 v202DS3231时钟模块3V3VCCGNDGNDSDASDASCLSCLTPYBoard v202OLED显示屏GNDGND3V33V3MISCKMOSDAG16RESG15DCG5CS
程序编写
先说下程序的思路:
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地址
效果演示
“我自己是一名从事了多年开发的Python老程序员,辞职目前在做自己的Python私人定制课程,今年年初我花了一个月整理了一份最适合2019年学习的Python学习干货,从最基础的到各种框架都有整理,送给每一位喜欢Python小伙伴,想要获取的可以转发文章并关注我的头条。在后台私信我:01,即可免费获取。"