esp32c3 luaos

2024-08-23 06:20
文章标签 esp32c3 luaos

本文主要是介绍esp32c3 luaos,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、介绍
  • 二、相关介绍
    • 2.1helloworld——
    • 2.2任务框架
    • 2.3消息传递 与消息订阅
    • 2.4uart
    • 2.5二进制数据/c结构体的打包与解析
    • 2.6 zbuffer库
    • 2.8 uart 485 数据解析
    • 2.9 点亮自带的lcd
    • 2.10 lcd显示文字和显示中文字体
    • 2.11 lcd显示文字和显示中文字体
    • 1.引入库
  • 二、联网
    • 2.1 连接wifi,并支持smartconfig配网 现在缺少一个判断有数据但是没有这个网络,需要重新配网的一个局面
    • 2.2 连接阿里云平台


前言

官网固件处讲解
现在已经不推本地的tools进行esp32c3的烧录; 时间(2024.8.21)

在这里插入图片描述
这上面说推荐直接云客户端
直接看官网云客户端配置


提示:以下是本篇文章正文内容,下面案例可供参考

一、介绍

在这里插入图片描述
在这里插入图片描述
其他介绍看这个

二、相关介绍

上面云端的那个地方就是进行一些固件,不是正在的代码编写。
他没有专有的ide要在vscode里面编写。环境搭建
烧录教程此时resource里面是没有esp32的需要使用上面的云端那个配置soc固件烧到板子里面
此时两个gpio灯微微亮。

2.1helloworld——

这时候我们用vscode编写代码

PROJECT = "hello_world"
VERSION = "0.0.1"sys = require"sys"
--代码区startlocal LEDA= gpio.setup(12, 0, gpio.PULLUP)
local LEDB= gpio.setup(13, 0, gpio.PULLUP)print("hello world")-- LEDA(0)
--代码区endsys.run()

2.2任务框架

然后将脚本烧录了。
使用任务的方式进行闪烁
有需要任务框架教程
对于gpio的操作

PROJECT = "hello_world"
VERSION = "0.0.1"sys = require("sys")
--代码区startlocal LEDA= gpio.setup(12, 0, gpio.PULLUP)
local LEDB= gpio.setup(13, 0, gpio.PULLUP)sys = require("sys")
--第一个任务
sys.taskInit(function()while true dolog.info("task1","-----")print("system start")sys.wait(500) --延时500m秒,这段时间里可以运行其他代码end
end)--第二个任务
sys.taskInit(function()while true dolog.info("task2","------")LEDA(1)LEDB(1)sys.wait(500) --延时0.5秒,这段时间里可以运行其他代码LEDA(0)LEDB(0)sys.wait(500) --延时0.5秒,这段时间里可以运行其他代码end
end)print("system start\n")-- LEDA(0)
--代码区endsys.run()

即可完成打印和闪烁
对于这个函数的定义以及任务的定义 ,也可以采用这种方式

PROJECT = "hello_world"
VERSION = "0.0.1"sys = require("sys")
--代码区startlocal LEDA= gpio.setup(12, 0, gpio.PULLUP)
local LEDB= gpio.setup(13, 0, gpio.PULLUP)sys = require("sys")
--第一个任务function task1()while true dolog.info("task1","-----")print("system start")sys.wait(500) --延时500m秒,这段时间里可以运行其他代码end
end
--第二个任务
sys.taskInit(function()while true dolog.info("task2","------")LEDA(1)LEDB(1)sys.wait(500) --延时0.5秒,这段时间里可以运行其他代码LEDA(0)LEDB(0)sys.wait(500) --延时0.5秒,这段时间里可以运行其他代码end
end)sys.taskInit(task1)print("system start\n")-- LEDA(0)
--代码区endsys.run()

2.3消息传递 与消息订阅

消息传递
sys.publish
sys.waitUntil
在这里插入图片描述
在这里插入图片描述

订阅消息
sys.subcribe
sys.unsubcribe

在这里插入图片描述

2.4uart

local LEDA= gpio.setup(12, 0, gpio.PULLUP)
local LEDB= gpio.setup(13, 0, gpio.PULLUP)
local uartid = 1
--初始化
uart.setup(uartid,--串口id115200,--波特率8,--数据位1--停止位
)
-- 收取数据会触发回调, 这里的"receive" 是固定值
uart.on(uartid, "receive", function(id, len)local s = uart.read(id, len)if #s > 0 then -- #s 是取字符串的长度if s == "on" thenLEDA(1)elseif s == "off" thenLEDA(0)end-- 如果传输二进制/十六进制数据, 部分字符不可见, 不代表没收到-- 关于收发hex值,请查阅 https://doc.openluat.com/article/583log.info("uart", "receive", id, #s, s)-- log.info("uart", "receive", id, #s, s:toHex())end-- 如使用2024.5.13之前编译的ESP32C3/ESP32S3固件, 恢复下面的代码可以正常工作-- if #s == len then--     break-- endend)

2.5二进制数据/c结构体的打包与解析

视频
在这里插入图片描述
在这里插入图片描述

2.6 zbuffer库

在这里插入图片描述
在这里插入图片描述

2.8 uart 485 数据解析

2.9 点亮自带的lcd

云平台要把这个打开,其他的不变

在这里插入图片描述
然后复制demo里面的代码
也可以打图片也放进去
在这里插入图片描述
这样屏幕就能正常显示了
精简以后的代码


-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "lcddemo"
VERSION = "1.0.0"log.info("main", PROJECT, VERSION)-- sys库是标配
_G.sys = require("sys")-- 提示:
-- 1. 只使用SPI的时钟线(SCK)和数据输出线(MOSI), 其他均为GPIO脚
-- 2. 数据输入(MISO)和片选(CS), 虽然是SPI, 但已复用为GPIO, 并非固定,是可以自由修改成其他脚
-- 3. 若使用多个SPI设备, 那么RES/CS请选用非SPI功能脚
-- 4. BL可以不接的, 若使用Air10x屏幕扩展板,对准排针插上即可
-- ]]--添加硬狗防止程序卡死
if wdt thenwdt.init(9000)--初始化watchdog设置为9ssys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
endlocal spi_id,pin_reset,pin_dc,pin_cs,bl = 2,10,6,7,11spi_lcd = spi.deviceSetup(spi_id,pin_cs,0,0,8,20*1000*1000,spi.MSB,1,0)
port = "device"
print('hello2222222222222222')lcd.init("st7735v",{port = port,pin_dc = pin_dc, pin_pwr = bl, pin_rst = pin_reset,direction = 1,w = 160,h = 80,xoffset = 0,yoffset = 24},spi_lcd)--如果显示颜色相反,请解开下面一行的注释,关闭反色--lcd.invoff()--0.96寸TFT如果显示依旧不正常,可以尝试老版本的板子的驱动-- lcd.init("st7735s",{port = port,pin_dc = pin_dc, pin_pwr = bl, pin_rst = pin_reset,direction = 2,w = 160,h = 80,xoffset = 0,yoffset = 0},spi_lcd)-- 不在内置驱动的, 看demo/lcd_customsys.taskInit(function()-- 开启缓冲区, 刷屏速度回加快, 但也消耗2倍屏幕分辨率的内存-- lcd.setupBuff()          -- 使用lua内存-- lcd.setupBuff(nil, true) -- 使用sys内存, 只需要选一种-- lcd.autoFlush(false)while 1 dolcd.clear()log.info("wiki", "https://wiki.luatos.com/api/lcd.html")-- API 文档 https://wiki.luatos.com/api/lcd.htmlif lcd.showImage then-- 注意, jpg需要是常规格式, 不能是渐进式JPG-- 如果无法解码, 可以用画图工具另存为,新文件就能解码了lcd.showImage(40,0,"/luadb/logo.jpg")sys.wait(100)endlog.info("lcd.drawLine", lcd.drawLine(20,20,150,20,0x001F))log.info("lcd.drawRectangle", lcd.drawRectangle(20,40,120,70,0xF800))log.info("lcd.drawCircle", lcd.drawCircle(50,50,20,0x0CE0))sys.wait(1000)end
end)-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

上面是没有开启缓冲区,下面这里开启了 缓冲区。注意才操作完以后一定要写lcd.flush()不然不会进行显示

sys.taskInit(function()-- 开启缓冲区, 刷屏速度回加快, 但也消耗2倍屏幕分辨率的内存lcd.setupBuff()          -- 使用lua内存-- lcd.setupBuff(nil, true) -- 使用sys内存, 只需要选一种lcd.autoFlush(false)while 1 dolcd.clear()lcd.flush()log.info("wiki", "https://wiki.luatos.com/api/lcd.html")-- API 文档 https://wiki.luatos.com/api/lcd.htmlif lcd.showImage then-- 注意, jpg需要是常规格式, 不能是渐进式JPG-- 如果无法解码, 可以用画图工具另存为,新文件就能解码了lcd.showImage(40,0,"/luadb/logo.jpg")-- sys.wait(100)endlog.info("lcd.drawLine", lcd.drawLine(20,20,150,20,0x001F))log.info("lcd.drawRectangle", lcd.drawRectangle(20,40,120,70,0xF800))log.info("lcd.drawCircle", lcd.drawCircle(50,50,20,0x0CE0))lcd.flush()sys.wait(1000)end
end)

2.10 lcd显示文字和显示中文字体

需要云编译配置这几项
在这里插入图片描述

然后在代码里面写

--- 模块功能:lcddemo
-- @module lcd
-- @author Dozingfiretruck
-- @release 2021.01.25-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "lcddemo"
VERSION = "1.0.0"log.info("main", PROJECT, VERSION)-- sys库是标配
_G.sys = require("sys")-- 提示:
-- 1. 只使用SPI的时钟线(SCK)和数据输出线(MOSI), 其他均为GPIO脚
-- 2. 数据输入(MISO)和片选(CS), 虽然是SPI, 但已复用为GPIO, 并非固定,是可以自由修改成其他脚
-- 3. 若使用多个SPI设备, 那么RES/CS请选用非SPI功能脚
-- 4. BL可以不接的, 若使用Air10x屏幕扩展板,对准排针插上即可
-- ]]--添加硬狗防止程序卡死
if wdt thenwdt.init(9000)--初始化watchdog设置为9ssys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
endlocal spi_id,pin_reset,pin_dc,pin_cs,bl = 2,10,6,7,11spi_lcd = spi.deviceSetup(spi_id,pin_cs,0,0,8,20*1000*1000,spi.MSB,1,0)--打开spi
port = "device"
print('hello2222222222222222')lcd.init("st7735v",{port = port,pin_dc = pin_dc, pin_pwr = bl, pin_rst = pin_reset,direction = 1,w = 160,h = 80,xoffset = 0,yoffset = 24},spi_lcd)--如果显示颜色相反,请解开下面一行的注释,关闭反色--lcd.invoff()--0.96寸TFT如果显示依旧不正常,可以尝试老版本的板子的驱动-- lcd.init("st7735s",{port = port,pin_dc = pin_dc, pin_pwr = bl, pin_rst = pin_reset,direction = 2,w = 160,h = 80,xoffset = 0,yoffset = 0},spi_lcd)-- 不在内置驱动的, 看demo/lcd_customsys.taskInit(function()-- 开启缓冲区, 刷屏速度回加快, 但也消耗2倍屏幕分辨率的内存lcd.setupBuff()          -- 使用lua内存-- lcd.setupBuff(nil, true) -- 使用sys内存, 只需要选一种lcd.autoFlush(false)while 1 dolcd.clear()lcd.flush()lcd.setFont(lcd.font_opposansm12)lcd.drawStr(40,10,"drawStr")lcd.setFont(lcd.font_sarasa_m14_chinese)-- 具体取值可参考api文档的常量表lcd.drawStr(40,40,"drawStr测试")lcd.flush()sys.wait(1000)end
end)-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

2.11 lcd显示文字和显示中文字体

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context

二、联网

2.1 连接wifi,并支持smartconfig配网 现在缺少一个判断有数据但是没有这个网络,需要重新配网的一个局面

-- LuaTools需要PROJECT和VERSION这两个信息
PROJECT = "wifidemo"
VERSION = "1.0.0"-- 引入必要的库文件(lua编写), 内部库不需要require
sys = require("sys")
require("sysplus")-- -- wifi扫描成功后, 会有WLAN_SCAN_DONE消息, 读取即可
-- sys.subscribe("WLAN_SCAN_DONE", function ()
--     local results = wlan.scanResult()
--     log.info("scan", "results", #results)
--     for k,v in pairs(results) do
--         log.info("scan", v["ssid"], v["rssi"], (v["bssid"]:toHex()))
--     end
-- end)-- sys.taskInit(function()
--     sys.wait(1000)
--     wlan.init()
--     while 1 do
--         wlan.scan()
--         sys.wait(30000) -- 注意, 尤其是Air780系列, 这个时间只能更长不能短
--     end
-- end)
if wdt then--添加硬狗防止程序卡死,在支持的设备上启用这个功能wdt.init(9000)--初始化watchdog设置为9ssys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
end
fskv.kvdb_init()sys.subscribe("IP_READY", function(ip) -- 联网成功的订阅log.info("wlan", "ip ready", ip)-- 联网成功, 可以发起http, mqtt, 等请求了
end)
-- sys.subscribe("IP_ERROR", function() -- 联网失败的订阅
--     log.info("联网失败 ")
-- end)sys.taskInit(function()sys.wait(2000)wlan.init()sys.wait(1000)-- 获取上次保存的配网信息, 如果存在就直接联网, 不需要配网了-- 注意, fskv保存的数据是掉电存储的, 刷脚本/刷固件也不会清除-- 如需完全清除配置信息, 可调用 fskv.clear() 全清if fskv.kv_get("wlan_ssid") thenwlan.connect(fskv.kv_get("wlan_ssid"), fskv.kv_get("wlan_passwd"))log.info( "fskv有联网数据")log.info( "正在连接请稍等******")--可能连接不成功,如果连接超时了(要有一个定时器计时),就让定时器打开"start_smartconfig"return -- 等联网就行了elselog.info( "fskv中没有联网数据")sys.publish("start_smartconfig")end-- wlan.connect("linsen66", "66668888")-- log.info("wlan", "wait for IP_READY")-- sys.waitUntil("IP_READY", 30000)-- if wlan.ready() then--     log.info("wlan", "ready !!")--     sys.wait(100)-- else--     print("wlan NOT ready!!!!")-- endwhile 1 dosys.waitUntil("start_smartconfig")-- 启动配网, 默认是esptouch模式     wlan.smartconfig(wlan.AIRKISS) 是AIRKISS 模式wlan.smartconfig(wlan.AIRKISS)log.info( "打开esptouch模式 的smartconfig")local ret, ssid, passwd = sys.waitUntil("SC_RESULT", 3*60*1000) --3分钟if ret == false thenlog.info("timeout stop smartconfig")wlan.smartconfig(wlan.STOP)-- sys.wait(3000) -- 再等3s重新配网, 或者直接reboot也行else-- 获取配网后, ssid和passwd会有值log.info("获取到的账号和密码 ", ssid, passwd)-- 获取IP成功, 将配网信息存入fskv, 做持久化存储log.info("fskv", "save ssid and passwd")fskv.kv_set("wlan_ssid", ssid)fskv.kv_set("wlan_passwd", passwd)endsys.wait(1000)end
end)
-- 用户代码已结束---------------------------------------------
-- 结尾总是这一句
sys.run()
-- sys.run()之后后面不要加任何语句!!!!!

在这里插入图片描述
在这里插入图片描述

2.2 连接阿里云平台

参考文档1
参考文档2
参考文档3

代码

参考视频

云端配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上传数据参考

local basedata =
{method = "thing.event.property.post",id = "1",params = {data_contral = 1},version  = "1.0",
}
local led1_data =
{method = "thing.event.property.post",id = "1",params = {led_contral_1 = 0},version  = "1.0",
}
--发布一条QOS为1的消息
function publishTest()--注意:在此处自己去控制payload的内容编码,aLiYun库中不会对payload的内容做任何编码转换-- aliyun.publish(topic,qos,payload,cbFnc,cbPara)log.info("aliyun", "上行数据")jsondata = json.encode(basedata)aliyun.publish("/sys/k021qfZofse/demo_1/thing/event/property/post",1,jsondata,publishTestCb,"publishTest_"..publishCnt)jsonled1= json.encode(led1_data)aliyun.publish("/sys/k021qfZofse/demo_1/thing/event/property/post",1,jsonled1,publishTestCb,"publishTest_"..publishCnt)-- aliyun.publish("/"..tPara[ProductKey]"/"..tPara[DeviceName].."/update",1,12)-- aliyun.publish("/k021qfZofse/demo_1/data_contral",1,"100")-- /sys/k021qfZofse/demo_1/thing/event/property/post
end

下传数据参考
这里进行调试,点击设置以后数据发送到esp32 使用串口产看数据

    -- /sys/k021qfZofse/demo_1/thing/service/property/set-- {"method":"thing.service.property.set","id":"1083737772",-- "params":{"led_contral_1":0,"led_contral_2":1,"data_contral":1},"version":"1.0.0"}-- 	0	0	0

其中"data_contral":1是我们需要的
在这里插入图片描述

使用这种方式就可以把数据解析出来

local function rcvCbFnc(topic,payload,qos,retain,dup)log.info("aliyun", "收到下行数据", topic,payload,qos,retain,dup)anly_data = json.decode(payload)contral_led = anly_data["params"]["led_contral_2"]print("contral_led的数据是------:",contral_led)
end

相关代码。

gitee

这篇关于esp32c3 luaos的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1098593

相关文章

ESP32/ESP32C3开发环境说明

说明:准备编译固件 给ESP32C3使用 意图是和树莓派4B通过UART连接 HEC外挂蓝牙 第一步: 删除本地PC旧的环境 前面离线安装的方式 有弊端  切换困难 选择在线安装 Windows 平台工具链的标准设置 - ESP32 - — ESP-IDF 编程指南 latest 文档 https://dl.espressif.com/dl/esp-idf/?idf=4.4 使用在

实测:合宙ESP32C3开发板可以直接用Arduino开发

合宙推出了一款ESP32C3开发板,制作精良,而且9.9包邮,可谓是相当吸引人了。 但当看某宝评论的时候,会发现很多人要么说这款开发板不能用Arduino开发,要么说不适合小白使用,又有说需要用电烙铁修改电路才可以使用,而且我也的确在群里看到有人求助说用此款开发板Arduino可以烧录,却不能正常运行。 本着实践出真知的原则,我购买了一块来测试,发现果然用Arduino直接可以烧录,却

【合宙ESP32C3 Arduino开发】第五篇:TFT_eSPI 驱动 合宙Air101 ST7735 LCD 显示猫系字体时钟,模块化编程

忘记过去,超越自己 ❤️ 博客主页 单片机菜鸟哥,一个野生非专业硬件IOT爱好者 ❤️❤️ 本篇创建时间 2024-03-02❤️❤️ 本篇更新时间 2024-03-02❤️🎉 欢迎关注 🔎点赞 👍收藏 ⭐️留言📝🙏 此博客均由博主单独编写,不存在任何商业团队运营,如发现错误,请留言轰炸哦!及时修正!感谢支持! 快速导读 1. 前言1.1 模块步骤1.2 代码结构 2. 详

FastBond2阶段2——基于ESP32C3开发的简易IO调试设备

1. 项目介绍 之前买了许多国产单片机esp32c3一直在吃灰,没有发挥它的真实价值。非常感谢硬禾组织的Fastbond2活动,刚好两者经过微妙的碰撞。恰可以用于FastBond2活动主题4 - 测量仪器(单片机开发测试领域),或者用于国产ESP32C3单片机简单应用开发教育等领域。回顾立项过程,且听我娓娓道来! 1.1 立项目标 设计用户操作界面,该设备具备简单易用的操作界面,

Conmi的正确答案——使用eclipse进行ESP32C3的debug

eclipse IDE 版本:2023-12 1、安装debug环境 参考大神的教程:【图文】手把手教你使用 Eclipse IDE 开发 ESP32 (这里是为了我下次回来速通才写的部分) 1.1、安装插件(plug-in,新的软件已经写成software了): 相关软件参数: 汉化(安装完成会提示重启应用): Name: Chinese Location: https:

【ESP32】Lua + ESP32C3 + DHT11温湿度传感器的数据实时上传到阿里云。

前言 用lua,ESP32C3 + DHT11温湿度传感器的数据实时上传到阿里云。 就这么件事儿。 用Lua是因为代码会简单一些。 废话不多讲,下面开始。 一、合宙ESP32C3经典版 ESP32C3经典版开发板,9.9元一个,淘宝有卖的,自带BLE和WIFI模块,能跑RTOS,用来练习真不错,价格也比较亲民。 ESP32C3的开发平台有很多,目前主流的平台基本都兼容,Ardui

合宙ESP32C3硬件配置信息串口打印输出

合宙ESP32C3硬件配置信息串口打印输出 🌴ESP32C3硬件简介 📝ESP32-C3 搭载 RISC-V 32 位单核处理器,时钟频率高达 160 MHz。具有 22 个可编程 GPIO 管脚、内置 400 KB SRAM,集成 2.4 GHz Wi-Fi 和支持长距离的 Bluetooth 5 (LE),支持蓝牙 Mesh (Bluetooth Mesh) 协议和乐鑫 W

Arduino ESP32C3 ADC校准读取

在使用 Arduino 对 ESP32C3 ADC引脚读取电压数值时发现与实际电压有较大误差,查询手册,按照说明ADC1是带有出厂校准的,经过一番搜索后在这里发现了在 Arduino 环境下的解决方法: Arduino ESP32C3 6 Channel ADC With Calibration – Seenov®https://seenov.com/2022/03/04/arduino-esp

ESP32C3小飞控调试

ESP32C3小飞控调试 - 1 ESP32C3小飞控板赶在国庆节前发出打样,假期后上班就收到了样板,但是迟迟没有动手调试,这两天终于抽出时间调试了,调试过程还算顺利,基本没有遇到什么大问题,下面记录一下调试过程。 原理图 比计划中多加了一个大气压力传感器,用作测高。主要特性: 单串锂电池供电,最大工作电压5.5V电源电压、电流感测锂电池温度感测DCDC降压电源,效率90%以上3轴加速

FastBond2阶段2——基于ESP32C3开发的简易IO调试设备

1. 项目介绍 之前买了许多国产单片机esp32c3一直在吃灰,没有发挥它的真实价值。非常感谢硬禾组织的Fastbond2活动,刚好两者经过微妙的碰撞。恰可以用于FastBond2活动主题4 - 测量仪器(单片机开发测试领域),或者用于国产ESP32C3单片机简单应用开发教育等领域。回顾立项过程,且听我娓娓道来! 1.1 立项目标 设计用户操作界面,该设备具备简单易用的操作界面,