`这次呢,我想讲一下小e开发板上oled屏的用法,虽然之前也讲过oled屏,不是那是用以烧写固件的方式,不仅代码比较冗杂,而且每次上传代码都要烧写固件,调试起来十分的不便,因此,这次我就讲一下如何用另一种方式,实现oled屏的使用,下面我先贴上代码
- function Init_oled(sda,scl,sla)
- i2c.setup(0, sda, scl, i2c.SLOW)
- disp = u8g.ssd1306_128x64_i2c(sla)
- disp:setFont(u8g.font_7x13B)
- disp:setFontRefHeightExtendedText()
- disp:setDefaultForegroundColor()
- disp:setFontPosTop()
- end
- print('MQ-2 and DHT11 Demo')
- MQ2_pin=0
- DHT11_pin=1
- gpio.mode(MQ2_pin, gpio.INPUT)
- gpio.mode(DHT11_pin, gpio.INPUT)
- Init_oled(4,5,0x3c)
- status, temp, humi, temp_dec, humi_dec = dht.read(DHT11_pin)
- function display()
- disp:firstPage()
- local heap = tostring(node.heap())
- repeat
- disp:drawStr(30,20, temp)
- disp:drawStr(50,20,humi)
- disp:drawStr(30,40,adc.read(MQ2_pin))
- until disp:nextPage() == false
-
- end
- tmr.alARM(0,1000,1,function()
- if status == dht.OK then
- print("MQ-2(mV):"..adc.read(MQ2_pin)..";".."DHT Temperature:"..temp..";".."Humidity:"..humi)
- display()
-
- elseif status == dht.ERROR_CHECKSUM then
- print("MQ-2(mV):", adc.read(MQ2_pin))
- print( "DHT Checksum error." )
- elseif status == dht.ERROR_TIMEOUT then
- print("MQ-2(mV):", adc.read(MQ2_pin))
- print( "DHT timed out." )
- end
- end)
复制代码
其实关于MQ-2和DHT11部分的代码和上一篇帖子是一模一样的,只是增加了oled屏部分,其实也很简单,首先就是初始化oled屏,设置一下输出字体的格式,然后就能直接调用了。这里我想说一下,如果想用oled屏,固件里必须有u8g库文件,点击这里,可以自选库文件,我选的是adc,cjson,dht,file,gpio,i2c,net,node,pwm,rtctime,spi,tmr,u8g,uart,wifi,ws2812
你们可以根据自己的需要,选择 合适自己的库文件,但是注意一点,自选固件的时候,那个接收邮箱不能是QQ邮箱,我用的是163邮箱,用手机注册一个就行了。
还有就是关于u8glib库,你们可以参考一下这篇文章,里面关于nodemcu里的u8glib库函数还有oled屏的使用,讲的都很详细。
这是小e开发板上显示的图,效果不是太好,这也与字体样式有关,但是要注意,不是字体越大越清楚,要选择合适的,我这里推荐使用u8g.font_7x13B,效果较其他的还不错。
最后,附上我使用的固件,大家不想去自己选的话也可以直接下载
`
|