Tip : Writting data from sensors to SDCard : M5Stack > UIflow (micropython code)
-
Hi, this is a script that works well for me.
Context : during an experiment, you want to save data collected from sensors.
You re doing many acquisitions so you need to save data in many files.
Hope it will help.In this example, data (temperature and humidity) is generated by random numbers.
from m5stack import * from m5ui import * from uiflow import * import os import time from random import randint last_time = 0 Time_Interval = 5 #wait 5 seconds before the new data acquisition abscisse = [] # the data is collected in 3 lists temperatures = [] humidities = [] label0 = M5TextBox(50, 140, "", lcd.FONT_DejaVu18,0xFFFFFF, rotate=0) # don't know why it s works without the sd_mount() instruction #sd_mount() # this function for a brand new screen def refresh_screen(): setScreenColor(0x222222) lcd.font(lcd.FONT_DejaVu18) lcd.print("Welcome !", 10 , 20, 0xFFFFFF) lcd.print("Writing Data on SDCard", 10 , 40, 0xFFFFFF) lcd.print("Please Press Button B", 10 , 60, 0xFFFFFF) lcd.print(" to save file", 10 , 80, 0xFFFFFF) lcd.print("Current File length", 10 , 100, 0xFFFFFF) wait(0) # test if a file is already existing def file_exists(fname): try: with open(fname): pass return True except OSError: return False refresh_screen() t0 = time.ticks_ms() while True: if (time.ticks_ms()-last_time) >= Time_Interval*1000: last_time = time.ticks_ms() new_time = (time.ticks_ms()-t0) // 1000 # when it s time, you can collect a new data from a sensor # some kind of env.get_temperature, works here with numbers temp = randint(200,300) / 10 # random number for temperature in °C humi = randint(40,60) # random number for humidity in % abscisse.append(new_time) # writing new value in each list temperatures.append(temp) humidities.append(humi) label0.setText(str(len(abscisse))) wait(0.1) if btnB.isPressed(): file_path = "/sd/MeasuresTH0.txt" while file_exists(file_path): # create a new file name if several acquisitions file_path = file_path.replace("/sd/MeasuresTH"," ") file_path = file_path.replace(".txt"," ") file_path = file_path.strip() file_path = int(file_path) + 1 file_path = "/sd/MeasuresTH"+str(file_path)+".txt" f1 = open(file_path, 'w+', encoding="utf-8") # the file operations for writing on SDcard all the data in the same file f1.write("{} \n".format(abscisse)) f1.write("{} \n".format(temperatures)) f1.write("{} \n".format(humidities)) f1.close() label0.setText("Saved in \n" + file_path) wait(2) # reset all stuff and do it again t0 = time.ticks_ms() last_time = 0 abscisse = [] temperatures = [] humidities = [] setScreenColor(0x222222) refresh_screen()
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login