esp32c3 luaos

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


前言

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

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


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

一、介绍

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

二、相关介绍

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

2.1helloworld——

这时候我们用vscode编写代码

PROJECT = "hello_world"
VERSION = "0.0.1"

sys = require"sys"
--代码区start

local LEDA= gpio.setup(12, 0, gpio.PULLUP)
local LEDB= gpio.setup(13, 0, gpio.PULLUP)


print("hello world")

-- LEDA(0)
--代码区end

sys.run()

2.2任务框架

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

PROJECT = "hello_world"
VERSION = "0.0.1"

sys = require("sys")
--代码区start

local LEDA= gpio.setup(12, 0, gpio.PULLUP)
local LEDB= gpio.setup(13, 0, gpio.PULLUP)

sys = require("sys")
--第一个任务
sys.taskInit(function()
    while true do
        log.info("task1","-----")
        print("system start")
        sys.wait(500) --延时500m秒,这段时间里可以运行其他代码
    end
end)

--第二个任务
sys.taskInit(function()
    while true do
        log.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)
--代码区end

sys.run()

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

PROJECT = "hello_world"
VERSION = "0.0.1"

sys = require("sys")
--代码区start

local LEDA= gpio.setup(12, 0, gpio.PULLUP)
local LEDB= gpio.setup(13, 0, gpio.PULLUP)

sys = require("sys")
--第一个任务

function task1()
    while true do
        log.info("task1","-----")
        print("system start")
        sys.wait(500) --延时500m秒,这段时间里可以运行其他代码
    end
end
--第二个任务
sys.taskInit(function()
    while true do
        log.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)
--代码区end

sys.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,--串口id
    115200,--波特率
    8,--数据位
    1--停止位
)
-- 收取数据会触发回调, 这里的"receive" 是固定值
uart.on(uartid, "receive", function(id, len)
    local s = uart.read(id, len)
    if #s > 0 then -- #s 是取字符串的长度
        if s == "on" then
            LEDA(1)
        elseif s == "off" then
            LEDA(0)
        end
        -- 如果传输二进制/十六进制数据, 部分字符不可见, 不代表没收到
        -- 关于收发hex值,请查阅 https://doc.openluat.com/article/583
        log.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
    -- end

end)

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 then
    wdt.init(9000)--初始化watchdog设置为9s
    sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
end

local spi_id,pin_reset,pin_dc,pin_cs,bl = 2,10,6,7,11

spi_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_custom

sys.taskInit(function()
    -- 开启缓冲区, 刷屏速度回加快, 但也消耗2倍屏幕分辨率的内存
    -- lcd.setupBuff()          -- 使用lua内存
    -- lcd.setupBuff(nil, true) -- 使用sys内存, 只需要选一种
    -- lcd.autoFlush(false)

    while 1 do
        lcd.clear()
        log.info("wiki", "https://wiki.luatos.com/api/lcd.html")
        -- API 文档 https://wiki.luatos.com/api/lcd.html
        if lcd.showImage then
            -- 注意, jpg需要是常规格式, 不能是渐进式JPG
            -- 如果无法解码, 可以用画图工具另存为,新文件就能解码了
            lcd.showImage(40,0,"/luadb/logo.jpg")
            sys.wait(100)
        end
        log.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 do
        lcd.clear()
        lcd.flush()
        
        log.info("wiki", "https://wiki.luatos.com/api/lcd.html")
        -- API 文档 https://wiki.luatos.com/api/lcd.html
        if lcd.showImage then
            -- 注意, jpg需要是常规格式, 不能是渐进式JPG
            -- 如果无法解码, 可以用画图工具另存为,新文件就能解码了
            lcd.showImage(40,0,"/luadb/logo.jpg")
            -- sys.wait(100)
        end
        log.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 then
    wdt.init(9000)--初始化watchdog设置为9s
    sys.timerLoopStart(wdt.feed, 3000)--3s喂一次狗
end

local spi_id,pin_reset,pin_dc,pin_cs,bl = 2,10,6,7,11

spi_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_custom

sys.taskInit(function()
    -- 开启缓冲区, 刷屏速度回加快, 但也消耗2倍屏幕分辨率的内存
    lcd.setupBuff()          -- 使用lua内存
    -- lcd.setupBuff(nil, true) -- 使用sys内存, 只需要选一种
    lcd.autoFlush(false)

    while 1 do
        lcd.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设置为9s
    sys.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") then
        wlan.connect(fskv.kv_get("wlan_ssid"), fskv.kv_get("wlan_passwd"))
        log.info( "fskv有联网数据")
        log.info( "正在连接请稍等******")
        --可能连接不成功,如果连接超时了(要有一个定时器计时),就让定时器打开"start_smartconfig"return -- 等联网就行了
    else
        log.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!!!!")
    -- end


    while 1 do

        sys.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 then
            log.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)

        end

        sys.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

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
### 回答1: Blinker ESP32C3 是一款基于 ESP32C3 开发的物联网解决方案,它能够帮助用户实现设备与云端的连接和通信。 Blinker ESP32C3 提供了丰富的功能,使得用户可以方便地构建智能设备并加入到物联网中。它支持多种传感器和执行器,例如温湿度传感器、开关、继电器等,可以满足各种不同的应用场景需求。 Blinker ESP32C3 的优点在于其简单易用的开发和部署过程。它提供了完整的软硬件方案和示例代码,开发者只需按照文档指引进行简单的配置和编程,即可实现设备的连接和数据交互。同时,Blinker ESP32C3 还提供了跨平台的移动端 APP 和 Web 控制台,用户可以通过这些工具来管理和控制设备。 另外,Blinker ESP32C3 还支持OTA(远程升级)功能,用户可以利用这一功能来远程升级设备的固件,无需人工干预。这个功能非常有用,可以帮助用户及时修复和改进设备的功能。 总之,Blinker ESP32C3 是一款功能强大且简单易用的物联网解决方案。它能够帮助用户快速构建智能设备,并实现设备与云端的连接和通信。无论是个人项目还是商业应用,Blinker ESP32C3 都能够提供可靠的解决方案。 ### 回答2: blinker esp32c3是一款基于ESP32-C3芯片的物联网开发板,具有内置WiFi和蓝牙功能。它采用了迅捷的双核处理器,可在较低的功耗下实现高性能的应用。该开发板还配备了丰富的外设接口和引脚,可连接各种传感器和执行器,实现灵活多样的物联网应用。 blinker esp32c3支持Blinker智能家居平台,通过与Blinker app配合使用,用户可以方便地实现物联网设备的远程控制和监测。同时,Blinker平台还提供了丰富的应用和功能模块,用户可以通过简单的拖拽操作就能快速定制个性化的物联网应用。 这款开发板还支持Arduino编程环境,开发者可以使用C++语言编写代码,实现各种功能。同时,ESP-IDF编程工具链也可以用于高级开发,提供了更丰富的底层功能和灵活性。 blinker esp32c3物联网应用开发领域有着广泛的应用,可以用于智能家居、工业自动化、农业监测、环境监测等各种场景。该开发板具有易用性、稳定性和高性能的特点,可以帮助开发者快速搭建物联网系统,实现智能化的控制和监测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值