CORE-ESP32C3

2023-10-31

目录

基础资料

探讨重点

参考博文:

实现功能

硬件准备

软件版本

日志及soc下载工具

软件使用

接线示意图

IO11解锁教程可参考:

功能1:基于墨水屏的日期显示;

初始化:

日期显示:

功能2:WLAN连接示例;

功能3:SNTP时间服务器的动态更新时间;

最终效果:

完整代码(IO11已解锁状态下):


基础资料

基于ESP32C3-CORE开发板:开发板简介

上手:开发上手 - LuatOS 文档

探讨重点

对官方LuatOS-SOC接口文档中eink - 墨水屏操作库功能的复现,进行相关内容的学习及探讨,并简单演示基于WLAN的墨水屏日期显示功能。

参考博文:

合宙Air105|摄像头|capture|SPI|Serial 串口|TFTLCD|Micro SD卡|GC032A|USB转TTL|官方demo|学习(2-1):摄像头camera-capture_合宙air105的摄像头_打酱油的工程师的博客-CSDN博客

合宙ESP32系列|自定义固件|在线云编译|本地编译|Windows|luat_conf_bsp.h|(2)、CORE-ESP32S3编译_打酱油的工程师的博客-CSDN博客

Lua基础|CORE-ESP32C3|eink|日期格式化|os.date|weekarray|tonumber|SOC固件编译|汉字星期|墨水屏:今天星期几?

实现功能

功能1:基于墨水屏的日期显示;

功能2:WLAN连接示例;

功能3: SNTP时间服务器的动态更新时间。

硬件准备

ESP32C3-CORE开发板(经典款)1块,面包板1块,EINK1.54墨水屏。

 ​ESP32C3-CORE开发板pinout

 EINK1.54墨水屏

软件版本

CORE-ESP32C3:LuatOS@ESP32C3 base 22.12 bsp V1003 32bit

日志及soc下载工具

luatools 版本:2.1.88

Luatools软件安装目录下存放有各型号的SOC,可用于刷机。

软件使用

接口文档可参考: eink - 墨水屏操作库

接线示意图

显示屏为合宙 1.54寸v2,200x200,快刷屏,SPI标准屏

硬件接线:

显示屏SPI   -->  CORE-ESP32

GND              GND

VCC              3.3V

SCL             (IO02)

SDA             (IO03)

RES             (IO10)

DC              (IO06)

CS              (IO07)

BUSY            (IO11)-IO11默认配置为SPI-FLASH的VDD,需解锁配置为GPIO使用。如不考虑解锁,可选择右侧IO,但后期存在复用冲突风险。

按以上配置,且IO11解锁后,接线示意如下:

IO11解锁教程可参考:

https://blog.csdn.net/Medlar_CN/article/details/128885223

功能1:基于墨水屏的日期显示;

初始化:

V1003版本SOC,墨水屏初始化前需要先初始化SPI设备:

local spi_id=2  --设置spi_id

--注意:eink初始化之前需要先初始化spi

spi.setup(spi_id,nil,0,0,8,20*1000*1000)

--不初始化会显示以下错误:

-- [0;31mE (30865) spi_mam

-- [0;31mE (32424) spi_master: check_trans_valid(679): invalid dev handle[0m

-- [0;31mE (32425) spi_master: check_trans_valid(679): invalid dev handle[0m

-- [0;31mE (32426) spi_master: check_trans_valid(679): invalid dev handle[0m

墨水屏初始化并设置全局刷新:

    eink.model(eink.MODEL_1in54)

    log.info("eink.setup",eink.setup(0, 2,11,10,6,7))  --设置全局刷新

    eink.setWin(200, 200, 2)

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

日期显示需要局部刷新,设置如下:

    --eink.model(eink.MODEL_1in54) --若不改变屏幕参数可不执行

    --重新配置eink

    --显示spi状态及配置epd: D/eink spi setup complete, now setup epd

    log.info("eink.setup",eink.setup(1,2,11,10,6,7)) --设置局部刷新

    eink.setWin(200, 200, 2)

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

日期显示:

os.date函数及汉字字体说明见博文:

Lua基础|CORE-ESP32C3|eink|日期格式化|os.date|weekarray|tonumber|SOC固件编译|汉字星期|墨水屏:今天星期几?_打酱油的工程师的博客-CSDN博客

日期显示代码:

        eink.clear(1,0)   --解决局部刷新频闪问题

        --E/eink only font pointer is allow

        --eink.setFont(eink.font_opposansm10_chinese)

        eink.setFont(eink.font_opposansm24_chinese) --需编译时选择该字体

        --eink.setFont(fonts.get("sarasa_light_24")) --v1003版中不支持该函数

        eink.print(0,30,"时间显示测试")

        eink.print(5,70,os.date("%Y-%m-%d"))

        eink.print(30,110,os.date("%X"))

        local weekarray={"日","一","二","三","四","五","六"} --索引从1开始

        eink.print(50,150,"星期"..weekarray[tonumber(os.date("%w")+1)])

        eink.print(0,190,"恭祝兔年大吉")

        eink.show(30,110,0)

功能2:WLAN连接示例;

连接示例代码:

function get_ip()

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

        log.info("mode", wlan.setMode(wlan.STATION))

        log.info("connect", wlan.connect("你的wlan", "你的wlan密码"))

        -- 等待连上路由,此时还没获取到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)

       --等待连接成功消息

        sys.wait(2000)

end

功能3:SNTP时间服务器的动态更新时间;

V1003的http库中已集成ntp时间自动同步,成功获得ip后自动连接至ntp服务器并同步更新系统时间。

完成后提示日志中显示:D/sntp time sync done

不再支持采用NTP函数手动同步。

成功同步后的log:

[2023-02-04 01:15:49.692] D/eink spi setup complete, now setup epd

[2023-02-04 01:15:49.695] I/user.eink.setup  true

[2023-02-04 01:15:49.801] I/user.e-paper 1.54   Testing Go

[2023-02-04 01:15:54.045] I/user.e-paper 1.54   Testing End

[2023-02-04 01:15:54.451] D/eink spi setup complete, now setup epd

[2023-02-04 01:15:54.451] I/user.eink.setup  true

[2023-02-04 01:16:15.114] D/sntp time sync done

最终效果:

    

                                        Sntp完成同步前                       Sntp同步后

完整代码(IO11已解锁状态下):

PROJECT = "wifidemo"
VERSION = "1.0.0"

--测试支持硬件:ESP32C3
--测试固件版本:LuatOS@ESP32C3 base 22.12 bsp V1003 32bit
-- sys库是标配
_G.sys = require("sys")
--[[特别注意, 使用http库需要下列语句]]
_G.sysplus = require("sysplus")
local spi_id=2
--注意:eink初始化之前需要先初始化spi
spi.setup(spi_id,nil,0,0,8,20*1000*1000)

function eink_init()
    --eink.model(eink.MODEL_1in54) --若不改变屏幕参数可不执行
    --重新配置eink
    --显示spi状态及配置epd: D/eink spi setup complete, now setup epd
    log.info("eink.setup",eink.setup(1,2,11,10,6,7)) --设置局部刷新
    eink.setWin(200, 200, 2)
    --稍微等一会,免得墨水屏没初始化完成
    sys.wait(100)
    eink.clear(1)
    eink.show()
end

function eink_init_all_purge()
    eink.model(eink.MODEL_1in54)
    log.info("eink.setup",eink.setup(0, 2,11,10,6,7))  --设置全局刷新
    eink.setWin(200, 200, 2)
    --稍微等一会,免得墨水屏没初始化完成
    sys.wait(100)
    log.info("e-paper 1.54", "Testing Go")
    eink.clear()
    --画几条线一个圆,显示图形OK
    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

function get_ip()
        log.info("wlan", "wlan_init:", wlan.init())
        log.info("mode", wlan.setMode(wlan.STATION))
        log.info("connect", wlan.connect("MERCURY_57B3", "madlar##king@@13124"))
        -- 等待连上路由,此时还没获取到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) --成功获得ip后自动连接ntp服务器并同步更新系统时间,完成后提示:D/sntp time sync done
        sys.wait(2000)
end


sys.taskInit(function()
    get_ip() --成功获得ip后自动连接ntp服务器并同步更新系统时间,完成后提示:D/sntp time sync done
    --eink_init_all_purge()
    eink_init()
    while true do
        eink.clear(1,0)
        --E/eink only font pointer is allow
        --eink.setFont(eink.font_opposansm10_chinese)
        eink.setFont(eink.font_opposansm24_chinese) --自行编译引入该字体
        --eink.setFont(fonts.get("sarasa_light_24")) --v1003中已不支持
        eink.print(0,30,"时间显示测试")
        eink.print(5,70,os.date("%Y-%m-%d"))
        eink.print(30,110,os.date("%X"))
        local weekarray={"日","一","二","三","四","五","六"} --索引从1开始
        eink.print(50,150,"星期"..weekarray[tonumber(os.date("%w")+1)])
        --eink.print(50,150,"星期"..os.date("%w"))
        eink.print(0,190,"恭祝兔年大吉")
        eink.show(30,110,0)
        sys.wait(500)--每秒刷新2次
    end
end)


-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CORE-ESP32C3 的相关文章

  • ESP8266 NodeMCU 堆内存不足

    我正在尝试通过从我的笔记本电脑发送 POST 使用 node js 来使用 ESP8266 01 来切换 LED 我现在遇到内存问题 因为每当我发送 POST 请求时 ESP 中使用的内存就会增加 而堆内存会减少 并且当没有剩余内存时它会崩
  • Lua:setfenv() 与 _ENV

    Lua 切换有什么大不了的setfenv to ENV 在各种 新增内容 资料中 这一举措被认为是 Lua 5 1 和 5 2 版本之间最重要的变化之一 但是 PIL 和其他地方给出的示例可以修剪为以下内容 Lua 5 1 Lua 5 2
  • 设置私有 luarocks 存储库

    对于我的设置 我需要一个 luarocks rock 的私有存储库 我可以将它们安装在我的开发环境中 而无需连接到互联网 为 luarocks 设置远程存储库的步骤是什么 我可以使用 sftp 服务器吗 有人有过这样的经历吗 在深入研究这个
  • 如何在 Lua 中下载文件,但在运行时写入本地文件

    我正在尝试制作一个更新程序 以便当我的 Lua 应用程序过时时它将使用LuaSocket下载较新的 exe 文件 可以运行我的 Lua 代码 在这个更新程序中 我希望它显示到目前为止已下载的数量 但是 通过以下 HTTP 请求 它会阻止应用
  • 迭代包括空行在内的行

    给定一个带有一些空行的多行字符串 我如何在Lua中迭代行包括空行 local s foo nbar n njim for line in magiclines s do print line and blank or line end gt
  • Lua:“拖动”数组中的元素序列

    我正在尝试创建一个函数 将连续数量的元素 拖动 到数组中的新位置 并限制为数组的当前大小 其他项目应该围绕 拖动 的项目晃动 例如 如果我的数组有 7 个元素 并且我想拖动中间的三个 1 2 3 4 5 6 7 lt keys a b C
  • Corona/Box2D 检测与非移动静态物体的碰撞

    出于发帖原因 这是我正在尝试做的事情的简单版本 在屏幕上我有一个简单的圆形对象 它是静态的并且不会移动 然后用户可以拖放一条直线 如果该线穿过该圆圈 我希望触发碰撞事件 看来除非其中一个物体正在移动 否则永远不会检测到碰撞 绘制线条时能否检
  • 如何访问废弃的函数参数?

    在 Lua 中 调用带有多余参数的函数将简单地丢弃这些参数 有没有可能与debug库来访问这些被丢弃的参数 我不是在寻找可变参数函数 function test local info debug getinfo 1 u print info
  • 如何解密Lua字节码?

    早上好 我正在尝试破译 Moon 字节码 但我无法以任何方式 有人可以帮助我吗 我有这个 例如 code 27 76 117 97 81 0 1 4 4 4 8 0 如何将此字节码解密为文本 我已经在这里搜索 http www asciit
  • Redis 排序集和解决关系

    我正在使用 Redis 排序集来存储我正在处理的项目的排名 我们没有预料到 我们想要如何处理关系 Redis 按字典顺序对具有相同分数的条目进行排序 但我们想要做的是对具有相同分数的所有条目给予相同的排名 例如在以下情况 redis 127
  • Redis INCRBY 有限制

    我想知道是否有一种方法可以通过我的应用程序的单次往返在 Redis 中执行此操作 对于给定的键K 其可能值V是范围内的任意整数 A B 基本上 它有上限和下限 When an INCRBY or DECRBY发出命令 例如INCRBY ke
  • lua http套接字超时

    LuaSocket HTTP 模块文档说可以在 HTTP 连接上设置超时 可以设置以下常量来控制 HTTP 模块的默认行为 PORT 用于连接的默认端口 PROXY 用于连接的默认代理 TIMEOUT 设置所有I O操作的超时时间 USER
  • lua_resume 的 from 参数的含义

    From Lua 5 2 参考手册 http www lua org manual 5 2 manual html lua resume int lua resume lua State L lua State from int nargs
  • Lua userdata:无法同时进行数组访问和方法

    我遇到了这个人的问题 Lua userdata数组访问及方法 https stackoverflow com questions 26970316 lua userdata array access and methods 其中 当我设置用
  • 如何在Conky中实现一个基本的Lua功能?

    我正在尝试向我的 Conky 添加一个函数 该函数打印字符串的长度以用于调试目的 代码位于名为的文件内test lua 非常简单 function test word return string len word end 我这样加载它 在我
  • 在lua中组合两个函数

    我刚开始学习lua 所以我的要求可能是不可能的 现在 我有一个接受函数的方法 function adjust focused window fn local win window focusedwindow local winframe w
  • 在Lua中获取前一天的日期

    谁能告诉我如何使用 Lua 获取 YYYY MM DD 格式的前一天日期 即 一个片段 它将返回运行当天的前一天的日期 Try print os date Y m d os time 24 60 60 严格来说 这只能保证在 POSIX 系
  • Lua中按字符分割字符串

    我有像这样的字符串 ABC DEF 我需要将它们分开 字符并将两个部分分别分配给一个变量 在 Ruby 中 我会这样做 a b ABC DEF split 显然Lua没有这么简单的方法 经过一番挖掘后 我找不到一种简短的方法来实现我所追求的
  • 如何在我的 Lua 脚本中添加“睡眠”或“等待”?

    我正在尝试通过更改一天中的时间来为游戏制作一个简单的脚本 但我想快速完成 这就是我要说的 function disco hour minute setTime 1 0 SLEEP setTime 2 0 SLEEP setTime 3 0
  • 在 Awesome-wm 中为特定应用程序设置窗口布局

    如何配置很棒 以便它可以启动两个窗口对齐的新应用程序 如下所示 xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx xxxxxxxxxx 其中 x 是 pidgin 中的对话窗口 是好友列表窗口 一般来说 我想指定右窗口的宽度

随机推荐

  • Golang的pprof性能分析

    文章目录 一 pprof 概述 二 服务开启pprof 1 代码中引用pprof 2 服务开启一个端口 用来监听pprof 三 使用pprof采集CPU耗时 1 调用流程图 2 查看火焰图 四 使用pprof分析内存泄漏问题 查看当前程序的
  • MySQL可视化,python操作mysql,多表查询

    目录 navicat 可视化软件 python 操作mysql 获取结果 SQL注入问题 多表查询练习题 navicat 可视化软件 Navicat Premium 是一套数据库管理工具 结合了其它 Navicat 成员的功能 支持单一程序
  • 随机变量,随机函数,随机过程,随机场是什么

    之前看过的 后来就忘了 记一下加深印象 随机变量 随机变量的比较容易理解 概念是设随机试验E的样本空间为 若对任一 都有一个实数Z与之对应 且对任一实数z Z 事件 z Z 都有一个确定的概率 则称Z是一随机变量 其实看定义还是有点不容易理
  • MTU值及查询方法

    通信术语 最大传输单元 Maximum Transmission Unit MTU 是指一种通信协议的某一层上面所能通过的最大数据包大小 以字节为单位 最大传输单元这个参数通常与通信接口有关 网络接口卡 串口等 因为协议数据单元的包头和包尾
  • 设置postgres最大连接数-解决odoo并发报错

    此教程案例postgres版本为12 问题描述 psycopg2 OperationalError FATAL sorry too many clients already on 早上发现我维护的python后端服务报错出现了这个 百度 一
  • PyTorch学习笔记(19) ——NIPS2019 PyTorch: An Imperative Style, High-Performance Deep Learning Library

    0 前言 波兰小哥Adam Paszke从15年的Torch开始 到现在发表了关于PyTorch的Neurips2019论文 令我惊讶的是只中了Poster 而不是Spotlight 中间经历了漫长的过程 这里 把原文进行翻译放出来 以供读
  • Clickhouse、Hawq、Hive、Spark SQL、Presto、Kylin、Impala、Druid、Greeplum对比

    在上一章节中 我们讲到实时数仓的建设 互联网大数据技术发展到今天 各个领域基本已经成熟 有各式各样的解决方案可以供我们选择 在实时数仓建设中 解决方案成熟 消息队列Kafka Redis Hbase鲜有敌手 几乎已成垄断之势 而OLAP的选
  • 【RocketMQ】顺序消息实现原理

    全局有序 在RocketMQ中 如果使消息全局有序 可以为Topic设置一个消息队列 使用一个生产者单线程发送数据 消费者端也使用单线程进行消费 从而保证消息的全局有序 但是这种方式效率低 一般不使用 局部有序 假设一个Topic分配了两个
  • bin和elf文件(ARM) 五

    原文地址 http www iteye com topic 1121480 近段时间在研究Erlang核心特性的实现 也许过段时间会有个系列的总结 期待 今天看到有人写一个深入Hello World的文章 想起来读研的时候做的一个关于程序加
  • jquery 根据值设置radio选中,获取选择的值

    百度到了很多种 基本没几个能用的 是因为浏览器版本的问题 试了多次 找到一个可适应多版本IE的 其它浏览器为测试 不过应该可行 HTML
  • 【转】Spring/SpringBoot常用注解总结

    目录 0 前言 1 SpringBootApplication 2 Spring Bean 相关 3 处理常见的 HTTP 请求类型 4 前后端传值 5 读取配置信息 6 参数校验 7 全局处理 Controller 层异常 8 mybat
  • 【ML】机器学习中的随机森林算法

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • STL 全排列

    1 排列序数 Description 如果用a b c d这4个字母组成一个串 有4 24种 如果把它们排个序 每个串都对应一个序号 abcd 0 abdc 1 acbd 2 acdb 3 adbc 4 adcb 5 bacd 6 badc
  • Spring基础篇-JdbcTemplate

    传统jdbc开发 有很多模板化代码 而为了简化 将模板代码封装起来 就是用了AOP思想 开发者只需要管住数据的关键操作 但是 与MyBatis相比 在一对一映射 一对多映射 以及动态SQL等方法 还是不足 使用JdbcTemplate 需要
  • 蒙特卡罗算法 与 拉斯维加斯算法

    蒙特卡罗算法并不是一种算法的名称 而是对一类随机算法的特性的概括 那么 蒙特卡罗 是一种什么特性呢 我们知道 既然是随机算法 在采样不全时 通常不能保证找到最优解 只能说是尽量找 那么根据怎么个 尽量 法儿 我们我们把随机算法分成两类 蒙特
  • 数据卷与挂载目录

    前言 数据卷与挂载目录都是数据持久化存储的方式 一 卷和挂载目录有什么区别 卷 Docker Volume 是受控存储 是由 Docker 引擎进行管理维护的 因此使用卷 你可以不必处理 uid SELinux 等各种权限问题 Docker
  • 关于硬件工程师的真相:敢问路在何方? 

    关于硬件工程师的真相 敢问路在何方 硬件工程师 曾经有多少人希望从事的职业 在别人眼里好像能够从事硬件设计需要你了解很多东西 可以从事这个职业之后才逐渐发现 硬件工程师处在一种非常难受的困境当中 想来造成这种情况可能主要有多方面的原因 一个
  • 时间序列预测的常用20种方法优缺点对比深入分析

    百度百科 时间序列预测是指利用获得的数据按时间顺序排成序列 分析其变化方向和程度 从而对未来若干时期可能达到的水平进行推测 时间序列预测的基本思想 就是将时间序列作为一个随机变量的一个样本 用概率统计的方法 从而尽可能减少偶然因素的影响 当
  • latex论文写作问题集锦

    目录 latex冷门指令 实现对Appendix A的引用 修改错误公式后 File ended while scanning use of newl bel Edas 上传 fonts are embedded 概念性问题 theorem
  • CORE-ESP32C3

    目录 基础资料 探讨重点 参考博文 实现功能 硬件准备 软件版本 日志及soc下载工具 软件使用 接线示意图 IO11解锁教程可参考 功能1 基于墨水屏的日期显示 初始化 日期显示 功能2 WLAN连接示例 功能3 SNTP时间服务器的动态