合宙ESP32-C3 使用lua与XGZP6826D压力传感器 i2C通信
学习lua程序语言,学习了I2C通信
记录一下代码及硬件连接过程,同时记录一下异常状态
硬件连接
使用ESP32-C3开发板的GPIO 0和GPIO 1脚与压力传感器的 SCL SDA 连接,焊接4.7K电阻上拉。
合宙LUA对应的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监控的数据
最后两个参数为温度和压力值
注意事项,
- IC2通信不接传感器,发生地址后的数据是没有的,接上传感器就恢复正常了
- ESP32-C3不是所有引脚都可以正常通信的,用IO 12脚做SDA是接收数据不稳定,不知道是否应为io12接了LED灯,通信的时候LED在闪。
- 测试过程中,SDA不接上拉电阻也是会影响测试,接引线直接与示波器连没有信号,不接就可以看到信号,接上拉就正常。