请选择 进入手机版 | 继续访问电脑版
论坛
登录 | 立即注册 设为首页收藏本站 切换到宽版
查看: 69|回复: 2

ESP8266+0.96OLED+AHT10显示温度闪屏

[复制链接]

1

主题

1

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 7 天前 | 显示全部楼层 |阅读模式
本帖最后由 wx_cL45Bdky 于 2019-9-11 11:26 编辑

ESP8266+0.96OLED+AHT10显示温度会闪屏,就是显示的时候,先全灭了再亮。哪位大神帮看一下是什么问题。我想要的效果是哪个字变了就刷新显示那个字,其它的显示不变。比如现在温度29.1度,下次测量是29.2度,那么显示屏只改小数点后面那位1变成2,其它的让它一直显示。
我的代码如下,不知哪里出了问题。
--------------------init.lua-----------------
id=0
sda2=3
scl=4
SDA_PIN,SCL_PIN=2,1 --指定相互连接的脚

function celiang()
   i2c.setup(0,SDA_PIN,SCL_PIN,i2c.SLOW)

i2c.stop(0)

    i2c.start(id)

ad=i2c.address(id,0x38,i2c.TRANSMITTER)
        i2c.write(id,0xac)        --测量命令
        i2c.stop(0)        
        
        tmr.delay(80000)

        i2c.start(0)        
                        i2c.address(id,0x38,i2c. RECEIVER)

        c=i2c.read(0,6)                        --读取6字节数据

i2c.stop(0)

        s1,s2,s3,s4,s5,s6=string.byte(c,1,6)  --输出读取的一个字节,如果要把N个字节都输出 print(string.byte(c,1,N)) , 如果只想输出第M个字节  print(string.byte(c,M))   ,详细使用方法见LUA string.byte
s41=s4

--if (s1~=25) then return end                                        --25为测量结束
        
if (ad) then
print("通讯正常!")  --检测设备是否连接上

else
print("通讯失败!")

return
end
wd=0                --温度
s4=bit.clear(s4,7,6,5,4)
wd=bit.lshift(bit.bor(wd,s4),8)        --左移8位
wd=bit.lshift(bit.bor(wd,s5),8)        --左移8位并连接前面数据
wd=bit.bor(wd,s6)
wd=(wd/1048576)*200-50

sd=0                --湿度
s41=bit.rshift(s41,4)
sd=bit.lshift(bit.bor(sd,s2),8)

sd=bit.lshift(bit.bor(sd,s3),8)

sd=bit.rshift(bit.bor(sd,s41),4)
sd=(sd/1048576)*100

print(string.format("温度:%.1f", wd).."℃")
print(string.format("湿度:%d",sd).."%")

charcode2 = tonumber(wd)
charcode3 = tonumber(sd)


h2=string.format("%.1f", charcode2)
h3=string.format("%d", charcode3)
end
tmr.create():alarm(3500,tmr.ALARM_AUTO,function()
celiang()
if (ad) then
require("ssd1306")

loop()
else return end
end)

------------------------
-------------ssd1306.lua------------
ssd1306 ={}
ssd1306.constant = "这是一个显示模块"
function init_i2c_display()
    sda = 4
    scl = 3
    sla = 0x3c
    i2c.setup(0, sda, scl, i2c.SLOW)
     disp = u8g2.ssd1306_i2c_128x64_noname(0, sla)
end
function u8g2_prepare()
  disp:setFont(u8g2.font_crox3h_tr)
  disp:setFontRefHeightExtendedText()
  disp:setDrawColor(1)
  disp:setFontPosTop()
  disp:setFontDirection(0)
end

function draw()
  u8g2_prepare()
disp:drawXBM(80,0,16,16,string.char(0x06,0x00,0x89,0x2F,0x69,0x30,0x36,0x20,0x10,0x20,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x18,0x00,0x10,0x00,0x30,0x20,0x60,0x10,0x80,0x0F,0x00,0x00))
--danwei
disp:drawStr(80,40,"%")
end

function draw2()
--wendu
if h2~=nil then
disp:setFont(u8g2.font_logisoso30_tn)
disp:drawStr(0,0,h2)
end
end




function draw3()
--shidu
if h3 ~=nil then  
disp:setFont(u8g2.font_logisoso30_tn)
disp:drawStr(0,33,h3)
end
end



function loop()
init_i2c_display()
  disp:clearBuffer()
  draw()
draw2()
draw3()
  disp:sendBuffer()
end

return ssd1306

-------------------

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

1

主题

47

帖子

260

积分

中级会员

Rank: 3Rank: 3

积分
260
发表于 7 天前 | 显示全部楼层
这里没什么人的,代码的问题谁那么有空帮你测试。我只能告诉你我所知道的现象:
1.确保电流有500ma,你要亲自测试电流,最好有测电流的专门仪器,没有的话拿万用表接很多led灯测试(芯片是 3.3 V,led也是3.3 V,并联接一般不会烧)。wifi发射时很耗电流,好像时250ma左右,如果你的供电不足,OLED哪来的电?

2.写字节到OLED时,你都打印一下发送了什么命令,如果是你忘记了哪里发了重启屏幕命令,那不是自己瞎搞。
回复

使用道具 举报

1

主题

11

帖子

27

积分

新手上路

Rank: 1

积分
27
发表于 7 天前 | 显示全部楼层
有一个管脚是控制屏幕点亮与关闭的 你看看是不是你代码里有地方设置错误了  造成切换那个管脚的状态了   我的是8脚的BL只是控制是否点亮屏幕的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|安信可论坛    

GMT+8, 2019-9-18 03:24 , Processed in 0.020545 second(s), 14 queries , Redis On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表