今天给大家带来的是TPYBoard V202开发板的一次测试项目使用心得。而测试项目就是给服务端发送硬件底层数据,而数据有产品名称,WF模块MAC地址,温湿度数据。
什么是MicroPython? MicroPython是在单片机上可以跑的Python,也就是说,你可以通过Python脚 本语言开发单片机程序。 MicroPython遵守MIT协议开源,被授权人拥有复制、修改、发行和再授权的权 利。由剑桥大学的理论物理学家乔治?达明设计。和Arduino类似,但MicroPython 更强大。 MicroPython基于ANSIC,语法跟Python3基本一致,拥有自家的解析器、编译器 、 虚拟机和类库等。目前它支持基于32-bit的ARM处理器,比如STM32F405。也就 是说ARM处理器STM32F405上直接可运行Python语言,用Python语言来控制单片机。
什么是TPYBoard? TPYBoard是以遵照MIT许可的MicroPython为基础,由TurnipSmart公司制作的一 款MicroPython开发板,它基于STM32F405单片机,通过USB接口进行数据传输。该 开发板内置4个LED灯、一个加速传感器,可在3V-10V之间的电压正常工作。 TPYBoard开发板让用户可以通过Python代码轻松控制微控制器的各种外设,比如 LED等,读取管脚电压,播放歌曲,和其他设备联网等等。 TPYBoard开发板支持Python3.0及以上版本的直接运行,支持重力加速度传感器, 支持上百周边外设配件,支持SWD烧写固件。零基础也能灵活掌握单片机技术!
在使用过程中遇到了很多问题,其中就包括Python3版本,与python2版本 的问题,开发板固件刷写问题,还有MAC解析算法问题。解决这些问题,小编都快把 群主,和小编的朋友问烦了,小编也在此谢谢,官方群主,和那位好心的朋友。 那小编就不浪费时间直接进入正题: 这是本人朋友的TPYBV202。 代码如下:
# - -*- coding: gbk -*-
- import dht
- import machine
- import network
- from machine import Pin
- import socket
- import urllib
- import time # 声明用到的类库,尤其是dht的类库
- import json
- import sys
- import utime
- # 声明用到类库中的函数,并设端口 #置参数
- d = dht.DHT22(machine.Pin(4))
- led = Pin(2, Pin.OUT)
- count = 0
- def do_connect():
- """定义开发板连接无线网络的函数"""
- wlan = network.WLAN(
- network.STA_IF) # 设置开发板的网 #络模式
- wlan.active(True) # 打开网络连接
- if not wlan.isconnected(): # 判断是否有网络连接
- print('connecting to network...')
- # 设置想要连接的无线网络
- # #线名称和密码
- wlan.connect('00', 'zzp6330058')
- while not wlan.isconnected(): # 等待连接上无线网络
- pass
- MAC = wlan.config('mac') # 获得MAC地址
- #t = ntptime.time()
- #t = t + 28800 # 相差八小时
- #tm = tm[0:3] + (0,) + tm[3:6] + (0,)
- #machine.RTC().datetime(tm)
- print('network config:', wlan.ifconfig())
- return MAC
- def connection(NA_ME, MA_C, TIM_E, TEM_P, CUT_cf, HU_M):
- """要发送的数据"""
- data = {
- 'name': NA_ME,
- 'id': MA_C,
- 'time': TIM_E,
- 'temp': TEM_P,
- 'symbol': CUT_cf,
- 'hum': (HU_M + '%')
- }
- return data
- def DHT_collect():
- """温湿度采集模块"""
- d.measure() # 调用DHT类库中测量数据的函数
- # 读取measure()函数中的温度数据
- temp = str(d.temperature())
- hum = str(d.humidity()) # 读取measure()函数中的湿度数据
- print('TEMP:' + temp + ' ' + 'HUM:' + hum)
- return temp, hum
- def To_obtain_name_time():
- """获取本机名称,本地时间"""
- time_Str = ''.join([str(i) for i in utime.localtime()])
- return time_Str
- def Data_sent(host, port, data):
- """连接服务器发送数据"""
- s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建套接字
- s.connect((host, port)) # 主动初始化TCP服务器连接。。。
- json_str = json.dumps(data) # 将发送的数据转换成json数据
- # 发送TCP数据,将string中的数据发送到连接的套接字。
- s.send(bytes('%s\r\n' % (json_str), 'utf8'))
- s.close() # 关闭套接字
- def MAC_format_conversion(MA):
- """MAC格式换算"""
- MA = [hex(x) for x in bytes(MA)] #将数据转换成16进制保存到列表中
- Y=0#循环初值
- MB =''#字符串
- while Y<6:
- if len(MA[Y])==4: #判断是否有零
- pass
- else:
- MA[Y] = MA[Y]+'0'
- if Y<5: #对列表重构5c:cf:7f:d0:85:65
- MB = MB + MA[Y][2]+MA[Y][3]+':'
- else:
- MB = MB + MA[Y][2]+MA[Y][3]
- Y+=1
- return MB
- MAC = do_connect() # 连接WF
- MAC = MAC_format_conversion(MAC)
- print(MAC)
- while True:
- """主循环"""
- TIME = 0 #本地时间
- # MAC = get_mac_address()#获取MAC
- TEM, HUM = DHT_collect() # 获取温湿度
- data = connection("TPYBoard v202", MAC,
- TIME, TEM, 0, HUM) # 建立数据字典
- Data_sent("119.23.223.146", 2689, data)
- count += 1
- print('Count:', count) # 显示发送的次数
- time.sleep(15)
复制代码附上显示的效果:这是开发板返回的数据。
这是服务器接收到的json数据。
|