ESP8266-nodeMCU-I2c-12864-写个三行情书
阅读原文时间:2021年04月20日阅读:1

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

最终效果

            

硬件准备

  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的驱动大师安装这个驱动搞定,见截图

          

  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常用的,这里也一并导出固件吧

              

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

               

  1. 1. 填入邮箱

               

  1. 1. 最后点击生成固件:

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

                

接线图

          

              

刷入固件

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

          

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

         

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

          

刷入软件

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

          

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

        

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

           

  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
    )

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章