3.30 haas506 2.0开发教程-example - SD卡存储数据读写

news2024/11/15 20:03:18

SD卡存储数据读写

  • 案例说明
  • 数据的写入与读取
  • 串口工具读取数据
      • 接收数据
      • CSV格式

案例说明

部分设备使用过程中需要保存大量数据到TF卡中,大部分场景拔插TF卡有不太方便。
所以本案例介绍一种使用串口工具取出设备TF卡中的数据保存在电脑中的方法。
保存格式可以自己定义,本案例介绍一下CSV文本格式。

数据的写入与读取

程序启动后网络校时一次,默认写入了一组带时间的数据。
按下自定义"KEY1"键 或者 485串口发送指令 会从485串口和USB端口各打印一次TF卡里的数据。
本案例选择485用来发送指令(同时也接收数据信息),用USB端口接收程序的log(也包含数据信息)
读取log的串口可以自己选择TTL,232,485或USB串口 (发送指令的串口和replPort 口不能是同一个 , 复用会报错)。
在这里插入图片描述

main.py

'''
1表示 可以,0表示不行
_____________________________________________
模式      r     r+      w      w+     a    a+
读        1     1       0      1      0    1
写        0     1       1      1      1    1
创建      0     0       1      1      1    1
覆盖      0     0       1      1      0    0
指针在头  1     1       1      1      0    0
指针在尾  0     0       0      0      1    1 
_____________________________________________
'''
import uos
import utime as time
from driver import GPIO
from driver import UART
import nw
import sntp

#案例演示用数据,真实项目直接读取传感器数值。
cTemp = 26.5
humidity = 40
light = 400
#-----------------------------------------
lengh = 0



#中断回调函数
def key1_callback(args):
    #读取数据
    read_from_txt()
    key1.disableIrq()
    key1.clearIrq()

def enable_key():
    #开启中断
    key1.enableIrq(key1_callback)

def read_from_txt():
    global lengh
    p=open('/sdcard0/filename1.csv','r')
    c=p.read(lengh)     #read是逐字符地读取,read可以指定参数,设定需要读取多少字符,无论一个英文字母还是一个汉字都是一个字符
    # c=p.readlines()   #readlines会把内容以列表的形式输出。
    #c=p.readline()     #readline只能读取第一行代码,原理是读取到第一个换行符就停止。
    print('content in filename1.csv is:')
    print('-'*30)
    print(c)
    writeBuf=bytearray(c)
    uart2.write(writeBuf)
    p.close()
    print('-'*30)

def write_to_txt():
    global lengh,cTemp,humidity,light
    #1.将内容写入txt文件中(当sd卡中没有filename1.txt时,w模式会创建该文件)
    f=open('/sdcard0/filename1.csv','a')
    date,t_time = get_time()
    for i in range(20):
        lens = f.write("date,{},time,{},cTemp,{},humidity,{},light,{}\n".format(date,t_time,cTemp,humidity,light))    #写入传感器数据
        lengh += lens   #计算文本字节总长度
    f.close()

def init():
    #启用sd卡
    uos.mountsd()
    #查看sd卡中有什么文件
    a = uos.listdir('/sdcard0')
    l = len(a)
    print(a)
    for i in range(l):
        if i > 0:
            uos.remove('/sdcard0/'+(a[i]))  #删除所有文件

    print("files in sd card  are:",uos.listdir('/sdcard0'))


def get_time():
    t=time.localtime()
    d="{:04d}-{:02d}-{:02d}".format(t[0],t[1],t[2])
    t = "{:02d}:{:02d}:{:02d}".format(t[3],t[4],t[5])
    return d,t

if __name__ == '__main__': 
    #按键
    key1=GPIO(10,10)
    key1.open("KEY1")
    enable_key()    #按键中断回调,按下按键读取数据
    uart2=UART()
    uart2.open("RS485")
    nw.connect_network()    #联网
    sntp.settime()    #校时
    init() 
    #写入数据
    write_to_txt()
    writeBuf=bytearray('** please  input  $Factory **\r\n')
    uart2.write(writeBuf)
    while True:
        readBuf=bytearray(8)
        while True:
            uart2.read(readBuf) 
            if readBuf == '$Factory':
                read_from_txt()
                break
            else:
                pass
        time.sleep(1)

nw.py

import network
import utime as time



#联网状态标志
g_connect_status = False

def on_4g_cb(args):
    global g_connect_status
    pdp = args[0]
    netwk_sta = args[1]
    if netwk_sta == 1:
        g_connect_status = True
    else:
        g_connect_status = False

def connect_network():
    global Net,on_4g_cb,g_connect_status
    Net = network.NetWorkClient()
    g_register_network = False
    if Net._stagecode is not None and Net._stagecode == 3 and Net._subcode == 1:
        g_register_network = True
    else:
        g_register_network = False
    if g_register_network:
        Net.on(1,on_4g_cb)
        Net.connect(None)
    else:
        print('network register failed')
        return False
    while True:
        if g_connect_status:
            print('network register successed')
            return True
        time.sleep_ms(20)

#联网状态标志位
def getNetFlag():
    global g_connect_status
    return  g_connect_status   


board.json

{
  "name": "haas506",
  "version": "1.0.0",
  "io": {
    "KEY1": {
      "type": "GPIO",
      "port": 44,
      "dir": "irq",
      "pull": "pullup",
      "intMode": "rising"
      },
      "RS485":{
        "type":"UART",
        "port":2,
        "dataWidth":8,
        "baudRate":115200,
        "stopBits":1,
        "flowControl":"disable",
        "parity":"none"
      }
  },
  "debugLevel": "ERROR",
  "repl": "enable",
  "replPort": 3
}

修改replport自行定义输出串口,为了方便使用可以使用3 USB打印log。(485用于发送指令,不能作为replport的log输出)
在这里插入图片描述

在这里插入图片描述

串口工具读取数据

接收数据

方法一,选择485串口发送指令(或按下KEY1键),能够接收到设备储存的数据,点击保存数据就能在串口工具目录下找到对应文件
在这里插入图片描述
在这里插入图片描述
方法二,选择USB对应串口按下"KEY1"键也能收到下面的log
在这里插入图片描述

CSV格式

.csv 文件默认是被Excel打开的,可以当作表格处理。将保存的TXT格式文件后缀修改为.CSV后,如下

在这里插入图片描述

逗号分隔值(Comma-Separated Values,CSV),其文件以纯文本形式存储表格数据(数字和文本)。

使用规则

  • 开头是不留空,以行为单位。
  • 可含或不含列名,含列名则居文件第一行。
  • 一行数据不跨行,无空行。
  • 以半角逗号(即,)作分隔符,列为空也要表达其存在。
  • 列内容如存在半角引号(即"),替换成半角双引号(“”)转义,即用半角引号(即"")将该字段值包含起来。
  • 文件读写时引号,逗号操作规则互逆。
  • 内码格式不限,可为 ASCII、Unicode 或者其他。
  • 不支持数字
  • 不支持特殊字符

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/464302.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详细安装使用教程】店侦探 - 跟踪店铺数据,学习运营技巧,引流关键词,电商人必备工具

简介 店侦探插件是一款电商网络浏览插件,能够帮助店主更好地运营自己的网店,这款插件功能十分全面强大,可以全面跟踪店铺的销量情况、引流关键词、直通车、营销活动、宝贝变更跟踪!感兴趣的朋友快来体验吧,跟踪店铺数…

常见的用户密码加密及破解方法

用户密码安全是互联网行业需要保障的重要安全之一,由于黑客的入侵和内部的泄露,保证用户密码安全并不是件容易的事情,但如果采用合适的算法加密用户密码,即使信息泄露出去,黑客也无法还原出原始的密码(或者还原的代价非…

vue3 封装ECharts组件

一、前言 前端开发需要经常使用ECharts图表渲染数据信息,在一个项目中我们经常需要使用多个图表,选择封装ECharts组件复用的方式可以减少代码量,增加开发效率。 ECharts图表大家应该用的都比较多,基础的用法就不细说了&#xff…

如何成为企业急需的技术人才:掌握这些技能,提升你的实力和竞争力

在当前竞争激烈的互联网环境中,作为程序员等技术岗,必须不断的学习,才能不断提升自身实力,锻炼自身技能。想要成为一名企业急需的技术人才,需要学习哪些技能呢? 一、IT技术发展背景及历程 IT技术是当今社…

如何借助分布式存储 JuiceFS 加速 AI 模型训练

传统的机器学习模型,数据集比较小,模型的算法也比较简单,使用单机存储,或者本地硬盘就足够了,像 JuiceFS 这样的分布式存储并不是必需品。 随着近几年深度学习的蓬勃发展,越来越多的团队开始遇到了单机存储…

【22-23 春学期】人工智能基础--AI作业6-误差反向传播

老师发布作业链接:(429条消息) 【22-23 春学期】AI作业6-误差反向传播_HBU_David的博客-CSDN博客 目录 老师发布作业链接:(429条消息) 【22-23 春学期】AI作业6-误差反向传播_HBU_David的博客-CSDN博客 1.梯度下降 2.反向传播 3.计算图 4.使用Numpy…

ROS第四十四节——路径规划

1.新建launch文件 nav05_path.launch <launch><node pkg"move_base" type"move_base" respawn"false" name"move_base" output"screen" clear_params"true"><rosparam file"$(find nav_dem…

Mybatis 知识总结1(入门、JDBC、数据库连接池、lombok介绍)

Mybatis 知识总结&#xff08;一&#xff09; 3.1 Mybatis 介绍 什么是 Mybatis ? MyBatis 是一款优秀的持久层框架&#xff0c;用户简化 JDBC 的开发。MyBatis 是 Apache 的一个开源项目 iBaits&#xff0c;2010年这个项目由 apache 迁移到了 google code&#xff0c;并且改…

Chapter 6 :CDC Constraints(ug903)

6.1 About CDC Constraints 跨时钟域&#xff08;CDC&#xff09;约束适用于具有不同发射和捕获时钟的时序路径。根据发射和捕获时钟的关系以及在CDC路径上设置的时序异常&#xff0c;有同步CDC和异步CDC。例如&#xff0c;同步时钟之间但被错误路径约束覆盖的CDC路径…

活动目录域服务

域用户能够使用[username]csk.cn进行登录。 创建一个名为“CSK”的OU&#xff0c;并新建以下域用户和组&#xff1a; sa01-sa20&#xff0c;请将该用户添加到sales用户组。 ma01-ma10&#xff0c;请将该用户添加到manager用户组。 除manager 组以外的所有用户隐藏C盘。 除…

深入理解 Linux 内核

文章目录 前言一、内存寻址1、内存地址2、硬件中的分段&#xff08;1&#xff09;段选择符 3、Linux 中的分段&#xff08;1&#xff09;Linux GDT&#xff08;2&#xff09;Linux LDT 4、硬件中的分页5、Linux 中的分页&#xff08;1&#xff09;进程页表&#xff08;2&#x…

CRLF注入漏洞、URL重定向、资源处理拒绝服务详细介绍(附实例)

目录 一、CRLF注入漏洞 漏洞简介 演示介绍 漏洞检测工具&#xff1a;CRLFuzz 二、URL重定向漏洞 漏洞简介 漏洞相关业务 演示介绍 创建重定向虚假钓鱼网站 三、WEB 拒绝服务 简介 漏洞相关业务 演示介绍 一、CRLF注入漏洞 漏洞简介 CRLF 注入漏洞&#xff0c;是因…

centos7 firewall-cmd主机之间端口转发

目录 1. firewalld1.1 firewalld守护进程1.2 控制端口/服务1.3 伪装IP1.4 端口转发 2. 案例2.1 配置ServerA2.2 安装nginx测试 &#xff08;可选&#xff09;2.3 开启端口2.4 伪装IP2.5 端口转发2.6 配置ServerB2.7 修改nginx页面显示内容2.8 访问ServerB2.9 访问ServerA 1. fi…

低代码是开发的未来,还是只能解决边角问题的鸡肋?

随着互联网行业寒冬期的到来&#xff0c;降本增效、开源节流几乎成为了全球互联网厂商共同的应对措施&#xff0c;甚至高薪酬程序员的“35岁危机”一下子似乎变成了现实。程序员的高薪吸引了各行各业的“跨界选手”&#xff0c;是编程门槛降低了吗&#xff1f;不全是&#xff0…

搭建linux邮件服务器

参考&#xff1a;企业级邮件服务器实战_哔哩哔哩_bilibili Linux 平台开源免货的邮件服务器包括: Sendmail、Postix、Omail ; 邮件服务器构成了电子邮件系统的核心&#xff0c;每个收信人都有一个位于某个邮件服务器上的邮箱(mailbox)&#xff0c;一个邮件消息的典型旅程是从…

管道命令(cut、grep、sort、wc、uniq、tee、tr、col、join、paste、expand/unexpand、split、xargs)

文章目录 管道命令(pipe)选取命令&#xff1a;cut、grepcut使用案例cut的优点缺点 grep使用案例 排序命令&#xff1a;sort、wc、uniqsort使用案例 uniq使用案例 wc使用案例 双向重定向&#xff1a;tee使用案例 字符转换命令&#xff1a;tr、col、join、paste、expandtr使用案例…

非量表数据应该如何分析?

问卷中的非量表数据应该怎么分析&#xff1f; 样本特征分析 对于非量表题的描述可以使用频数分析或者可视化图形进行描述&#xff0c;比如单选题也可以使用柱形图等进行展示&#xff0c;通过结果展示了解样本的基本情况&#xff0c;最后结合分析结果提出建议等。差异分析 除此之…

mybatis中进行时间范围查询

一 oracle数据库 数据库时间类型为DATE TO_CHAR 把日期或数字转换为字符串 TO_DATE 把字符串转换为数据库中的日期类型 TO_DATE(char, ‘格式’) TO_NUMBER 将字符串转换为数字 TO_NUMBER(char, ‘格式’) 1、入参是String类型的数据 mybatis 处理时间范围 使用TO_DATE函数…

2023个税验证Excel表

根据北京市工资计算公式制作该表格&#xff0c;用来验证每月发放工资是否有误&#xff0c;统计年度总收入等。 下载链接如下&#xff08;提升等级用&#xff09;&#xff1a; https://download.csdn.net/download/wayright/87732783 不下载&#xff0c;按照上面表格数据自己制作…

下载高清图片素材,就上这6个网站,免费还能商用

图片素材网站我已经推荐过很多了&#xff0c;今天就再给大家推荐6个高清图片素材网&#xff0c;免费下载哦~建议收藏起来。 1、菜鸟图库 https://www.sucai999.com/pic.html?vNTYwNDUx 我推荐过很多次的一个设计素材网站&#xff0c;除了设计类&#xff0c;还有很多自媒体可…