合宙ESP32-C3 使用lua与XGZP6826D压力传感器 i2C通信

学习lua程序语言,学习了I2C通信

记录一下代码及硬件连接过程,同时记录一下异常状态

硬件连接

使用ESP32-C3开发板的GPIO 0和GPIO 1脚与压力传感器的 SCL SDA 连接,焊接4.7K电阻上拉。
要上拉所有找了一块转接板
ESP32-C3使用的引脚压力传感器外观,使用的时候是有转接板的,粘接在一个金属件上不方便上传
在这里插入图片描述

合宙LUA对应的I2C通信定义

方便引脚更换用的软I2C

传感器对I2C通信的基本参数

在这里插入图片描述
在这里插入图片描述
实际文档地址为D6

代码


-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "i2c XGZP6826D demo"
VERSION = "1.0.0"

-- sys库是标配
sys = require("sys")

local softI2C = i2c.createSoft(0, 1, 210)

sys.taskInit(function()
    log.info("i2c initial",softI2C)
    while true do
            i2c.send(softI2C, 0x6D, 0xA5) --写A5
        
            local data = i2c.recv(softI2C, 0x6D, 1)  --1字节
            --sys.wait(2)
            i2c.send(softI2C, 0x6D,{0xA5, 0x11}) --2字节A5 11
            --sys.wait(2)
            i2c.send(softI2C, 0x6D,{0x30, 0x0A}) --2字节30 0A
            --sys.wait(2)
            i2c.send(softI2C, 0x6D,0x30)  --X写1字节30
            --sys.wait(2)
            local data2 = i2c.recv(softI2C, 0x6D, 1) --1字节
            --sys.wait(2)
            i2c.send(softI2C, 0x6D,0x06) --1字节06
            --sys.wait(2)
            local data3 = i2c.recv(softI2C, 0x6D, 1) --1字节
            --sys.wait(2)
            i2c.send(softI2C, 0x6D,0x07)  --1字节07
            --sys.wait(2)
            local data4 = i2c.recv(softI2C, 0x6D, 1) --1字节
            --sys.wait(2)
            i2c.send(softI2C, 0x6D,0x08)  --1字节08
            --sys.wait(2)
            local data5 = i2c.recv(softI2C, 0x6D, 1) --1字节
            --sys.wait(2)
            i2c.send(softI2C, 0x6D,0x09)  --1字节09
            --sys.wait(2)
            local data6 = i2c.recv(softI2C, 0x6D, 1) --1字节
            --sys.wait(2)
            i2c.send(softI2C, 0x6D,0x0A)  --1字节09
            --sys.wait(2)
            local data7 = i2c.recv(softI2C, 0x6D, 1) --1字节

        sys.wait(100)
    
        n1 =  string.toHex(data) --16进制转换成字符串
        n2 =  string.toHex(data2) 
        n3 =  string.toHex(data3)
        n4 =  string.toHex(data4)
        n5 =  string.toHex(data5)
        n6 =  string.toHex(data6)
        n7 =  string.toHex(data7) 

        local num1 = tonumber(n6 , 16) --16进制转换成10进制
        local num2 = tonumber(n7 , 16)
        local temp = num1*256+num2  --温度运算

        local pnum1 = tonumber(n3 , 16)
        local pnum2 = tonumber(n4 , 16)
        local pnum3 = tonumber(n5 , 16)
        local ak1 = pnum1 * 65536 + pnum2 * 256 + pnum3  --压力运算

        if ak1 > 8388608 then   --气体压力转换
            ak1 = (ak1 - 16777216 ) /3200 
            elseif temp <= 8388608 then
            ak1 = ak1  /3200
        end

        if temp < 32768 then  --气体温度转换
            temp =temp /256
            elseif temp >= 32768 then
            temp =(temp - 66535) /256 
        end

        log.info("i2c initial",n1,n2,n3,n4,n5,n6,n7,temp ,ak1  )
    end

end)

-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

代码比较随意,顺序结构初学容易看懂

示波器监控的数据

在这里插入图片描述
使用示波器的解码功能,可以看到压力传感器与单片机通信的数据,对于学习I2C通信测量工具很重要

Luatools监控的数据

在这里插入图片描述

最后两个参数为温度和压力值

注意事项,

  1. IC2通信不接传感器,发生地址后的数据是没有的,接上传感器就恢复正常了
  2. ESP32-C3不是所有引脚都可以正常通信的,用IO 12脚做SDA是接收数据不稳定,不知道是否应为io12接了LED灯,通信的时候LED在闪。
  3. 测试过程中,SDA不接上拉电阻也是会影响测试,接引线直接与示波器连没有信号,不接就可以看到信号,接上拉就正常。
  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时光荏苒2024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值