购买M5Stack Fire的时候,我同时购买了一个可以测量温湿度和气压的传感器模块。按照官方介绍,模块里面应该是内置了一个DHT12(测量温湿度)和一个BMP280(测量大气压)。
模块附送了Grove线,可以和Fire的PORT A口连接起来。
在MicroPython里面使用传感器的方法:
import units
env0 = units.ENV(units.PORTA)
然后,如下3个引用分别对应温度、湿度 和 大气压:
env0.temperature()
env0.humidity()
env0.pressure()
下面就写一段小程序,可以将环境温湿度和大气压以每隔30秒的速度记录到M5Stack的flash存储空间的一个文件内。
考虑到为了在晚间记录而不影响人的睡眠,程序中使用如下语句可以将屏幕关闭:
lcd.setBrightness(0)
将如下代码保存为文件名为env_rec.py,注意使用utf-8编码,换行符使用unix格式。
[Update 2019/6/9 18:17]
为了方便在PC上调取csv数据文件,代码中改为把文件保存到microSD卡中。按ButtonB手动挂载microSD卡。
参考: https://blog.csdn.net/zhufu86/article/details/90738571
from m5stack import *
from m5ui import *
import units
clear_bg(0x0)
env0 = units.ENV(units.PORTA)
flag_rec = False
flag_disp = True
inteval = 30 # seconds
filename = '/sd/' + str(time.ticks_ms())+'.csv'
if 'sd' in os.listdir('/'):
flag_sd = True
sd_info = 'SD Mounted'
sd_color = 0x00FF00
else:
flag_sd = False
sd_info = 'SD Not Mounted'
sd_color = 0xFFFF00
btnA = M5Button(name="ButtonA", text="Rec", visibility=True)
btnB = M5Button(name="ButtonB", text="SD", visibility=True)
btnC = M5Button(name="ButtonC", text="Display", visibility=True)
label_t = M5TextBox(0, 0, "Text", lcd.FONT_DejaVu24,0xFFFFFF, rotate=0)
label_h = M5TextBox(0, 25, "Text", lcd.FONT_DejaVu24,0xFFFFFF, rotate=0)
label_p = M5TextBox(0, 50, "Text", lcd.FONT_DejaVu24,0xFFFFFF, rotate=0)
label_s = M5TextBox(0, 100, "REC stopped.", lcd.FONT_DejaVu24,0xFFFF00, rotate=0)
label_mt = M5TextBox(0, 150, sd_info, lcd.FONT_DejaVu24, 0xFFFF00, rotate=0)
def buttonA_pressed():
# Rec Start/Stop
global flag_disp
global flag_rec
global flag_sd
if flag_disp and flag_sd:
if flag_rec:
flag_rec = False
label_s.setText("REC stopped.")
label_s.setColor(0xFFFF00)
else:
flag_rec = True
label_s.setText("REC started.")
label_s.setColor(0xFF0000)
def buttonC_pressed():
# Display On/Off
global flag_disp
if flag_disp:
flag_disp = False
clear_bg(0x0)
lcd.setBrightness(0)
else:
flag_disp = True
lcd.setBrightness(50)
clear_bg(0x222222)
label_t.show()
label_h.show()
label_p.show()
label_s.show()
label_mt.show()
def buttonB_pressed():
# Display On/Off
global flag_disp
global flag_sd
if flag_disp:
if flag_sd:
flag_sd = False
label_mt.setText("SD Not Mounted")
label_mt.setColor(0xFFFF00)
os.umountsd()
else:
flag_sd = True
label_mt.setText("SD Mounted")
label_mt.setColor(0x00FF00)
os.mountsd()
def save_tofile(rec_string):
f = open(filename,'a+')
f.write(rec_string)
f.close()
buttonA.wasPressed(callback = buttonA_pressed)
buttonC.wasPressed(callback = buttonC_pressed)
buttonB.wasPressed(callback = buttonB_pressed)
timesec_start = round(time.ticks_ms() / 1000)
time_tick = time.ticks_ms() - inteval * 1000
#save_tofile("SEC,TEMP,HUMI,PRES\n")
while True:
label_t.setText("TEMP: " + str(env0.temperature()))
label_h.setText("HUMI: " + str(env0.humidity()))
label_p.setText("PRES: " + str(env0.pressure()))
if flag_rec:
if time.ticks_ms() - time_tick >= inteval * 1000:
rec_time = round(time.ticks_ms() / 1000)
save_tofile("%d,%s,%s,%s\n" % (rec_time, str(env0.temperature()), str(env0.humidity()), str(env0.pressure())))
time_tick = time.ticks_ms()
wait(1)
用mpfshell之类的工具上传到M5Stack中, 并覆盖 main.py文件。
重启运行。 按键ButtonC(屏幕下方最右边那个按键)可以用来开启和关闭屏幕,按键ButtonA(屏幕下方最左边那个按键)可以开始或者停止记录数据。
数据被记录在/flash文件夹内,一个数字文件名,扩展名为csv的文件内。
可以用mpfshell之类的工具下载这个文件,此文件可以用excel之类的表格处理软件打开,方便查看和处理数据,也可以绘制图表。
使用时需要注意传感器模块需要远离M5Stack主机等可能会发热的物体,以免影响温度测量数据。
好了,今天晚上睡觉试试看。
夏天晚上睡觉开空调要避免着凉哦。
My Email: