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

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

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

相关文章

缓存实现方式

缓存是一个常见的话题,因为它对于提高应用程序性能至关重要。缓存是一种存储数据的临时地方,以便快速访问数据,减少对原始数据源(如数据库或文件系统)的访问次数,从而提高应用程序的响应速度和吞吐量。 Jav…

如何应对突发技术故障和危机:开发团队的应急策略

开发团队如何应对突发的技术故障和危机? 在数字化时代,软件服务的稳定性对于企业至关重要。然而,即使是大型平台,如网易云音乐,也可能遇到突发的技术故障。网页端出现502 Bad Gateway 报错,且App也无法正常…

如何在VMware ESXI中创建Linux虚拟机并实现异地SSH远程访问

目录 ⛳️推荐 前言 1. 在VMware ESXI中创建Ubuntu虚拟机 2. Ubuntu开启SSH远程服务 3. 安装Cpolar工具 4. 使用SSH客户端远程访问Ubuntu 5. 固定TCP公网地址 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不…

重塑“我店”平台:绿色积分引领的数字消费新纪元

在数字化转型的洪流中,“我店”平台凭借其创新的绿色积分体系异军突起,成为市场中的璀璨新星。本文将深度剖析“我店”的运营模式、市场效应及其如何通过绿色积分机制开创消费新潮流。 一、崛起之路与市场震撼力 自2021年盛夏在上海启航以来&#xff0c…

ffmpeg读取时长、读取视频格式

ffmpeg读取时长、读取视频格式 ffmpeg读取时长ffmpeg读取视频格式 ffmpeg读取时长 命令命令介绍具体用法ffmpeg -i查看视频时长ffmpeg -i 视频链接 or 视频路径 2>&1 | grep Duration ffmpeg读取视频格式 命令命令介绍具体用法ffmpeg -i查看视频时长ffmpeg -i 视频链接…

Java CompletableFuture:你真的了解它吗?

文章目录 1 什么是 CompletableFuture?2 如何正确使用 CompletableFuture 对象?3 如何结合回调函数处理异步任务结果?4 如何组合并处理多个 CompletableFuture? 1 什么是 CompletableFuture? CompletableFuture 是 Ja…

<数据集>商品条形码识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:3748张 标注数量(xml文件个数):3748 标注数量(txt文件个数):3748 标注类别数:1 标注类别名称:[Barcode] 序号类别名称图片数框数1Barcode37484086 使用标注工具&am…

探索Qotom Q51251OPS迷你电脑:功能与广泛应用

Qotom Q51251 OPS(开放可插拔规范)迷你电脑是一款设计紧凑且功能强大的设备,旨在满足不同领域的多样化需求。基于英特尔Core i5-12450H Alder Lake H处理器,这款设备不仅具备出色的计算性能,还提供了丰富的连接选项&am…

【MySQL】数据库基础(库的操作)

目录 一、MySQL安装、连接、修改密码操作 二、库的操作 2.1 创建数据库 2.2 字符集和校验规则 2.3 操控数据库 2.4 修改数据库 2.5 删除数据库 2.6 数据库的备份和恢复 2.7 查看连接情况 前情提要: 我的服务器操作系统是Ubuntu20.04,安装的是M…

【好书推荐】值得深读的EMC参考书籍

以下排序不分先后,都是好书! 书名:Electromagnetic Compatibility Engineering 作者:Henry W. Ott 这本书的讨论重点放在了经济高效的EMC设计上,并将数学的数量和复杂度保持在最低限度,辅以 250 多个带有…

Jenkins汉化配置详解

Window安装构建神器Jenkins Window安装构建神器Jenkins详细教程-CSDN博客DevOps,CI,CD,自动化简单介绍选择其他需要和Jenkins一起安装的服务,点击Next。https://blog.csdn.net/qq_37237487/article/details/141299623 登录进入J…

什么是BOM,有哪些分类?

一、什么是BOM? BOM是物料清单的缩写,也称为产品结构表或产品结构树。 BOM的作用主要是通过计算机辅助企业生产管理,使计算机能够识别企业所制造的产品构成和所有要涉及的物料。 在制造业中,BOM是一份详细记录制造某个产品时所…

cdr工具介绍之刻刀工具

在日常的生活当中,在很多时候我们会遇到各种各样的难题,但软件cdr他就是一个神奇的存在,因为他能帮助我们解决很多专业方面的的知识。尽管他的内容相比较其他的一些设计软件而言相对于较为少,但是他确实一个非常适合于平常的工作学…

在 uboot 中实现 UDP 协议

一、明确背景 uboot中有许多通信协议,像TFTP、NFS等,这些协议底层都是基于UDP协议来实现的,由于有一个板子在 uboot 段进行固件下载更新的需求,本来想基于TCP协议来实现自定义通信协议(TCP有自带的拥塞控制和重传机制&…

vue生命周期函数

文章目录 1.vue21.1 Vue 生命周期 和 生命周期的四个阶段1.2 Vue 生命周期函数(钩子函数) 2.vue3 1.vue2 1.1 Vue 生命周期 和 生命周期的四个阶段 (1)create指的是数据代理和数据监测的创建 1.2 Vue 生命周期函数(钩…

docker手动部署django项目Dockerfile编排-后端发布

1、首先创建一个桥接网络 docker network create auto 2、部署redis,提供celery的消息队列服务 docker run --name redis --restartalways -d --network auto -v redis:/data redis:alpine3、部署数据库 注意数据库账号密码 docker run --name mariadb --restartalways -d…

九泰智库 | 医械周刊- Vol.51

⚖️ 法规动态 白内障人工晶体类医用耗材集采落地,平均降幅60% 湖北省自7月10日起实施人工晶体类医用耗材集中带量采购政策,中选产品平均降幅达60%,显著减轻了患者经济负担。此举是国家组织医用耗材采购的一部分,旨在通过集中采购…

完美解决html2canvas + jsPDF导出pdf分页内容截断问题

代码地址:https://github.com/HFQ12333/export-pdf.git html2canvas jspdf方案是前端实现页面打印的一种常用方案,但是在实践过程中,遇到的最大问题就是分页截断的问题:当页面元素超过一页A4纸的时候,连续的页面就会…

c++ 谷歌的招聘 题解

题目描述 2004 年 7 月,谷歌在硅谷的 101 号公路边竖立了一块巨大的广告牌(如下图)用于招聘 内容超级简单,就是一个以 .com 结尾的网址,而前面的网址是一个 10 位素数,这个素数是自然常数 e 中最早出现的 10 位连续数字 能找出这个素数的人,就可以通过访问谷歌的这个网站进入…

CSS”叠叠乐“——WEB开发系列16

在现代前端开发中,CSS 是控制网页外观和布局的核心工具。随着项目的复杂化和样式规则的增加,CSS 层叠(cascade)变得更加重要。为了更好地管理和控制样式规则的应用,CSS 引入了层叠层(cascade layers&#x…