MCU+墨水屏,经典应用又添新意!LuatOS带你轻松DIY

描述

 

 

MCU+墨水屏,经典应用又添新意!

社群小伙伴心心念念的墨水屏应用来了,适用合宙LuatOS全系列MCU核心板。此外,又一波超值福利——合宙LuatOS墨水屏扩展板即将惊喜来袭。敬请关注公众号近期最新动态!!!


 

1

合宙LuatOS全系列MCU核心板
驱动墨水屏的正确方式


 

我们常说的电子墨水屏是使用电子墨水的屏幕——通电后可以更改屏幕显示内容,断电后完全不费电的情况下,继续保持显示内容。

合宙LuatOS将让墨水屏应用更为简便,固件自带eink库,加上即将推出的墨水屏扩展板,快捷实现你的应用创意!

基本参数:
• 分辨率:200x200;
• ⿊⽩双⾊显⽰;
• ⽀持快刷;
• 直插接⼝,完全兼容现有的合宙LuatOS全系列MCU核⼼板。

硬件连接:

可以直接插到合宙MCU核心板上,和LCD屏同一个位置。

电子墨水屏

如何驱动:

使⽤LuatOS固件中的eink库,可以⽅便快捷地驱动屏幕。下⾯的代码以Air101为例,其他模块请根据需要, 更改初始化代码中的SPI编号与其他引脚编号。 

 

01 全刷模式

 

 


 

sys.taskInit(function()
 

    eink.model(eink.MODEL_1in54)

    eink.setup(0, 0,pin.PB00,pin.PB03,pin.PB01,pin.PB04)

    eink.setWin(200, 200, 0)

    --稍微等一会,免得墨水屏没初始化完成

    sys.wait(100)

    log.info("e-paper 1.54", "Testing Go")

    eink.clear()

    --画几条线一个圆

    eink.circle(50, 100, 40)

    eink.line(100, 20, 105, 180)

    eink.line(100, 100, 180, 20)

    eink.line(100, 100, 180, 180)

    eink.show()

    log.info("e-paper 1.54", "Testing End")

end)

 

 

 

 

02 快刷模式

 

 


 

快刷(局刷)模式,使用本模式刷新时极快,但大概率会有残留:

sys.taskInit(function()

    eink.model(eink.MODEL_1in54)

    eink.setup(1, 0,pin.PB00,pin.PB03,pin.PB01,pin.PB04)

    --初始化时配置局部刷新

    eink.setWin(200, 200, 0)

    --稍微等一会,免得墨水屏没初始化完成

    sys.wait(100)

    log.info("e-paper 1.54", "Testing Go")

    eink.clear()

    --画几条线一个圆

    eink.circle(50, 100, 40)

    eink.line(100, 20, 105, 180)

    eink.line(100, 100, 180, 20)

    eink.line(100, 100, 180, 180)

    eink.show(nil,nil,true)
    --直接刷上去,不清屏

    log.info("e-paper 1.54", "Testing End")

end)

 

 

 

 

 

2

项目应用示例
墨水屏天气预报日历


 

电子墨水屏

 

这样个性有趣的墨水屏天气预报日历,你也可以轻松DIY!
 

示例使用的开发板:

• 墨水屏屏幕板

• 合宙ESP32-C3核心板

注意事项:
由于ESP32-C3的GPIO11默认不作为GPIO使用,并且墨水屏的BUSY引脚位置就在GPIO11,所以需要对开发板的GPIO11引脚提前解锁处理。

具体操作参见:
https://gitee.com/dreamcmi/LuatOS-ESP32/blob/master/doc/VDD_SPI_AS_GPIO.md

烧录最新固件及下方脚本:
注:需要按注释更改一下代码开头的变量值。

源码仓库:
• Air101/Air103/Air105系列参见:
https://gitee.com/openLuat/LuatOS/releases

• ESP32-C3系列参见:
https://gitee.com/dreamcmi/LuatOS-ESP32/releases

 

 

墨水屏示例脚本参考

 

 

上下滑动查看完整代码:

PROJECT = "wifidemo"

VERSION = "1.0.0"

 

local sys = require "sys"

 

--需要自行填写的东西

--wifi信息

local wifiName,wifiPassword = "",""

--地区id,请前往https://api.luatos.org/luatos-calendar/v1/check-city/查询自己所在位置的id

local location = ""

--天气接口信息,需要自己申请,具体参数请参考https://api.luatos.org/页面上的描述

local appid,appsecret = "",""

 

local function connectWifi()

    log.info("wlan", "wlan_init:", wlan.init())

 

    wlan.setMode(wlan.STATION)

    wlan.connect(wifiName,wifiPassword)

 

    -- 等待连上路由,此时还没获取到ip

    result, _ = sys.waitUntil("WLAN_STA_CONNECTED")

    log.info("wlan", "WLAN_STA_CONNECTED", result)

    -- 等到成功获取ip就代表连上局域网了

    result, data = sys.waitUntil("IP_READY")

    log.info("wlan", "IP_READY", result, data)

end

 

local function requestHttp()

    local rd = {}

    local httpc = esphttp.init(esphttp.GET, "http://apicn.luatos.org:23328/luatos-calendar/v1?mac=111&battery=10&location="..location.."&appid="..appid.."&appsecret="..appsecret)

    if httpc then

        local ok, err = esphttp.perform(httpc, true)

        if ok then

            while 1 do

                local result, c, ret, data = sys.waitUntil("ESPHTTP_EVT", 20000)

                --log.info("httpc", result, c, ret)

                if c == httpc then

                    if esphttp.is_done(httpc, ret) then

                        break

                    end

                    if ret == esphttp.EVENT_ON_DATA and esphttp.status_code(httpc) == 200 then

                        table.insert(rd,data)

                    end

                end

            end

        else

            log.warn("esphttp", "bad perform", err)

       end

        esphttp.cleanup(httpc)

        if ok then

            return table.concat(rd)

        end

    end

end

 

function refresh()

    log.info("refresh","start!")

    local data

    for i=1,5 do

    --重试最多五次

        data = requestHttp()

        if #data > 100 then

            break

        end

        log.info("load fail","retry!")

    end

    if #data < 100 then

        log.info("load fail","exit!")

        return

    end

    eink.model(eink.MODEL_1in54)

    log.info("eink.setup",eink.setup(0, 2,11,10,6,7))

    eink.setWin(200, 200, 2)

    eink.clear(1)

    log.info("eink", "end setup")

    eink.drawXbm(0, 0, 200, 200, data)

    -- 刷屏幕

    eink.show()

    eink.sleep()

    log.info("refresh","done")

end

 

sys.taskInit(function()

    --先连wifi

    connectWifi()

    while true do

        refresh()

        sys.wait(3600*1000)

        --一小时刷新一次吧

    end

end)

 

-- 用户代码已结束-------------------------------------

-- 结尾总是这一句

sys.run()

-- sys.run()之后后面不要加任何语句!!!!!

 

 

 

 

墨水屏天气预报日历

 

 


 

烧录进开发板,就可以直接看到结果了,天气信息每小时会刷新一次:

电子墨水屏

 

加上自己3D打印的外壳,直接变成最靓的桌面摆件!

 

电子墨水屏

 

发挥你的创意,尽情DIY吧 ~

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分