🤖Have you ever tried Chat.M5Stack.com before asking??😎
    M5Stack Community
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Register
    • Login

    Tip : Writting data from sensors to SDCard : M5Stack > UIflow (micropython code)

    Lessons and Guides
    1
    1
    6.1k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • S
      Serge
      last edited by Serge

      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()
      
      1 Reply Last reply Reply Quote 0
      • First post
        Last post