TPYBoard v201实物图:
准备工作硬件&工具
- TPYBoard v201 开发板 1块
- TPYBoard v201 网络参数配置的工具
- 路由器、电脑、网线等
- DHT11温湿度模块 1个
- DS3231时钟模块 1个
知识储备
- 了解基本的TCP、HTTP通信协议等相关的知识。不知道的可自行去百度,相关教程很多。
- 掌握DHT11温湿度模块的使用方法。
- 掌握DS3231时钟模块的使用方法。
USR-K2资料和工具下载: <https://github.com/TPYBoard/Documentation/blob/master/tpyboard_docs/tpyboard/tutorial/doc/USR-
K2%E8%B5%84%E6%96%99.rar>
下载地址是在GitHub上,如果下载速度很慢的话,你也可以加TPYBoard技术交流群:157816561 文件里下载。
首先,将TPYBoard v201开发板通过网线与你使用的电脑接入同一个局域网内。双击运行<USR-M0_V2.2.1.272.exe>,点击搜索设备,成功的情况下会在
上面的列表中显示搜索到的设备。
点击搜素到的设备,可以读取到该设备的相关参数。同时也可以进行修改并保存。接下来,我们要进行IP地址、端口等设置。IP地址我这里设置了静态
IP<192.168.0.99>,防止每次重新启动时会改变IP。
接下来端口设置,模块工作方式选择TCP Server。大家可以注意到基础设置中有一个HTTP服务端口的设置,是因为USR-K2中本身就有一个内嵌的网页用
于参数的设置,默认是启用了80端口,那我们下面开启的TCP Server的服务端口就使用81端口吧。
设置完毕后,点击软件最下方的保存设置。左侧的操作日志显示框会显示保存的进度和状态。
这时再重新搜索设备,验证下模块的IP地址是否和我们设置的一致。
接线说明*进行器件接线时,请先断开开发板的电源,防止接错导致器件烧坏。*
程序实现
TPYBoard v201通过板子上的串口6与USR-K2模块之间通信。我们不用去管TCP链接等问题,只需要将想要发送的数据通过串口6发送给K2模块即可。其
实我们的程序主要就是读取和写入串口的工作,当我们从串口读取到HTTP请求报文时,开始采集DHT11和DS3231的数据,采集完成后组成一个完整的响
应报文写入到串口发送回去就可以了。
这里只展示main.py文件,其中里面还需要DHT11和DS3231的驱动文件,文章末有下载链接大家可自行下载参考。
main.py 源码:
1 import pyb 2 from pyb import Timer,UART 3 from ds3231 import DS3231 4 from dht11 import DHT11 5 6 #串口6初始化 7 uart = UART(6,115200,timeout = 100) 8 #响应报文 9 header = """ 10 HTTP/1.1 200 OK 11 Content-Type:text/html 12 Content-Length:{0} 13 14 {1} 15 """ 16 #HTML页面 17 html = """ 18 <html> 19 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 20 <head> <title>TPYBoard v201</title> </head> 21 <body> 22 <h1>TPYBaord 家庭气象站</h1><br /> 23 <p>时间:{}</p> 24 <p>温度:{}</p> 25 <p>湿度:{}</p> 26 </body> 27 </html> 28 """ 29 30 #------------------------DS3231----------------------------------# 31 ds=DS3231(2) #设置DS3231为I2C2接口,对应SCL-Y9,SDA-Y10 32 #初始日期和时间,设置一次即可 33 #ds.DATE([19,7,27]) #设置初始日期年、月、日 34 #ds.TIME([14,50,0]) #设置初始时间时、分、秒 35 #------------------------DHT11----------------------------------# 36 d = DHT11('X12') 37 38 def updateDisplay(): 39 40 DATE = [str(i) for i in ds.DATE()] #将返回的时间数据int转str 41 TIME = [str(i) for i in ds.TIME()] 42 time = '-'.join(DATE) + ' ' + ':'.join(TIME) #读取日期和时间,拼接成正常的时间格式 43 data = d.read_data() #读取温湿度的值 44 return time,data 45 46 while True: 47 if uart.any() > 0: 48 request = uart.read().decode() 49 print('request:',request) 50 #当接收到GET请求头时,进行响应.同时把favicon.ico请求过滤掉 51 if request.find('GET') > -1 and request.find('favicon.ico') < 0: 52 time,data = updateDisplay() 53 print(data) 54 HTML = html.format(time,data[0],data[1]) 55 #print(HTML) 56 uart.write(header.format(len(HTML),HTML))