MicroPython TPYBoard v201 简易家庭气象站的实现过程

前言

上一篇教程中我们实现了一个简单网页的显示。本篇呢,增加上温湿、时间等信息的展示,实现一个简单的家庭气象站。

TPYBoard v201实物图:

准备工作

硬件&工具

  • TPYBoard v201 开发板 1块
  • TPYBoard v201 网络参数配置的工具
  • 路由器、电脑、网线等
  • DHT11温湿度模块 1个
  • DS3231时钟模块 1个

知识储备

  • 了解基本的TCP、HTTP通信协议等相关的知识。不知道的可自行去百度,相关教程很多。
  • 掌握DHT11温湿度模块的使用方法。
  • 掌握DS3231时钟模块的使用方法。

TPYBoard v201网络参数配置

USR-K2资料和工具下载: <https://github.com/TPYBoard/Documentation/blob/master/tpyboard_docs/tpyboard/tutorial/doc/USR-K2%E8%B5%84%E6%96%99.rar&gt;
下载地址是在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 源码:

import pyb
from pyb import Timer,UART
from ds3231 import DS3231
from dht11 import DHT11

#串口6初始化
uart = UART(6,115200,timeout = 100)
#响应报文
header = """
HTTP/1.1 200 OK
Content-Type:text/html
Content-Length:{0}

{1}
"""
#HTML页面
html = """
<html>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <head> <title>TPYBoard v201</title> </head>
    <body>
        <h1>TPYBaord 家庭气象站</h1><br />
        <p>时间:{}</p>
        <p>温度:{}</p>
        <p>湿度:{}</p>
    </body>
</html>
"""

#------------------------DS3231----------------------------------#
ds=DS3231(2) #设置DS3231为I2C2接口,对应SCL-Y9,SDA-Y10
#初始日期和时间,设置一次即可
#ds.DATE([19,7,27])   #设置初始日期年、月、日
#ds.TIME([14,50,0])   #设置初始时间时、分、秒
#------------------------DHT11----------------------------------#
d = DHT11(‘X12‘)

def updateDisplay():

    DATE = [str(i) for i in ds.DATE()] #将返回的时间数据int转str
    TIME = [str(i) for i in ds.TIME()]
    time = ‘-‘.join(DATE) + ‘ ‘ + ‘:‘.join(TIME) #读取日期和时间,拼接成正常的时间格式
    data = d.read_data()             #读取温湿度的值
    return time,data

while True:
    if uart.any() > 0:
        request = uart.read().decode()
        print(‘request:‘,request)
        #当接收到GET请求头时,进行响应.同时把favicon.ico请求过滤掉
        if request.find(‘GET‘) > -1 and request.find(‘favicon.ico‘) < 0:
            time,data = updateDisplay()
            print(data)
            HTML = html.format(time,data[0],data[1])
            #print(HTML)
            uart.write(header.format(len(HTML),HTML))

保存代码。打开浏览器,输入URL进行访问。URL=ip:81,例如我的URL就是192.168.0.99:81。

如果访问时页面出现了乱码,主要有以下地方需要注意下:

  • 1.main.py文件的编码格式修改为UTF-8 无BOM格式;
  • 2.代码中的HTML字符串中需要添加<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  • 3.通过浏览器开发者工具查看,接收到的Response体是否完整。

大家可以依照本实验的基础加上自己喜欢的显示屏,然后用纸盒等包装起来,DIY一个超棒的家庭气象站。同时也可以做一个路由器映射,这样就可以

随时随地查看家里的环境信息了。

下载源码:https://github.com/TPYBoard/TPYBoard-v201

原文地址:https://blog.51cto.com/13798209/2424632

时间: 2024-08-01 10:31:09

MicroPython TPYBoard v201 简易家庭气象站的实现过程的相关文章

MicroPython TPYBoard v102 驱动28BYJ-48步进电机

实验目的 了解步进电机的工作原理 学习步进电机的驱动方法 实验器材 TPYBoard v102 1块 微型步进电机(28BYJ-48) 1个 步进电机驱动板(ULN2003APG) 1块 micro USB数据线 1条 杜邦线 若干 步进电机的介绍 本次实验采用的是28BYJ-48 四相八拍电机,电压DC5V~12V. 24BYJ48名称的含义: 24:电机外径24mm B:步进电机中步字的拼音首字母 Y:永磁中永字的拼音首字母 J:减速的减字拼音首字母 48:四相8步 实物图 工作原理 步进电

Micropython TPYBoard 控制无线加速度小车

现在无线控制已经成为了电子科学领域的主流,这次就来教大家做一个主流中的主流--无线控制的小车,先给大家看一下最终的成品演示视频: ://v.youku.com/v_show/id_XMTY2MzAzNDAzNg==.html?spm=a2h0k.8191407.0.0&from=s1.8-1-1.2     首先介绍一下需要用到的材料: TPYBoardv102开发板两块    小车底盘一个    LORA无线模块两块    充电宝一个    9014三极管两个(为什么用到它呢,后面再说). 在

Micropython TPYBoard I2C的用法

先看看基本用法: from pyb import I2C i2c = I2C(1)                         # create on bus 1 i2c = I2C(1, I2C.MASTER)             # create and init as a master i2c.init(I2C.MASTER, baudrate=20000) # init as a master i2c.init(I2C.SLAVE, addr=0x42)       # init

celery4.0版本

大写的命名空间意味着所有芹菜配置必须用大写而不是小写来指定,并以CELERY_开始,因此,例如,task_always_eager设置成为CELERY_TASK_ALWAYS_EAGER, broker_url成为CELERY_BROKER_URL ans等等.这个配置是从celery4.0开始引入的. 因此,对于version <4,不需要在行中使用namespace: app.config_from_object('django.conf:settings', namespace='CELE

使用 LinkedBlockingQueue 实现简易版线程池

前一阵子在做联系人的导入功能,使用POI组件解析Excel文件后获取到联系人列表,校验之后批量导入.单从技术层面来说,导入操作通常情况下是一个比较耗时的操作,而且如果联系人达到几万.几十万级别,必须拆分成为子任务来执行.综上,可以使用线程池来解决问题.技术选型上,没有采用已有的 ThreadPoolExecutor 框架,而使用了自制的简易版线程池.该简易版的线程池,其实也是一个简易版的[生产者-消费者]模型,任务的加入就像是生产的过程,任务的处理就像是消费的过程.我们在这里不去讨论方案的合理性

&lt;&lt;开源硬件创客 15个酷应用玩转树莓派&gt;&gt;

本书共分18章,前3章是本书的基础章节,主要介绍了树莓派的一些基本情况和基本操作,来让读者了解树莓派的前世今生,掌握树莓派基本的使用方法.第4~18章主要介绍15个以树莓派为载体的酷炫应用,大家可以按照本书一步一步来完成个人网站.影音盒子.下载机.私有云.智能路由器.智能家居等应用.附录部分,包含了树莓派常用的操作命令和一些使用技巧,方便大家更好地使用树莓派. 本书适合开源硬件爱好者学习.程序员.计算机软硬件爱好者,以及对树莓派感兴趣的读者阅读,也适合作为树莓派相关实践课程的基础教程. 作者简介

笨方法学Python(3)

习题 20: 函数和文件 seek()的用法: >>> f.readlines()#读取出文件的所有内容 ['abcdefghijk\n'] >>> f.seek(2) #将当前的位置设定为相对当前位置的2的位置. >>> f.read(4) #读取4个位置的数据(从设定的位置开始读取,也就是ab 后面的四个字符) 'cdef' >>> f.seek(2,1)#将当前的位置(2)设定为相对当前位置的2的位置. >>>

C#调用C++的dll及MATLAB的dll的方法(一)

为了记录踩坑的过程,避免以后再踩坑,居然专门开通了这么专业的技术博客,正好督促自己以后好好研究技术. 最近需要做一个界面系统来包装一下之前做的人脸属性识别的模型,希望用户随机选取一张图像(后面会实现摄像头拍现场图像),系统自动给出该图像中所包含的人脸属性(有没有戴眼镜,有没有戴帽子之类的).其中人脸属性预测之前需要进行人脸识别以及人脸对齐等操作,人脸属性识别是由C++写的,人脸对齐是由MATLAB写的,考虑到界面的友好性以及开发的难易性,最终选了C#作为开发语言.(不要问我为啥不用Java,因为

[TPYBoard - Micropython] 五分种学会用TPYBoard - GPS 制作短信群发机

转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.什么是TPYBoard-GPS TPYBoard-GPS又称TPYBoard V702,是目前市面上唯一支持通信定位功能的MicroPython开发板:支持Python3.0及以上版本直接运行.支持GPS+北斗双模定位.GPRS通信.短信功能.电话功能:板载温湿度.光敏.三轴加速度传感器.蜂鸣器.LCD5110显示屏.免费提供定位测试服务平台.实物如下图: 二.利用TPYB