esp32c3 luaos

news2024/9/22 11:36:56

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

文章目录

  • 前言
  • 一、介绍
  • 二、相关介绍
    • 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"
--代码区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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2068818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu 20.04安装中文输入法

本文旨在详细介绍在Ubuntu 20.04操作系统中安装中文输入法的步骤和方法。我们将从选择适合的中文输入法软件、下载与安装过程、配置输入法设置以及解决可能遇到的问题等方面展开讲解,帮助用户轻松实现在Ubuntu 20.04系统下流畅输入中文的需求。无论你是Ubuntu的新手…

东方银行--用 MinIO 和 Dremio 替代 Hadoop

我们的客户是一家总部位于日本的全球金融机构,最近与MinIO和Dremio一起完成了一个雄心勃勃的Hadoop替换项目。你可以在Subsurface的这个演讲中看到他们介绍它,但我们认为我们也会把它写下来。与大多数银行一样,该公司已经建立了大量的Hadoop足…

游戏开发设计模式之状态模式

目录 状态模式在Unity中的具体实现案例是什么? 如何在游戏开发中有效地结合状态模式与享元模式以优化资源使用? 状态模式与其他设计模式(如观察者模式、策略模式)结合使用的实际例子有哪些? 在处理复杂状态变化时&…

day19:生成器、yield表达式、三元表达式、生成式和函数的递归

一、生成器 1. 如何得到自定义的迭代器 【方法一】:在函数内一旦存在yield关键字,调用函数并不会执行函数体代码,会返回一个生成器对象,生成器即自定义的迭代器。 【方法二】:生成器表达式 反问:为什么自…

信息系统安全等级划分及其重要性:构建安全基石

在信息化社会,数据已成为企业与国家的重要资产,其安全防护日益受到重视。我国的“信息系统安全等级保护制度”正是在这一背景下应运而生,旨在通过等级划分,为不同级别的信息系统提供适配的安全保护措施,确保信息资产的…

Camera篇(一)ov13850调试

ov13850一千三百万像素&#xff0c;必须离线模式&#xff0c;所以ISP TDM配置离线 menuconfig 中需要将ISP TDM功能打开&#xff0c;同时开启WDR 配为&#xff08;*&#xff09; dts配置 work_mode 一律配1 &vind0 {csi_top <360000000>;csi_isp <322000000…

基于x86 平台opencv的图像采集和seetaface6的眼睛状态检测(睁眼,闭眼)功能

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 配置资源文件3.2 验证功能一、概述 本文档是针对x86 平台opencv的图像采集和seetaface6的眼睛状态检测(睁眼,闭眼)功能,opencv通过摄像头采集视频图像,将采集的视频图像送给seetaface6的眼睛…

【C++ Primer Plus习题】3.4

问题: 解答: #include <iostream> using namespace std;const int DAY_TO_HOUR 24; const int HOUR_TO_MIN 60; const int MIN_TO_SEC 60;int main() {long seconds 0,record0;int days 0, hours 0, minutes0;cout << "请输入秒数:";cin >>…

进阶-5.锁

锁 1.概述2.全局锁3.表级锁3.1 介绍3.2 表锁3.3 元数据锁3.4意向锁 4.行级锁 1.概述 分类 按锁的粒度分类&#xff1a; 全局锁&#xff1a;锁住数据库中所有表表级锁&#xff1a;每次操作锁定整张表行级锁&#xff1a;每次操作锁定对应的行数据 2.全局锁 介绍 全局锁就是对…

【经验】linux下cuda的更换

linux下cuda的更换 查看当前cuda和cudnn的版本 nvcc -Vcudnn版本 cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2下载对应版本的cuda 查看驱动版本535.54.03 下载对应的cuda版本 版本查看https://docs.nvidia.com/cuda/cuda-toolkit-release-notes/index.htm…

Revisiting PM-Based B+-Tree With Persistent CPU Cache——论文泛读

TPDS 2024 Paper 论文阅读笔记整理 问题 持久存储器&#xff08;PM&#xff09;具有接近DRAM的性能和数据持久性&#xff0c;配备PM的平台支持异步DRAM刷新&#xff08;ADR&#xff09;功能[2]&#xff0c;确保PM DIMM的内容以及已到达内存控制器的写挂起队列&#xff08;WPQ…

深度学习 --- VGG16卷积核的可视化(JupyterNotebook实战)

VGG16卷积核的可视化 在前一篇文章中&#xff0c;我对VGG16输入了一张图像&#xff0c;并实现了VGG16各层feature map的可视化。深度学习 --- VGG16各层feature map可视化(JupyterNotebook实战)-CSDN博客文章浏览阅读615次&#xff0c;点赞13次&#xff0c;收藏15次。在VGG16模…

123-域防火墙入站出站规则不出网隧道上线组策略对象同步

参考&#xff1a;【内网安全】 域防火墙&入站出站规则&不出网隧道上线&组策略对象同步_对公司的邮件服务器建立防火墙规则 入站出战-CSDN博客 单机-防火墙-限制端口出入站 熟悉常见主机配置不出网的方式 1、入站&出站&连接安全 2、域&专用&公网…

【采集软件】用Python开发的小红薯详情批量采集工具,含笔记正文、转评赞藏等

一、背景介绍 1.1 爬取目标 用python开发的爬虫采集软件&#xff0c;可自动按笔记链接抓取笔记的详情数据。 为什么有了源码还开发界面软件呢&#xff1f;方便不懂编程代码的小白用户使用&#xff0c;无需安装python&#xff0c;无需改代码&#xff0c;双击打开即用&#xff…

本地部署docker文档

由于访问 https://docs.docker.com/ 文档慢&#xff0c;直接本地部署官方文档 如果不想执行以下操作&#xff0c;也可以直接使用官方文档仓库地址提供的 Dockerfile 和 compose.yaml 进行操作 以下操作环境为Windows系统&#xff0c;根据 Dockerfile 相关操作来生成 html 页面…

二叉树【1】

操作 新建节点&#xff08;new&#xff09; 新建一个值为v的节点&#xff0c;左右孩子NULL 查找 void查找函数 { 递归边界&#xff1a;NULL&#xff0c;然后退出 &#xff08;return&#xff1b;&#xff09; 查找左子树 查找柚子树 } 插入 void 插入函数 {…

Vue表单元素绑定:v-model 指令

Vue 指令系列文章&#xff1a; 《Vue插值&#xff1a;双大括号标签、v-text、v-html、v-bind 指令》 《Vue指令&#xff1a;v-cloak、v-once、v-pre 指令》 《Vue条件判断&#xff1a;v-if、v-else、v-else-if、v-show 指令》 《Vue循环遍历&#xff1a;v-for 指令》 《Vue事件…

NPM:配置阿里镜像库

1、配置阿里云镜像源 #查看当前使用的镜像地址命令 npm config get registry#设置阿里镜像源 npm config set registry http://registry.npmmirror.com 这里要注意下&#xff0c;之前的源镜像地址 https://registry.npm.taobao.org/ 已经不能用了&#xff0c;这里要更改为新地…

80页PPT数据中台应用技术实施方案

本文资料完整版81页PPT&#xff0c;下载完整PPT资料&#xff0c;知识星球APP搜索【智慧方案文库】&#xff0c;下载“数据中台”合集资料&#xff0c;以及8800份解决方案 数据中台设计的方法 (1)基于面向服务的架构方法&#xff08;SOA&#xff09; 基于面向服务的架构方法 …

spring整合redis

1.导入依赖 <!-- spring-data-redis 依赖--> <dependency><groupId>org.springframework.data</groupId><artifactId>spring-data-redis</artifactId><version>2.7.18</version> </dependency> <dependency><…