ESP8266-nodeMCU-I2c-12864-写个三行情书

ESP8266-nodeMCU-I2c-12864-写个三行情书

最终效果

       ESP8266-nodeMCU-I2c-12864-写个三行情书_第1张图片     

硬件准备

  1. ESP8266 ---我买的是nodeMCU开发板,某宝15元上下
  2. I2c-12864-oled液晶屏模块 0.96寸白色---某宝只要12块钱上下。多说一句,12864就是128*64点阵的屏幕,所以叫12864!
  3. 母对母杜邦线4根
  4. microUSB口-用来连接ESP8266

 

软件准备

  1. ESP8266Flasher.exe----用来烧写固件,简单的说就是往ESP8266里边写入一个超级简单的操作系统,我这边烧写的固件是nodeMCU。
    1. 下载地址:https://github.com/nodemcu/nodemcu-flasher/tree/master/Win32/Release
    2. 根据自己的电脑,选择32位或64位的进行下载:
  2. ESPlorer –烧录代码的工具,需要安装java和配置java环境变量
  3. Lua代码

安装过程部分问题

  1. microUSB线链接ESP8266,提示USB设备安装失败异常(其实就是USB转串口驱动安装异常),我使用360的驱动大师安装这个驱动搞定,见截图

          ESP8266-nodeMCU-I2c-12864-写个三行情书_第2张图片

  1. 我这边安装的固件为:file, gpio, http, i2c, net, node, rtctime, sjson, sntp, tmr, u8g2, uart, wifi
    1. 登录nodemcu固件生成网站:https://nodemcu-build.com/
    2. 其实主要用到i2c、tmr、u8g2。其他的是写其他demo常用的,这里也一并导出固件吧

              ESP8266-nodeMCU-I2c-12864-写个三行情书_第3张图片

    1. 选择U8G2,一定要按图示选择

               ESP8266-nodeMCU-I2c-12864-写个三行情书_第4张图片

    1. 填入邮箱

               ESP8266-nodeMCU-I2c-12864-写个三行情书_第5张图片

    1. 最后点击生成固件:

 

    1. 最终固件会发到你的邮箱,需要24小时内下载(会生成两个固件,一个是整型数的固件,以integer结尾;另一个是浮点型的固件,以float结尾),两个固件都下载,实际上只要用到整型的固件就行了

                

 

接线图

         ESP8266-nodeMCU-I2c-12864-写个三行情书_第6张图片 

          ESP8266-nodeMCU-I2c-12864-写个三行情书_第7张图片    ESP8266-nodeMCU-I2c-12864-写个三行情书_第8张图片

 

 

刷入固件

  1. microUSB线链接ESP8266
  2. 使用ESP8266Flasher.exe刷入,打开ESP8266Flasher.exe,选择下载的固件

          ESP8266-nodeMCU-I2c-12864-写个三行情书_第9张图片

  1. 选中对应的串口(如果没有对应的串口,见“安装过程部分问题”步骤),我电脑上的串口是COM4,则选中COM4,点击Flash开始写入

         ESP8266-nodeMCU-I2c-12864-写个三行情书_第10张图片

  1. 下图是写入过程。如果过程中失败,多写入几次即可

          ESP8266-nodeMCU-I2c-12864-写个三行情书_第11张图片

 

刷入软件

  1. 成功刷入固件后,打开ESPlorer.jar,最好关闭ESP8266Flasher,以免串口争用
  2. 选中对应的串口,我的是COM4,波特率选择115200,然后点击open进行连接通信,如果连接不上,可以试着点击nodemcu板子上的RST小按键

          ESP8266-nodeMCU-I2c-12864-写个三行情书_第12张图片

连接成功大概如下图,会有部分乱码,不要在意

        ESP8266-nodeMCU-I2c-12864-写个三行情书_第13张图片

  1. 贴入代码并保存为init.lua

           ESP8266-nodeMCU-I2c-12864-写个三行情书_第14张图片

  1. 点击左下角,将软件烧如ESP8266,这时候就可以在12864上看到情书逐行输出了。录个小视频发朋友圈玩玩。

 

代码解读

  1. 代码还算比较浅显,应该容易看懂的,均为lua代码
  2. NodeMCU板子上,D5接12864的sda口
  3. NodeMCU板子上,D6接12864的scl口
  4. NodeMCU板子上,G(低电平的意思)接12864的GND
  5. NodeMCU板子上,3V接12864的VCC口
function init_i2c_display()
    -- SDA and SCL can be assigned freely to available GPIOs
    local sda = 5 -- GPIO14
    local scl = 6 -- GPIO12
    local 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_6x10_tf)
  disp:setFontRefHeightExtendedText()
  disp:setDrawColor(1)
  disp:setFontPosTop()
  disp:setFontDirection(0)
end

function u8g2_ascii_1()
    head="Honey Z"
    content=" I will go away."
    content1=' The farther I go,'
    content2=' the more I miss you.'
    tail="CQ "
    
    headlen=string.len(head)
    contentlen=string.len(content)
    contentlen1=string.len(content1)
    contentlen2=string.len(content2)
    taillen=string.len(tail)
    
    if(a <= headlen)then
        disp:drawStr( 0, 2, string.sub(head,1,a)..'_')
    else
        disp:drawStr( 0, 2, string.sub(head,1,a))
    end
    
    if(a > headlen and a <= headlen+contentlen) then
        disp:drawStr( 9, 16, string.sub(content,1,a-headlen)..'_')
    elseif(a > headlen) then
        disp:drawStr( 9, 16, string.sub(content,1,a-headlen))
    end
    
    if(a > headlen+contentlen and a <= headlen+contentlen+contentlen1) then
        disp:drawStr( 9, 28, string.sub(content1,1,a-headlen-contentlen)..'_')
    elseif(a > headlen+contentlen) then
        disp:drawStr( 9, 28, string.sub(content1,1,a-headlen-contentlen))
    end
    
    if(a > headlen+contentlen+contentlen1 and a <= headlen+contentlen+contentlen1+contentlen2) then
        disp:drawStr( 9, 40, string.sub(content2,1,a-headlen-contentlen-contentlen1)..'_')
    elseif(a > headlen+contentlen+contentlen1) then
        disp:drawStr( 9, 40, string.sub(content2,1,a-headlen-contentlen-contentlen1))
    end

    if(a > headlen+contentlen+contentlen1+contentlen2 ) then
    disp:drawStr( 112, 54, string.sub(tail,1,a- headlen-contentlen-contentlen1-contentlen2)..'_')
    end
end

function loop()
    disp:clearBuffer()
    u8g2_prepare()
    u8g2_ascii_1()
    disp:sendBuffer()
end

b=1
a=0
init_i2c_display()
tmr.alarm(4, 300, tmr.ALARM_AUTO, function()
    b=b+1
    if(b > 7) then
        a=a+1
    end
    loop()
end
)

 

你可能感兴趣的:(小制作,ESP8266,12864,情书,nodemcu)