技术标签: 国产mcu 实时日历 lua 墨水屏 LuatOS-SOC接口学习 ESP32C3
目录
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的摄像头_打酱油的工程师的博客-程序员宅基地
合宙ESP32系列|自定义固件|在线云编译|本地编译|Windows|luat_conf_bsp.h|(2)、CORE-ESP32S3编译_打酱油的工程师的博客-程序员宅基地
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
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,但后期存在复用冲突风险。
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://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
官方示例中的标准程序
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)
墨水屏初始化前需要先初始化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()之后后面不要加任何语句!!!!!
这个函数是垃圾收集器的通用接口。 通过参数 opt 它提供了一组不同的功能:
文章浏览阅读8.1k次,点赞4次,收藏7次。如何生成 .plist文件,plist文件制作教程如何生成 plist文件plist文件制作教程准备好已经切分好的序列图打开软件按图提示操作选择位置保存生成的两个文件 plist png example前期准备软件:TexturePacker要制作的序列图1.准备好已经切分好的序列图2.打开软件3.按图提示操作选择位置保存生成的两个文件 *.plist *.png examp_plist生成
文章浏览阅读69次。目录如何使用Table(1)创建一个简单的表格(2)向容器添加表格(3)改变每每一列的宽度(4)用户选择(5)创建表格模型(6)监听数据改变(7)点燃数据改变事件(8)概念:编辑器和渲染器(Editors and Renderers)(9)使用自定义渲染器(10)为单元格指定提示工具(11)为列头指定工具集(12)排序和过滤..._jtable对象两个参数类型
文章浏览阅读79次。树链剖分//模板题由于存在换根操作对所有关于节点 u 的修改和查询操作进行分类讨论若 Root 在 u 的子树中,则不处理 u 所在的 Root 的那颗子树否则不会有影响寻找 Root 所在的那颗子树的根可以用倍增求#include <iostream>#include <cstdio>#include <algorithm>#include..._onuoj
文章浏览阅读273次。象理主义者认为:时间和空间是无限的,在时间上,没有开始和终了,在空间上没有边界和尽头,而宇宙间的万事万物,小到朝菌、蝇虫,大到整个宇宙,都是有限的产生、存在和无限的循环,任何事物都有开始和结束。静久必静,物极必反。对于整个宇宙而言,物质永不毁灭,循环不已生生不息。第一节太极宇宙一:太易宇宙即宇宙形成过程中“未见气之前”的阶段,阴阳不分,不产生吸引,也不产生排斥,为静止的空间,通过观..._时间有没有开始,空间有没有尽头
文章浏览阅读924次。目录一、论文题目二、作者信息三、论文地址四、论文内容1.webshell检测的分类2.基于静态文本的检测3.基于动态行为的检测4.基于日志分析的监测5.future works一、论文题目Webshell 检测方法研究综述二、作者信息南京林业大学,端木怡婷三、论文地址https://kns.cnki.net/kcms/detail/detail.aspx?dbcode=CJFD&dbname=CJFDLAST2021&filename=RJZZ202011020四、论文内容1_webshell研究现状
文章浏览阅读2k次。一、前言 最近在学习golang的并发语法,想来想去,发现学习的多线程算法着实不多,除了一些传统排序算法的并发版本外,第一时间想起的也就是这个并发求素数的算法。 大部分人了解的单线程求素数算法,应该是两重循环判断是否能够整除,外层循环为被除数,内层循环为除数。而这种形式的求法能做文章的地方无非就是两点:被除数和除数的取值范围。 我所知比较好的被..._多线程输出素数
文章浏览阅读710次,点赞8次,收藏17次。这时候软件可能就会识别手机。如果以上方法不可行,又不想花太多时间去找问题,就可以采用安装安装包的方式。我们可以在每一个对应项目对应目录下面的app\build\outputs\apk\debug查找到软件自动生成的安装包。如果是新版的AS的话可能只会看到一个app-debug.apk,并没有什么网上说的app-debug-unaligned.apk什么的两个.apk结尾的文件,这都不要紧,可以把这个拿到手机上直接安装。
文章浏览阅读1w次,点赞11次,收藏38次。unity使用Image实现划线功能_unity quest3 在image上画线
文章浏览阅读3.1k次。今天讲讲获取表单元素的N种方法~以上是部分资料参考的地方:http://blog.csdn.net/h12kjgj/article/details/61624509先给出一个实例。输入数字1~10,弹出输入的数字,并计算该数字的阶乘;如果输入的数字不在该范围内,则输出“balabala自己编的一些话”源代码: function Count(){var i,r,_提取所有表单元素的方法
文章浏览阅读1.8w次,点赞5次,收藏11次。文献导读肠道菌群是指存在于宿主肠道内的微生物集合,它参与了宿主多种重要的生理作用,如影响机体的营养代谢、调节机体免疫系统的发育与成熟及抗菌作用,因此肠道菌群又被人称之为"被遗忘的器官"。随着科学技术的发展,人们逐渐意识到到肠道菌群与全身各个系统的疾病的发生发展都存在着密切的关联,从而提出一些像"肠脑轴"和"肠肝轴"等名词。肠脑轴背景介绍据统计,定植于人体肠道内数量约是人体细胞数量的..._脑肠轴检测指标
文章浏览阅读6.5w次,点赞56次,收藏261次。Qt6.4安装教程、组件介绍_qt6.4安装
文章浏览阅读648次。ubuntu1604 64位安装海思V400编译器之后仍然报No such file or directory环境:ubuntu 1604 64位安装:arm-hisiv400-linux工具链安装成功后执行:arm-hisiv400-linux-gcc -v报错:bash: /opt/hisi-linux/x86-arm/arm-hisiv400-linux/target/bin/arm-hisiv400-linux-gcc: No such file or directory。但其实工具链已经安_hisilicon_v400