OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7155|回复: 2

ESP8266使用lua开发驱动oled

[复制链接]

3

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
126
金钱
126
注册时间
2012-10-21
在线时间
23 小时
发表于 2017-6-30 08:40:22 | 显示全部楼层 |阅读模式
目前在家带孩子,翻东西找到了一块ESP8266模块,还带底板,早就听说ESP8266功能丰富有各种固件可以刷。去安信可官网(https://www.ai-thinker.com/home)看了下,叫yellow_board,不过现在好像这个版本不生产了,用着确实**,板子没有丝印,每个IO要自己去量………FUCK………好了,废话少说。找了个USBTTL模块开搞。
本身自带了AT模式固件,还需要一个单片机去控制,那多不爽,作为一个工程狗怎能这么浪费,果断找固件ing……比较了目前做的比较好的应该是NodeMcu了,资料也比较多。
好了,第一步:刷机
构建自己的固件
拿到这一块小玩意后,我们先来构建自己的固件,输入自己的邮箱,用来接收编译后的bin文件。注意要输入两次邮箱地址,第二次输入不可以复制。构建地址:https://nodemcu-build.com
随便选择几个功能模块                PS:选的功能越多固件体积越大,我第一次就是选的过多,超过了512KB,死活下载不进去,痛苦了好久,终于发现我手上的版本是比较老的模块了,SPIFlash是W25q40,只有512KB,这怎么能忍呢!!好吧,开盖,换Flash为W25Q64,8M了,开始起飞吧!!
开盖后的照片
图片1.png
还原他
图片2.png
图片3.png
选好之后开始,不一会邮箱就会收到发来的固件了,赞一个…………
Your NodeMCU custom build finished successfully. You may now download the firmware:
里面有两个版本,一个float,一个integer,区别在于支不支持浮点数。
下载固件
下载工具一般这两个:
图片4.png
图片5.png
图片6.png
图片7.png
图片8.png
图片9.png
图片10.png
连接好串口,选择你的固件的位置,短接模块重新上电进入下载模式就可以开始了。波特率设置的尽量高一点,不然下载的你怀疑人生。
等一会就可以了,移除短接,重启就ok了,开始code,起飞ing…………
图片11.png
编写一个lua文件,下载到esp8266runok
单片机工程师的第一个代码开始了:闪烁led
[mw_shl_code=c,true]pin = 8
i=0
function led()
    i=i+1;
    if(i%2 == 0) then
        print("Now is 0")
        gpio.mode(pin,gpio.OUTPUT)  
        gpio.write(pin,gpio.LOW)
    else
       print("Now is 1")
       gpio.mode(pin,gpio.OUTPUT)  
       gpio.write(pin,gpio.HIGH)
    end

   
end
tmr.alarm(0, 1000, tmr.ALARM_AUTO, led)[/mw_shl_code]
下载进去就会一闪一闪的了,只能说这种开发方式确实简单粗暴,不用涉及基层的东西,开发时间很短。
只闪烁一个led怎么能满足?来个高级点的,OLED
[mw_shl_code=c,true]cs  = 8 -- GPIO15, pull-down 10k to GND
dc  = 4 -- GPIO2
res = 3 -- GPIO3
spi.setup(1, spi.MASTER, spi.CPOL_LOW, spi.CPHA_LOW, 8, 8)
gpio.mode(8, gpio.INPUT, gpio.PULLUP)
disp = u8g.ssd1306_128x64_hw_spi(cs, dc, res)
disp:setFont(u8g.font_6x10)

local s = 0
function draw(state)
    if state == 0 then
        disp:drawStr(0, 15, "drawBox")
        disp:drawBox(0, 23, 10, 20)
    elseif state == 1 then
        disp:drawStr(0, 15, "drawCircle")
        disp:drawCircle(36, 36, 10)
    elseif state == 2 then
        disp:drawStr(0, 15, "drawDisc")
        disp:drawDisc(36, 36, 15)
    elseif state == 3 then
        disp:drawStr(0, 15, "drawEllipse")
        disp:drawEllipse(60, 30, 20, 10, U8G_DRAW_ALL)
    elseif state == 4 then
        disp:drawStr(0, 15, "drawFrame")
        disp:drawFrame(60, 20, 20, 30)   
    elseif state == 5 then
        disp:drawStr(0, 15, "drawLine")
        disp:drawLine(5,26, 25, 40)
    elseif state == 6 then
        disp:drawStr(0, 15, "drawStr")
        disp:drawStr90(60, 20, "drawStr90")
    else  
        disp:drawStr(0, 15, "drawTriangle")
        disp:drawTriangle(14,20, 45,32, 9,42);   
    end
end
disp:begin()
tmr.alarm(0, 1000, tmr.ALARM_AUTO, function()
    if s == 7 then
        s = 0
    else
        s = s + 1
    end
    disp:firstPage()
    while (disp:nextPage())
    do
        draw(s)
    end
end)[/mw_shl_code]
就是这么简单,oled就亮了,感叹人生苦短……这里的oled用的spi接口的,这种
图片12.png
效果图:
图片13.png
图片14.png
图片15.png
这个固件确实强大,常见的各种器件都有库了,开发起来确实高效。
文章写的比较粗糙,有些细节可能没有表达出来,希望大家能够一块研究进步…………好像废话说多了


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

19

主题

66

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2015-12-6
在线时间
47 小时
发表于 2018-1-19 14:33:24 | 显示全部楼层
你好啊,我看了你写的文章之后我在想,这个NodeMCU是不是只要有一个ESP8266就可以了,那么使用这个构建的话,构建出来的底层接口和我自己使用的接口还一样吗?比如串口,这个8266串口也有好几个吧。
回复 支持 反对

使用道具 举报

2

主题

472

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5722
金钱
5722
注册时间
2018-6-27
在线时间
502 小时
发表于 2021-5-6 10:03:08 | 显示全部楼层
学习学习,学习学习。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-8 21:56

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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