基于Lua框架下的合宙ESP32C3+1.54‘’Eink墨水屏天气时钟项目

基于Lua框架下的合宙ESP32C3+1.54"Eink墨水屏天气时钟项目


  • 🎬效果展示
    在这里插入图片描述
    在这里插入图片描述
  • 🌿用在不需要实时刷新的地方还是不错的,更新完就可以取下来,任意摆放。不耗电。
  • 🎉和kindle一起的对比照
    在这里插入图片描述
  • 📌项目开源地址:https://gitee.com/openLuat/LuatOS/tree/master/script/turnkey/eink-calendar
⛳具体制作教程参考
  • 📌《0.2.2 合宙ESP32C3制作1.54寸墨水屏日历天气
  • ✨ESP32C3解锁使用IO11:https://gitee.com/dreamcmi/LuatOS-ESP32/blob/master/doc/VDD_SPI_AS_GPIO.md
  • 📌项目说明:https://wiki.luatos.com/peripherals/eink_1.54/software.html#id4
  • 📍墨水屏天气API接口说明: https://api.luatos.org/#eink
  • 🎈天气API接口:https://tianqiapi.com/
🔖感兴趣的可以自己制作:在合宙官网购买一块ESP32C3开发板+1.54电子墨水屏即可制作。成本:9.9+16.8

🌻烧录说明

  • 🌿Lua烧录参考教程:https://wiki.luatos.com/boardGuide/flash.html
  • 🔖准备烧录工具

LuatOS工具:https://wiki.luatos.com/pages/tools.html

  • 🌿选择通用串口打印连接对应的串口端口打开串口,(波特率默认:921600,)点击项目管理测试
    在这里插入图片描述- 🔨加载固件以及脚本并烧录
    在这里插入图片描述

解锁ESP32C3GPIO 1

解锁依赖Python,需要电脑安装了Python。

  • 安装esptool工具,

在CMD命令行下:pip install esptool
在这里插入图片描述

  • 通过USB连接esp32C3开发板,确定对应的串口端口号,输入解锁命令:(注意中间的COM13对应的是串口端口号)
espefuse.py -p COM13 burn_efuse VDD_SPI_AS_GPIO 1

在这里插入图片描述

✨解锁成功
在这里插入图片描述

🌼代码说明

代码中需要自己添加的信息有3处如下:

local wifiName,wifiPassword = "你的2.4gwifi","wifi密码"
local location = "你的属地代码"
local appid,appsecret = "api的id","api的密钥"

显示方向设置

  • 找到对应的代码:
 eink.setWin(200, 200, 2)--0代表不旋转,1,代表选择90度,2,代表选择180

📗代码

📜基于VSCode平台,使用luatIDE编译

PROJECT = "wifidemo"
VERSION = "1.0.0"
 
--测试支持硬件:ESP32C3
--测试固件版本:LuatOS-SoC_V0003_ESP32C3.soc
 
local sys = require "sys"
 
--需要自行填写的东西
--wifi信息
local wifiName,wifiPassword = "你的2.4gwifi","wifi密码"
--地区id,请前往https://api.luatos.org/luatos-calendar/v1/check-city/ 查询自己所在位置的id
local location = "你的属地代码"
--天气接口信息,需要自己申请,具体参数请参考https://api.luatos.org/ 页面上的描述
local appid,appsecret = "api的id","api的密钥"
 
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()之后后面不要加任何语句!!!!!
<think>嗯,用户之前问了关于他们的LuatOS项目报错的问题,现在他们又追问为什么别人的项目都能正常运行,而自己这边总是报错。需要分析可能的原因,并给出解决方案。 首先,用户提供的代码是一个基于ESP32C3LuatOS项目,用于连接WiFi、获取天气数据并在电子墨水上显示。之前已经列出了可能的错误原因,比如变量赋值、函数返回空值、SPI配置等。现在用户的问题更侧重于比较他人和自己的情况,可能涉及到环境差异或配置问题。 需要考虑的方面包括: 1. **硬件差异**:虽然用户提到测试硬件是ESP32C3,但不同批次的硬件可能有细微差别,比如引脚布局或固件版本不同。用户是否确认硬件没有问题?比如是否尝试过更换模块或检查焊接连接? 2. **固件版本**:用户使用的固件是LuatOS-SoC_V0003_ESP32C3[_USB].soc,可能需要确认是否是最新版本,或者是否存在已知的问题。他人可能使用不同版本的固件,导致兼容性不同。 3. **WiFi配置**:用户是否正确填写了WiFi名称和密码?是否有特殊字符导致连接失败?或者WiFi网络本身是否存在限制,比如MAC过滤或5GHz频段不支持? 4. **API密钥和地区ID**:用户是否申请了正确的API密钥,并正确填写了appid和appsecret?地区ID是否正确?如果API返回错误,可能导致数据无法解析。 5. **SPI引脚配置**:代码中根据不同的开发板返回不同的引脚配置。用户使用的是ESP32C3,返回的引脚是2,11,10,6,7。需要确认这些引脚是否与硬件连接一致,特别是电子墨水的接线是否正确。 6. **电源问题**:电子墨水在刷新时需要较大的电流,如果电源不稳定,可能导致SPI通信失败或幕无法正常刷新。 7. **日志信息**:用户是否有查看详细的日志输出?日志中是否有更具体的错误信息,比如HTTP请求失败的具体原因、SPI初始化错误等。 8. **代码版本**:用户是否从可靠的来源获取代码?他人的代码可能有未公开的修改或补丁,导致行为不同。 可能的解决步骤: - **检查WiFi连接**:确保SSID和密码正确,且路由器没有限制新设备连接。尝试用手机热点测试,排除网络问题。 - **验证API请求**:在电脑上用浏览器或Postman测试天气API的URL,确认返回的数据正确。检查appid和appsecret是否有效。 - **检查硬件连接**:确认ESP32C3与电子墨水的引脚连接正确,特别是SPI相关的引脚(如CS、DC、RESET、BUSY)是否对应代码中的配置。使用万用表检测是否有短路或接触不良。 - **更新固件**:查找是否有更新的LuatOS固件版本,并尝试升级,以修复可能的已知问题。 - **详细日志分析**:在代码中添加更多的log.info语句,记录关键步骤的执行情况,比如WiFi连接状态、HTTP响应码、SPI初始化结果等。通过日志定位具体失败的位置。 - **简化测试**:将代码拆分成独立的部分测试,比如单独测试WiFi连接,再单独测试HTTP请求,最后测试幕刷新,逐步排查问题。 用户可能在操作过程中忽略了某个细节,比如引脚接错、API密钥未激活,或者使用的固件有bug。需要引导用户逐一排查,并提供具体的检查步骤和工具建议。</think>以下是可能导致程序报错而他人正常运行的常见原因及逐步排查方案: --- ### **1. WiFi配置错误(最常见)** - **现象**:卡在 `WLAN_STA_CONNECTED` 或 `IP_READY` 阶段。 - **排查步骤**: 1. **检查SSID和密码**:确保 `wifiName` 和 `wifiPassword` 正确,**无多余空格或中文字符**。 2. **测试网络兼容性**: - 尝试连接手机热点(2.4GHz网络),排除路由器兼容性问题。 - 检查路由器是否开启MAC地址过滤。 3. **查看日志**: ```lua log.info("wlan", "尝试连接:", wifiName, "密码长度:", #wifiPassword) ``` 确保密码长度符要求(如8~64字符)。 --- ### **2. 天气API参数错误** - **现象**:HTTP请求返回 `code != 200` 或 `#data < 100`。 - **排查步骤**: 1. **手动测试API**: 在浏览器中访问完整URL(替换实际参数): ``` http://apicn.luatos.org:23328/luatos-calendar/v1?mac=111&battery=10&location=101010100&appid=xxx&appsecret=yyy ``` 检查返回数据是否包含有效的天气信息。 2. **检查密钥权限**: - 确认 `appid` 和 `appsecret` 已通过[天行数据](https://api.luatos.org/)的审核。 3. **修改日志输出**: ```lua log.info("http", "响应长度:", #body, "内容片段:", body:sub(1,50)) ``` 观察返回数据是否包含错误提示(如 `invalid key`)。 --- ### **3. 墨水硬件连接问题** - **现象**:幕无反应或日志提示 `bsp not support`。 - **排查步骤**: 1. **核对引脚定义**: - ESP32C3的引脚配置为 `spi_id=2, busy=11, reset=10, dc=6, cs=7`。 - 使用万用表确认幕的 `BUSY/RESET/DC/CS` 引脚与开发板实际连接一致。 2. **检查SPI模式**: - 部分幕需要特定SPI模式(如模式0),尝试修改: ```lua spi.setup(spi_id, spi.MODE0, 0, 0, 8, 20*1000*1000) ``` 3. **降低SPI速率**: 将 `20*1000*1000`(20MHz)改为 `10*1000*1000`,排除信号干扰。 --- ### **4. 固件或内存问题** - **现象**:随机崩溃或 `sys.run()` 后无响应。 - **排查步骤**: 1. **更新固件**: 从[LuatOS官方仓库](https://github.com/openLuat/LuatOS)下载最新固件,替换 `LuatOS-SoC_V0003_ESP32C3.soc`。 2. **监控内存使用**: 在 `refresh()` 函数中添加日志: ```lua log.info("mem", "剩余内存:", rtos.meminfo("sys")) ``` 确保内存未耗尽(建议值 > 30KB)。 --- ### **5. 其他环境差异** - **供电不足**:墨水刷新时需较大电流,建议外接5V/2A电源。 - **时区设置**:部分API依赖本地时间,添加时间同步代码: ```lua if rtos_bsp == "ESP32C3" then ntp.sync() sys.wait(1000) end ``` --- ### **快速验证流程** 1. 用手机热点替代原有WiFi。 2. 注释掉 `eink` 相关代码,仅测试WiFi和HTTP请求。 3. 如果HTTP成功,逐步取消注释,定位到具体报错位置。 通过以上步骤,可系统性排除90%的常见问题。如果仍无法解决,建议提供完整的运行日志(包含 `log.info` 输出)。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值