- 博客(32)
- 收藏
- 关注
原创 地磁传感器(学习笔记下)
读到后的值,最终传入t_sQMC5883L定义的结构体,注意一下这里面的mag_reg数据变量,定义的时候是16位的3个元素,在读寄存器的时候,强制为8位指针变量,读6个字节。然后我们再写一个计算方位角的函数,使用磁力值计算方位角,最简单的方式,只需要一个公式。咱们接着学习笔记上来学习哈,首先,我们编写读取方位角程序,配置好传感器以后,我们就可以读取磁力值了,我们先定义一个结构体类型,用来存放磁力值以及方位角值。在主函数中,qmc5883l初始化以后,每间隔1秒钟计算1次方位角值,然后通过串口发送到终端。
2024-10-26 22:11:25 517
原创 地磁传感器(学习笔记上)
在这个项目里,我们首先写的是编写QMC5883L驱动程序,我们还是使用sample project作为模板,我们复制esp-idf-v5.1.3\examples\get-started\sample_project这个工程到我们的实验文件夹,然后把这个文件夹的名称修改为azimuth,azimuth是方位角的意思哈,在VSCode软件,然后打开azimuth文件夹。接下来,开始写qmc5883l的驱动函数,我们先写两个读取qmc5883l寄存器的函数和写入qmc5883l寄存器的函数。
2024-10-26 21:43:15 750
原创 温湿传感器(学习笔记下)
接着我们温湿传感器上半部分的学习,现在我们学习接下来的部分,编写GXHTC3驱动程序,也就是给gxhtc3.c文件添加代码,我们要判断gxhtc3芯片是否存在和正常,就要先读取gxhtc3的ID号,根据gxhtc3的数据手册,读取命令为0xEFC8,发送命令后,可以读出16位的ID号和1个CRC字节。根据gxhtc3的数据手册上介绍,每一次读取数据,都需要经过四组命令,按照执行顺序,分别是唤醒、测量、读出、休眠,我们分别写这四个命令的函数,首先,我们要写一下唤醒的代码,以下是我写的。
2024-10-26 16:53:30 516
原创 姿态传感器(下)
在这里,我们需要注意一下,这里面的buf数据变量,定义的时候是16位的6个元素,在读寄存器的时候,强制为8位指针变量,读12个字节。这里,大家可以看一下寄存器定义,加速度寄存器有6个,陀螺仪寄存器有6个,每个值都是由低字节寄存器和高字节寄存器组成,然后我们再写一个计算姿态的函数,计算姿态,可以单独使用加速度值,可以单独使用陀螺仪值,也可以融合使用,它们各自有优缺点,下面,我们写一个使用加速度值计算姿态的函数。这个函数中用到了atan函数,需要在文件中包含头文件math.h。最后,我们可以编译一下。
2024-10-25 23:53:45 244
原创 姿态传感器(学习笔记上)
接下来,开始写qmi8658c的驱动函数,通过课程视频学习,我们先写两个读取qmi8658c寄存器的函数和写入qmi8658c寄存器的函数,写入函数用于配置传感器的参数,读取函数用于读取传感器的寄存器数据,例如ID号,状态等,这两个函数放入qmi8658c.c文件中。枚举类型的第一个值默认是0,和寄存器WHO_AM_I的地址一样,所以不用标出,然后依次递增,遇到地址不连续的寄存器地址时,单独标出,最后的结果如上代码所示。函数里面用到了ESP_LOGI,用来输出信息,这里的TAG,需要定义。
2024-10-25 23:41:07 801
原创 Go Web开发登录功能实现
在Go语言中实现Web应用的登录功能,我们通常会涉及到几个技术点:处理HTTP请求、模板渲染、会话管理(如cookie或session)、数据库操作(用于存储和验证用户信息)。这里以Gin为例,执行`go get -u github.com/gin-gonic/gin`来安装。这里假设使用MySQL,并使用`go get -u github.com/go-sql-driver/mysql`安装MySQL驱动。安装Go环境:确保你的计算机上已经安装了Go语言,然后在你的电脑环境配置中加入Go的环境配置。
2024-10-25 23:14:02 469
原创 温湿度传感器(学习笔记上)
第4行定义I2C通信速率,一般情况下,I2C器件的通信速率有3种,100k、400k、1M,速度越大,通信越快,I2C传感器芯片手册上会提到支持的最大速率,温湿度传感器GXHTC3的I2C通信速率可以达到1M,这里写的是400k,不需要修改;跟随老师的步伐,我们接下来在app_main函数中,调用i2c_master_init初始化函数,复制i2c_simple_main.c文件中第85~86行代码,放到main.c文件中的app_main函数中,如下代码所示。
2024-10-25 23:11:03 647
原创 BOOT_KEY按键(学习笔记)
第三条代码,启动GPIO中断服务,其中ESP_INTR_FLAG_DEFAULT的值是0,这个宏定义是在gpio_example_main.c文件中定义的,我们可以直接把这里改成0,也可以把这个宏定义复制到我们的main.c文件中。我们点击gpio_example_main.c打开这个文件,找到app_main函数。接下来,我们在app_main函数的上方添加队列、中断等相关的代码,复制gpio_example_main.c中的第60~76行到我们的main.c文件中,放到app_main函数的上方。
2024-10-25 23:09:03 880
原创 例程学习(学习笔记)
4.我们需要配置的就是第四个图标menuconfig了,点击图标,接着点击左侧的Serial flasher config,在右侧出现的配置选项里面,我们要把Flash size默认的2MB改成8MB,因为咱们开发板上的FLASH芯片是8MB。点击保存,接着进行关闭即可。2.接下来咱们要进行目标芯片的配置,点击第二个图标,在中间最上方会出现工程路径,点击选择,然后就会出现可选的芯片型号,我们选择esp32c3,点击esp32c3之后,又会弹出下载方式的选择,这里出现三种方式,我们选择第三种下载方式。
2024-10-25 17:27:28 456
原创 Go Web开发使用mode控制日志输出
我们可以通过Gin框架修改“gin.SetMode()”函数来设定运行模式。默认情况下,Gin处于“debug”模式,这会提供更详细的日志信息。在生产环境中,我们应该将其切换到“release”模式以减少日志输出并提高性能。Gin框架允许我们自定义日志处理逻辑,这样就可以根据不同的模式将日志输出到不同的位置,比如控制台、文件等。在生产环境中,我们可以通过创建一个自定义的“Logger”实例来实现将日志写入文件中。如果不做特殊配置,Gin默认使用控制台输出日志,这对于开发环境已经足够了。
2024-05-19 20:19:32 202
原创 GO Web-使用refresh Token 刷新access Token 模式
3. 检测Access Token过期:当客户端收到Access Token过期的响应时(通常是HTTP 401 Unauthorized错误),而不是立即让用户重新登录,客户端将使用Refresh Token来请求新的Access Token。如果Refresh Token有效且未过期,认证服务器验证其有效性,并返回一个新的Access Token(可能还有新的Refresh Token,取决于实现)。特点:有效期较长,通常比Access Token长很多,有时甚至是永久有效的,直到用户注销或被撤销。
2024-05-19 15:23:37 717
原创 GO Web开发-解决代码中循环引用的问题
2.正常的步骤是,请求来了先到router,然后路由这个地方会先去执行我们的middlewares里面的这个中间件(JWT的auth认证的中间件),在这个中间件里面它又调用了controller里面返回响应的方法。我们可以把ctx,就是常量的定义从middlewars这层拿出来,放到controller这层,然后在middlewars这一层把controller同意一下。1.例如a导入b这个包,b导入a这个包,a再导入b这个包,诸如此类的属于循环引用。
2024-05-18 19:56:28 212
原创 二、优化JWT认证中间件
2:重新建立一个middlewares包,在再middlewars包下建立一个关于认证的auth,此中间件用于判断token是否有效,并将有效的Token解析。3.假设在用户登录成功后发放Token,并且使用此Token可以获取用户信息。1:需要引进jwt包。
2024-05-17 20:04:47 166
原创 JWT Token
JWT默认是不加密的,不要把秘密信息放在这部分,JSON对象也要使用Base64URL算法转成字符串。头部和负载以JSON形式存在,三部分内容都经过了Base64编码,以.拼接。也是一个JSON对象,JWT规定了7个官方字段供选用。exp(expirayion time):过期时间。nbf(Not Before):生效时间。iat(Issued At):签发时间。签名是对前两部分的签名,防止数据篡改。iss(issuer):签发人。sub(subject):主题。jti(JWT ID):编号。
2024-05-16 20:07:06 169
原创 初学者学Linux常用命令
rm`:删除文件或目录(使用 `-rf` 参数可递归强制删除)。`touch`:创建新的空文件或更新文件的访问和修改时间。`grep`:在文件中搜索匹配特定模式(字符串)的内容。`find`:按照指定条件在文件系统中查找文件。`mv`:移动或重命名文件和目录。`pwd`:显示当前工作目录。`cd`:改变当前工作目录。`mkdir`:创建新目录。`rmdir`:删除空目录。以上是我初学碰到的Linux的命令。`cp`:复制文件或目录。`ls`:列出目录内容。
2024-04-27 15:24:54 145
原创 基于雪花算法生成用户ID
(1)别人在你的网站注册一下就能知道你的数据库里面到底有多少个用户。(2)在我们使用分库分表的时候,不同库中的userID会有可能重复。
2024-04-27 15:14:47 145
原创 大型Web项目CLD的分层理念
controller:整个Web服务的一个入口,负责处理路由,参数的一些校验,请求的转发等等,然后继续传递给longic这一层。DAO:(reponsitory):下一层的存储的内容,Mysql,redis等等交互的操作对外分装成简单的函数。model(模型):程序员编写应用程序应该具有的功能实现一些算法,与代码作成映射的关系。controller(控制器):控制整个数据的流向,数据变化的时候更新视图。longic:真正处理业务逻辑的地方(调用DAO层的函数或者接口)
2024-04-18 15:19:58 251
原创 使用 go-redis 库操作 zset
库对Redis中的有序集合进行基本操作,包括添加成员、修改成员分数、获取分数最高的成员和查询指定分数范围内的成员。通过使用带有超时的context,代码确保了操作不会无限期地等待Redis的响应,提高了程序的响应速度和稳定性。这段代码展示了如何使用。
2024-04-16 21:32:14 340
原创 redis.Nil
go-redis 库提供了一个 redis.Nil 错误来表示 Key 不存在的错误。因此在使用 go-redis 时需要注意对返回错误的判断。在某些场景下我们应该区别处理 redis.Nil 和其他不为 nil 的错误。
2024-04-16 21:21:44 685
原创 Go redis执行任意命令
go-redis 还提供了一个执行任意命令或自定义命令的 Do 方法,特别是一些 go-redis 库暂时不支持的命令都可以使用该方法执行。
2024-04-16 21:13:35 137
原创 Mac如何安装redis
可以使用Redis的客户端工具来连接Redis服务器。使用Homebrew安装Redis。Homebrew是Mac上的一个包管理器,可以方便地安装软件。以上就是在Mac上安装Redis的步骤。安装完成后,你可以根据需要配置和使用Redis。如果看到Redis相关的进程正在运行,说明Redis已经成功安装并启动。启动Redis服务。检查Redis是否成功运行。Homebrew会自动下载并安装Redis。,表示已经成功连接到Redis服务器。打开终端(Terminal)。Mac 安装redis。
2024-04-16 17:14:28 226
原创 Mysql与go(预处理查询)
3. Prepare方法会先将sql语句发送给MySQL服务端,返回一个准备好的状态用于之后的查询和命令。返回值可以同时执行多个查询和命令。1. database/sql中使用下面的Prepare方法来实现预处理操作。
2024-04-04 20:30:01 134
原创 golang中defer的理解和用法
这时,你可以将关闭文件的操作放在defer语句中,这样即使在读写过程中发生错误,函数提前返回,文件关闭的操作依然会被执行。//defer语句的执行顺序是后进先出(LIFO),即最后执行的defer语句会最先执行,这在资源管理中非常有用,因为它可以确保资源的释放顺序与获取资源的顺序相反,例如先解锁再关闭文件。//在这个例子中,即使os.Open函数调用失败,defer语句中的fmt.Println("文件已关闭")和file.Close()都会被执行,从而确保了资源的正确释放。
2024-04-01 22:37:21 244
原创 初学Mysql与go(初始化mysql连接)
/在Go语言中,defer是一个关键字,它用于在函数返回之前执行一个语句或一个函数调用。//下面是一个使用defer的简单示例: //在这个例子中,即使os.Open函数调用失败,defer语句中的fmt.Println("文件已关闭")和file.Close()都会被执行,从而确保了资源的正确释放。//defer语句的执行顺序是后进先出(LIFO),即最后执行的defer语句会最先执行,这在资源管理中非常有用,因为它可以确保资源的释放顺序与获取资源的顺序相反,例如先解锁再关闭文件。
2024-04-01 22:33:11 552
原创 最基本的Git提交使用
git commit 还有一个用法:git commit --amend // 不去生成一个新的commit对象,而是沿用本地上一个commit对象。如果你现在在a分支,想要切换到已有b分支,但是不想把当前分支有改动的文件都带到b分支去,下次切到a分支的时候希望有改动的文件都还在。如果你现在在a分支,想要切换到已有b分支,并且想把当前分支有改动的文件都带过去。git push "分支名" // 提交到指定的远程分支。如果你现在在a分支,想要切换到一个新的分支:b分支。最基本的git提交使用。
2024-03-01 11:37:01 468
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人