CORE-ESP32C3

2023-11-06

目录

参考博文

项目官方地址

显示效果:

硬件准备

软件版本

日志及soc下载工具

软件使用

接线示意图

硬件接线

一、Elink驱动管脚适配

二、天气信息获取

API使用方式:

接口格式(注意需不需要tls):http://apicn.luatos.org:23328/luatos-calendar/v1?mac=[设备码]&location=[城市id]&appid=[你的APPID]&appsecret=[你的APPSecret]例子:

三、连接WIFI

示例代码:

四、elink屏幕显示代码

初始化:

显示:

完成后屏幕休眠

五、完整代码:

PS:collectgarbage 垃圾回收


参考博文:

CORE-ESP32C3|eink|日期格式化|IO11解锁|墨水屏操作库|SNTP自动同步|局部刷新|全局刷新|LuatOS-SOC接口|官方demo|学习(12):简单日期显示合宙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固件编译|汉字星期|墨水屏:今天星期几?

项目官方地址:

https://gitee.com/openLuat/LuatOS/blob/master/script/turnkey/eink-calendar

显示效果:

硬件准备

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,但后期存在复用冲突风险。

一、Elink驱动管脚适配

Air系列开发板使用不同的管脚来驱动Eink屏幕,官方驱动中适配了不同的开发板,本文测试采用ESP32C3,仅对其适配端口进行了测试,后续再陆续对其他开发板端口进行测试,可自行参考使用。

官方示例代码:

local rtos_bsp = rtos.bsp()

-- spi_id,pin_reset,pin_dc,pin_cs,pin_busy,mode
function eink_pin()
    if rtos_bsp == "AIR101" then
        return 0,pin.PB03,pin.PB01,pin.PB04,pin.PB00
    elseif rtos_bsp == "AIR103" then
        return 0,pin.PB03,pin.PB01,pin.PB04,pin.PB00
    elseif rtos_bsp == "AIR105" then
        return 5,pin.PC12,pin.PE08,pin.PC14,pin.PE09
    elseif rtos_bsp == "ESP32C3" then
        --(spi_id, pin_busy, pin_reset, pin_dc, pin_cs)
        return  2,11,10,6,7
    elseif rtos_bsp == "ESP32S3" then
        return 2,16,15,14,13
    elseif rtos_bsp == "EC618" then
        return 0,1,10,8,18
    else
        log.info("main", "bsp not support")
        return
    end
end

二、天气信息获取

通过api.luatos.org调用天气API接口,获得城市数据(V1, 地面气象要素数据文件格式)并解析,后期通过get方法取得解析后的位图数据。

天气API的使用接口需自行注册。

采用天气API:免费天气API接口|天气预报接口|全球天气API接口|气象预警|空气质量

  • 注册管理界面:
  • https://tianqiapi.com/user/login

  • 登陆后得到appid和appsecret,后期LuatOS公共接口中使用,用来获得天气数据。

API使用方式:

接口格式(注意需不需要tls):
http://apicn.luatos.org:23328/luatos-calendar/v1?mac=[设备码]&location=[城市id]&appid=[你的APPID]&appsecret=[你的APPSecret]
例子:

https://api.luatos.org/luatos-calendar/v1?mac=111&battery=10&location=101011700&appid=288******&appsecret=zHI*****

浏览器中访问该地址后,可得到天气V1数据,该数据为地面气象要素数据文件格式,具体的解析由luatos进行。
城市id可以前往官网地址查询

查询城市id
若没有传位置参数,默认会尝试从ip获取位置,但成功率和准确度极低。

示例代码:

local function requestHttp()
    local code, headers, body = http.request("GET","http://apicn.luatos.org:23328/luatos-calendar/v1?mac=111&battery=10&location="..location.."&appid="..appid.."&appsecret="..appsecret).wait()
    if code == 200 then
        return body
    else
        log.info("http get failed",code, headers, body)
        sys.wait(500)
        return ""
    end
end

三、连接WIFI

官方示例中的标准程序

示例代码:

local function connectWifi()
    log.info("wlan", "wlan_init:", wlan.init())

    wlan.setMode(wlan.STATION)
    wlan.connect(wifiName,wifiPassword,1)

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

四、elink屏幕显示代码

初始化:

墨水屏初始化前需要先初始化SPI设备:

这里设置为全部刷新(每小时更新一次)。

        eink.model(eink.MODEL_1in54)
        spi.setup(spi_id,nil,0,0,8,20*1000*1000)
        eink.setup(mode, spi_id,pin_busy,pin_reset,pin_dc,pin_cs)
        eink.setWin(200, 200,2)
        --稍微等一会,免得墨水屏没初始化完成
        sys.wait(100)

显示:

        eink.clear(1)
        log.info("eink", "end setup")
        eink.drawXbm(0, 0, 200, 200, data)
        -- 刷屏幕
        eink.show()

完成后屏幕休眠:

      --进入休眠模式,再次使用时需要重新初始化
       eink.sleep()

五、完整代码:

PROJECT = "wifidemo"
VERSION = "1.0.0"

--测试支持硬件:ESP32C3
--测试固件版本:LuatOS-SoC_V0003_ESP32C3[_USB].soc

local sys = require "sys"
require("sysplus")

-- 兼容V1001固件的
if http == nil and http2 then
    http = http2
end

local rtos_bsp = rtos.bsp()

-- spi_id,pin_reset,pin_dc,pin_cs,pin_busy,mode
function eink_pin()
    if rtos_bsp == "AIR101" then
        return 0,pin.PB03,pin.PB01,pin.PB04,pin.PB00
    elseif rtos_bsp == "AIR103" then
        return 0,pin.PB03,pin.PB01,pin.PB04,pin.PB00
    elseif rtos_bsp == "AIR105" then
        return 5,pin.PC12,pin.PE08,pin.PC14,pin.PE09
    elseif rtos_bsp == "ESP32C3" then
        --(spi_id, pin_busy, pin_reset, pin_dc, pin_cs)
        return  2,11,10,6,7
    elseif rtos_bsp == "ESP32S3" then
        return 2,16,15,14,13
    elseif rtos_bsp == "EC618" then
        return 0,1,10,8,18
    else
        log.info("main", "bsp not support")
        return
    end
end

--需要自行填写的东西
--wifi信息
local  wifiName,wifiPassword = "**你的WIFI地址*****", "******你的WIFI密码******"
--地区id,请前往https://api.luatos.org/luatos-calendar/v1/check-city/ 查询自己所在位置的id
local location = "101010100"  --北京
--天气接口信息,需要自己申请,具体参数请参考https://api.luatos.org/ 页面上的描述
--采用天气API:https://tianqiapi.com/
local appid,appsecret = "27*******","3wd******"

local function connectWifi()
    log.info("wlan", "wlan_init:", wlan.init())

    wlan.setMode(wlan.STATION)
    wlan.connect(wifiName,wifiPassword,1)

    -- 等待连上路由,此时还没获取到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 code, headers, body = http.request("GET","http://apicn.luatos.org:23328/luatos-calendar/v1?mac=111&battery=10&location="..location.."&appid="..appid.."&appsecret="..appsecret).wait()
    if code == 200 then
        return body
    else
        log.info("http get failed",code, headers, body)
        sys.wait(500)
        return ""
    end
end

function refresh()
    log.info("refresh","start!")
    local data
    for i=1,5 do--重试最多五次
        collectgarbage("collect")
        data = requestHttp()
        collectgarbage("collect")
        if #data > 100 then
            break
        end
        log.info("load fail","retry!")
    end
    if #data < 100 then
        log.info("load fail","exit!")
        return
    end
    collectgarbage("collect")
    local  spi_id, pin_busy, pin_reset, pin_dc, pin_cs = eink_pin()
    local  mode =0
    if spi_id then
        eink.model(eink.MODEL_1in54)
        spi.setup(spi_id,nil,0,0,8,20*1000*1000)
        eink.setup(mode, spi_id,pin_busy,pin_reset,pin_dc,pin_cs)
        eink.setWin(200, 200,2)
        --稍微等一会,免得墨水屏没初始化完成
        sys.wait(100)
        eink.clear(1)
        log.info("eink", "end setup")
        eink.drawXbm(0, 0, 200, 200, data)
        -- 刷屏幕
        eink.show()
        eink.sleep()
        log.info("refresh","done")
    end
end

sys.taskInit(function()
    --先连wifi
    connectWifi()
    while true do
        refresh()
        sys.wait(3600*1000)--一小时刷新一次吧
    end
end)

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

PS:collectgarbage 垃圾回收

这个函数是垃圾收集器的通用接口。 通过参数 opt 它提供了一组不同的功能:

  • "collect": 做一次完整的垃圾收集循环。 这是默认选项。
  • "stop": 停止垃圾收集器的运行。 在调用重启前,收集器只会因显式的调用运行。
  • "restart": 重启垃圾收集器的自动运行。
  • "count": 以 K 字节数为单位返回 Lua 使用的总内存数。 这个值有小数部分,所以只需要乘上 1024 就能得到 Lua 使用的准确字节数(除非溢出)。
  • "step": 单步运行垃圾收集器。 步长“大小”由 arg 控制。 传入 0 时,收集器步进(不可分割的)一步。 传入非 0 值, 收集器收集相当于 Lua 分配这些多(K 字节)内存的工作。 如果收集器结束一个循环将返回 true 。
  • "setpause": 将 arg 设为收集器的 间歇率 (参见 §2.5)。 返回 间歇率 的前一个值。
  • "setstepmul": 将 arg 设为收集器的 步进倍率 (参见 §2.5)。 返回 步进倍率 的前一个值。
  • "isrunning": 返回表示收集器是否在工作的布尔值 (即未被停止)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CORE-ESP32C3 的相关文章

  • Lua math.random 不起作用

    所以我正在尝试创建一些东西 并且我到处寻找生成随机数的方法 然而 无论我在哪里测试代码 它都会产生非随机数 这是我写的一个例子 local lowdrops Wooden Sword Wooden Bow Ion Thruster Mach
  • Lua:字符串中的换行符

    我一直在开发一个格式化程序 它将接受一个长字符串并将其格式化为一系列在特定字符限制内的单词处断开的行 例如 他吃面包每 8 个字符断开一次 将返回类似以下内容的内容 He eats the bread 这是因为 He eats 包含 7 个
  • lua多重赋值

    lua中是否有任何多重赋值的方法 使得右侧缺失的值不被视为nil 类似于 a b c 1 但得到 a 1 b 1 c 1 结果 很遗憾 a b c 1 不起作用 我需要这个 因为我可能在右侧有复杂的表格 并且我想保持它简短 没有任何附加变量
  • proxy_pass 不使用 /etc/hosts 解析 DNS

    在 Nginx 中proxy pass指令未使用以下命令解析 DNS etc hosts文件 有什么方法可以实现这种可能性 也许利用 Lua 作为最后的手段 如果您有一台带有 systemd 的服务器 您可以使用它附带的名称服务器 syst
  • 逐行编写 Lua 脚本

    我使用以下命令将 Lua 脚本添加到我的 C 应用程序中动态Lua http dynamiclua codeplex com 图书馆 它运作得很好 我想实现您获取正在执行的当前行 就像在 Visual Studio 中一样 并突出显示它 目
  • 代码说“尝试比较数字<=实例”

    It says Players ninjafox56 PlayerGui Shop ShopGui LightSide ChooseSideL 5 尝试比较数字 Rank game Players LocalPlayer leadersta
  • 如何加载目录中的所有文件?

    正如标题所说 如何加载目录中的每个文件 我对c 和lua都感兴趣 编辑 对于 Windows 我很高兴能得到一些真正的工作代码 尤其是 lua 我可以用 boost filesystem for c 来做 对于 Lua 你需要模块Lua文件
  • 为什么这个 Lua 优化 hack 会提高性能?

    我正在寻找一个描述提高 Lua 性能的各种技术的文档 http www lua org gems sample pdf脚本代码 我很震惊竟然需要这样的技巧 虽然我引用的是 Lua 但我在 Javascript 中也见过类似的 hack 为什
  • Corona/Box2D 检测与非移动静态物体的碰撞

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

    对于像 io close 这样的方法 你可以像这样使用它 file close 有没有办法创建一个像这样工作的自定义函数 您可以在变量上调用它 对我来说 我尝试使用它通过使用 string find 查找空格来将参数与文本文件分开 所以在文
  • Lua中如何获取目录列表

    我需要 LUA 中的目录列表 假设我的目录路径为 C Program Files 我需要该特定路径中所有文件夹的列表以及如何搜索该列表中的任何特定文件夹 Example 需要路径 C Program Files 中所有文件夹的列表 以下是上
  • 使用 corona sdk 验证电子邮件地址

    在我的项目中 有一个供用户填写详细信息的表单 其中有一个文本字段用于输入用户的电子邮件 ID 所以我需要在 corona 项目中验证该文本字段中的电子邮件 试试这个正则表达式 local email email protected cdn
  • 如何解密Lua字节码?

    早上好 我正在尝试破译 Moon 字节码 但我无法以任何方式 有人可以帮助我吗 我有这个 例如 code 27 76 117 97 81 0 1 4 4 4 8 0 如何将此字节码解密为文本 我已经在这里搜索 http www asciit
  • 检查lua中是否存在目录?

    如何检查 lua 中是否存在目录 如果可能的话最好不使用 LuaFileSystem 模块 尝试做类似以下 python 行的事情 os path isdir path 这是一种在 Unix 和 Windows 上都适用的方式 无需任何外部
  • 为什么 LuaJIT 和 Lua 中的数字舍入格式不同?

    Using string format 据说遵循 Csprintf 在 LuaJIT 轮次中格式化数字与我尝试过的所有其他 Lua 解释器不同 lua v Lua 5 4 1 Copyright C 1994 2020 Lua org PU
  • Redis INCRBY 有限制

    我想知道是否有一种方法可以通过我的应用程序的单次往返在 Redis 中执行此操作 对于给定的键K 其可能值V是范围内的任意整数 A B 基本上 它有上限和下限 When an INCRBY or DECRBY发出命令 例如INCRBY ke
  • 如何在aerospike中获取ttl为-1的记录集?

    我在aerospike中有很多记录 我想获取ttl为 1的记录 请提供解决方案 只是为了澄清 设置TTL 为 1 https github com aerospike aerospike client go blob master docs
  • 如何在 Lua 中实现 OO?

    Lua 没有内置对 OO 的支持 但它允许您自己构建它 您能否分享一些实现面向对象的方法 请为每个答案写一个例子 如果您有更多示例 请发布另一个答案 我喜欢将 OOP 视为容器 对象 内的数据封装以及可以使用该数据完成的操作子集 还有很多内
  • Lua :: 如何编写加载多个CPU的简单程序?

    我还无法用 Lua 编写一个可以加载多个 CPU 的程序 自从Lua通过协程支持这个概念 http www lua org pil 9 4 html 我相信这是可以实现的 我失败的原因可能是以下之一 这在Lua中是不可能的 我写不出来 an
  • 安装Lua套接字库

    要么我太累了 要么我瞎了 我想学习 Lua 网络 因此我必须安装socketlib 所以我可以轻松地要求它 但我不知道我应该 要求 哪些文件 例子说 local socket require socket 但正如我所说 如果我使用 我不知道

随机推荐

  • openGL细分着色器详解

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一 细分曲面着色器 1 细分曲面Patch 例子 1 c 主程序 2 片元着色器 3 曲面细分控制着色器 4 曲面细分评估着色器 运行结果 源码下载 前言 术语Tessel
  • 免费小程序商城搭建之b2b2c o2o 多商家入驻商城 直播带货商城 电子商务b2b2c o2o 多商家入驻商城 直播带货商城 电子商务

    1 涉及平台 平台管理 商家端 PC端 手机端 买家平台 H5 公众号 小程序 APP端 IOS Android 微服务平台 业务服务 2 核心架构 Spring Cloud Spring Boot Mybatis Redis 3 前端框架
  • java设计模式(二十三)访问者模式

    目录 定义 模式结构 角色职责 代码实现 适用场景 优缺点 定义 访问者模式是一种行为型模式 它允许你定义一个作用于某个对象结构中的各个元素的操作 而同时又不改变这些元素的类 该模式的核心思想是将数据结构与数据操作分离 从而可以在不改变数据
  • IOS_Swift_深入理解闭包 对比懒加载和普通赋值的区别

    定义一个字符串的变量的方法 直接赋值 var str JobDeer 闭包方式 var str String return JobDeer 简化闭包 省略了等号和括号 var str String return JobDeer 闭包中可以定
  • citrix协议ICA技术原理

    转载自 http www zrss com cn article 110 1 html Citrix交付中心解决方案的核心是虚拟化技术 虚拟化计算的核心是ICA协议 ICA协议连接了运行在平台上的应用客户端运行环境和远端终端设备 通过ICA
  • Flutter 单线程模型保证UI运行流畅

    Flutter 框架出色的渲染和交互能力 支撑起这些复杂的能力背后 实际上是基于单线程模型的 Dart 那么 与原生 Android 和 iOS 的多线程机制相比 单线程的 Dart 如何从语言设计层面和代码运行机制上保证 Flutter
  • JUC并发编程之AQS原理

    1 AQS 原理 1 1 概述 全称是 AbstractQueuedSynchronizer 是阻塞式锁和相关的同步器工具的框架 特点 用 state 属性来表示资源的状态 分独占模式和共享模式 子类需要定义如何维护这个生态 控制如何获取锁
  • PCL点云焊点提取

    滚回来更新一篇文章 和各位交流一下 待处理点云 数量级 百万 类型 零部件 描述 弯曲表面上有一些凸起在上面 需要提取凸起和平面接触的一圈点云 作为焊接的加工点 参考 https zhuanlan zhihu com p 32111069
  • Vue监听滚动实现导航栏锚点定位

    父级 div div div div div div div div div 子组件 ul class compreDiagnosisInfoUl li class active li ul div
  • 变分自编码器 (Variational Autoencoders, VAEs)

    Contents Dimensionality reduction PCA and autoencoders Dimensionality reduction Principal components analysis PCA Autoen
  • VMware Workstation克隆虚拟机(CentOS系统)

    问题 VMware Workstation克隆虚拟机 CentOS系统 下面具体说明下 如何在VMware Workstation中克隆一台已有的虚拟机 方法 如下图所示 要克隆名叫 CentOS7 base的一台虚拟 右键该虚拟机选择 管
  • userManager.do不可用问题

    dao层和业务层都可以成功添加 但在页面上调用Servlet显示不可用 原因 userAdd jsp被放到了web的子目录usermanager下面了 所以定位不到servlet资源了 修改 userManager do 成功解决问题
  • 怎么查EI论文的检索号

    论文题目 Study on joint probability density algorithm in multi sensor data fusion 那位热心人帮忙查一下检索号是多少啊 去http www engineeringvil
  • OpenCV调用cv2.imshow显示错误 “The function is not implemented. Rebuild the library with Windows”的解决办法

    在Windows环境下 已经安装了opencv python 读取图片 处理都没有问题 唯独显示就会出错 说 The function is not implemented Rebuild the library with Windows
  • Android 蓝牙开发(六)hfp连接

    转载请注明出处 http blog csdn net vnanyesheshou article details 71106622 本文已授权微信公众号 fanfan程序媛 独家发布 扫一扫文章底部的二维码或在微信搜索 fanfan程序媛
  • nginx+php 出现404错误解决方法

    http www 51ou com browse linuxwt 32263 html 错误日志 装好 nginx 1 0 5 与 php 5 3 6 php fpm 迫不及待的测试 info php 但是只返回了空白页 什么也没有输出 以
  • 关于解决Linux(ubuntu) 中不允许root用户ssh远程登录的问题

    当我们在ubuntu中登录ssh的时候 会出现如下问题 是因为系统默认禁止root用户登录ssh 此时我们可以这样解决 1 首先 按Ctrl C退出密码输入界面 2 然后输入 su 一定是su 不是su 3 编辑sshd config文件
  • VS快捷键大全(超详细)

    本文主要介绍VS编译器下的快捷键 文章目录 1 项目相关的快捷键 2 编辑相关的键盘快捷键 3 导航相关的键盘快捷键 4 调试相关的键盘快捷键 5 搜索相关的键盘快捷键 1 项目相关的快捷键 Ctrl Shift B 生成项目 Ctrl A
  • 2020.11.14 数组的相对排序

    2020 11 14 数组的相对排序 题目描述 给你两个数组 arr1 和 arr2 arr2 中的元素各不相同 arr2 中的每个元素都出现在 arr1 中 对 arr1 中的元素进行排序 使 arr1 中项的相对顺序和 arr2 中的相
  • CORE-ESP32C3

    目录 参考博文 项目官方地址 显示效果 硬件准备 软件版本 日志及soc下载工具 软件使用 接线示意图 硬件接线 一 Elink驱动管脚适配 二 天气信息获取 API使用方式 接口格式 注意需不需要tls http apicn luatos