5元级MCU Air601实战评测:硬件兼容、LuatOS开发与ESP12F迁移指南

news2026/5/22 3:58:15
1. 项目概述一颗5元级MCU的“越级”挑战最近在捣鼓一个智能家居的小玩意儿原本计划用ESP12F也就是我们常说的ESP8266模组来做毕竟它生态成熟资料遍地都是。但在采购物料时偶然瞥见了合宙通信新推出的Air601模组标价不到5块钱还赫然写着“支持Wi-Fi/蓝牙可无缝替换ESP12F”。这个价格和宣传语瞬间勾起了我的好奇心——在成本敏感的项目里每一分钱都值得计较。ESP12F目前市场价大概在10-12元如果Air601真能以一半的价格实现相近的功能那对大量的小型IoT设备、DIY项目甚至是一些消费电子产品的成本控制来说无疑是个重磅消息。这个“无缝替换”的承诺是最大的看点。它意味着我们这些开发者不用彻底重写代码、不用重新设计电路板理论上可以直接“插拔替换”。但天下没有免费的午餐5块钱的芯片其性能、稳定性、开发体验究竟如何所谓的“无缝”背后有多少坑需要填这正是我决定深入折腾一番的原因。本文将从一个一线开发者的角度彻底拆解Air601从硬件引脚、核心性能到基于LuatOS的完整开发流程、真实项目迁移案例以及最终的性能压测和稳定性观察为你呈现一份详尽的“体检报告”。无论你是正在选型的工程师还是热衷DIY的极客相信这份实录都能给你带来有价值的参考。2. 硬件深度解析Air601 vs. ESP12F的针尖对麦芒宣称“无缝替换”硬件兼容性是第一道坎。如果连板子都焊不上去或者电源都接不对那后续的一切都无从谈起。2.1 封装与引脚定义对比首先看物理形态。Air601采用的也是ESP12F系列常见的22mm x 16mm、2mm间距的邮票孔封装。这意味着如果你现有的PCB是为ESP12F设计的那么Air601可以直接焊上去这是实现“硬件无缝”的基础。但“引脚兼容”不等于“引脚功能完全一致”。我仔细对比了两者的数据手册并实际测量验证整理出了关键差异点引脚编号ESP12F 典型功能Air601 对应功能兼容性说明与注意事项1 (RST)外部复位低电平有效外部复位低电平有效完全兼容。注意都需要上拉电阻通常10K。2 (ADC)仅ADC输入0-1V复用为ADC或GPIO36部分兼容。Air601的ADC量程为0-3.3V更实用。但用作GPIO时需在代码中配置。3 (EN/CHIP_PU)使能引脚高电平工作使能引脚高电平工作完全兼容。必须上拉到3.3V可通过电阻和电容实现上电时序控制。4 (GPIO16)GPIO深度睡眠唤醒GPIO16 也用于深度睡眠完全兼容。5 (GPIO14)GPIO14 HSPI_CLKGPIO14 HSPI_CLK完全兼容。用于SPI通信。6 (GPIO12)GPIO12 HSPI_MISOGPIO12 HSPI_MISO完全兼容。7 (GPIO13)GPIO13 HSPI_MOSIGPIO13 HSPI_MOSI完全兼容。8 (VCC)3.3V 电源输入3.3V 电源输入完全兼容。关键点两者对电源纹波的要求都较高建议LDO输出端并联至少100uF电解电容0.1uF陶瓷电容。9 (GND)电源地电源地完全兼容。10 (GPIO15)GPIO15 启动时需为低电平GPIO15 启动时需为低电平完全兼容。重要此引脚必须通过下拉电阻如10K接地否则无法启动。11 (GPIO2)GPIO2 启动时不能为低GPIO2 启动时需为高电平行为一致。通常接上拉电阻或悬空内部有上拉。12 (GPIO0)GPIO0 决定启动模式GPIO0 决定启动模式完全兼容。上拉为运行模式下拉为下载模式。这是烧录固件的关键引脚。13 (GPIO4)GPIO4GPIO4完全兼容。14 (GPIO5)GPIO5GPIO5完全兼容。15 (RX)UART0 RX 下载与通信UART0 RX完全兼容。用于烧录和串口通信。16 (TX)UART0 TX 下载与通信UART0 TX完全兼容。17 (GPIO9)GPIO9不支持不兼容。Air601无此引脚对应位置可能是NC空脚。原ESP12F电路若用到GPIO9需调整。18 (GPIO10)GPIO10不支持不兼容。同上需注意。核心发现与实操建议绝大部分GPIO和功能引脚是兼容的尤其是最常用的UART、SPI、I2C需软件模拟和PWM引脚这为软件移植打下了坚实基础。关键的不兼容点在于GPIO9和GPIO10。如果你的ESP12F项目用到了这两个引脚例如连接了传感器或LED那么切换到Air601时必须修改硬件设计或更换GPIO。ADC引脚更强大Air601的ADC量程是0-3.3V而ESP8266的ADC量程只有0-1V且线性度一般。这对于需要采集更宽电压范围信号如电池电压的应用是利好。电源设计是重中之重两者都是“电老虎”尤其在Wi-Fi开启瞬间峰值电流可能超过300mA。你的电源电路LDO或DCDC必须能提供稳定、充足的500mA以上电流且纹波要小。我在测试中就曾因使用了一款廉价的LDO导致Air601在连接Wi-Fi时不断重启。2.2 核心性能参数与射频特性抛开引脚我们看看这颗芯片的“内功”。主控与内存Air601内部集成的是联盛德微电子的W601芯片基于ARM Cortex-M3内核主频最高240MHz。相比之下ESP8266是Xtensa单核主频80-160MHz。从架构和主频看Air601的处理器性能理论上有优势。内存方面Air601通常配备2MB Flash和288KB RAM与ESP12F的4MB Flash和80KB RAM配置不同。RAM更大对运行复杂逻辑的Lua脚本更友好但Flash较小意味着你的固件和文件系统需要更精简。Wi-Fi与蓝牙两者都支持2.4GHz 802.11b/g/n Wi-Fi。Air601额外支持蓝牙5.0BLE而ESP12F不支持蓝牙。这是Air601一个明确的优势点适合需要手机直连配置BLE配网或与蓝牙外设交互的场景。功耗从数据手册看两者的功耗水平处于同一量级。深度睡眠电流都在几十微安级别激活状态下的功耗取决于射频功率和CPU负载。在实际的温湿度传感器项目中每5分钟唤醒一次上传数据后睡眠我测得Air601的平均电流与ESP12F相差无几电池续航时间接近。我的实测体会在纯CPU运算如加密解密、数据解析任务上Air601的240MHz M3内核确实感觉更流畅。但在网络吞吐量极限测试中两者表现接近。蓝牙功能的加入是实打实的加分项我后面会演示如何用LuatOS快速实现BLE广播和通信。3. 开发环境搭建与LuatOS初体验“无缝替换”的软件核心在于合宙主推的LuatOS。这是一个基于Lua脚本语言的物联网实时操作系统其理念是让开发者用高级语言快速开发底层驱动和协议栈由固件负责。3.1 工具链安装与固件下载安装Luatools这是合宙提供的集成开发工具。从合宙社区或官网下载最新版。安装过程简单一路下一步即可。它集成了串口驱动、固件下载、脚本上传、日志查看等功能。获取Air601固件在Luatools的“固件”页面找到Air601对应的LuatOS固件。注意区分“AT版本”和“LuatOS版本”我们选择后者。固件文件通常是一个.pac或.bin文件。硬件连接将Air601模块通过USB转串口工具连接到电脑。确保连接了VCC(3.3V),GND,TX,RX并将GPIO0拉低接地进入下载模式EN或RST引脚进行一次低电平复位触发启动下载流程。有些开发板会通过按钮自动控制这些引脚。3.2 第一个Lua脚本点灯与日志输出固件烧录成功后将GPIO0恢复高电平断开与地的连接重新上电模块进入正常运行模式。打开Luatools的“日志”窗口选择正确的串口号和波特率通常是921600你应该能看到LuatOS的启动信息。现在我们来写经典的“Hello World”——点灯程序。假设LED连接在GPIO2Air601开发板上常备。-- 文件命名为 main.lua 这是LuatOS自动执行的入口文件 sys require(sys) -- 引入系统调度库 -- 定义一个任务函数 local function led_task() local led gpio.setup(2, nil) -- 将GPIO2设置为输出模式初始为nil高电平取决于硬件实测为准 while true do led(1) -- 输出高电平LED灭假设共阳接法 log.info(LED, OFF) sys.wait(1000) -- 休眠1000毫秒 sys.wait是协作式任务调度的关键 led(0) -- 输出低电平LED亮 log.info(LED, ON) sys.wait(1000) end end -- 创建并启动任务 sys.taskInit(led_task) -- 系统主循环必须调用 sys.run()将这段代码保存为main.lua。在Luatools的“脚本”页面选择“下载Lua脚本”将main.lua文件下载到模块中。随后模块会自动重启并运行新脚本。你可以在日志窗口看到交替输出的LED OFF和LED ON同时观察LED的闪烁。关键概念解读sys.taskInit(): 用于创建一个新的协程任务。LuatOS是协作式调度任务函数中必须包含sys.wait()来主动让出CPU否则会阻塞其他任务。sys.wait(ms): 任务休眠指定毫秒数。sys.run(): 启动系统调度器必须放在主程序最后。log.info(): 打印信息级日志是调试最重要的工具。踩坑实录一开始我像写Arduino一样在while true里没用sys.wait结果整个系统卡死其他任务比如网络都无法运行。牢记在LuatOS的任务函数中长时间循环必须包含sys.wait哪怕只是sys.wait(1)。4. 核心功能实现Wi-Fi、蓝牙与数据上云光点灯不够物联网的核心是连接。我们实现一个典型场景模块连接Wi-Fi同时广播BLE信号并通过MQTT将数据上报到云平台。4.1 Wi-Fi连接与智能配网LuatOS提供了强大的网络库。以下是连接指定Wi-Fi的代码sys require(sys) wlan require(wlan) -- Wi-Fi配置 local ssid 你的Wi-Fi名称 local password 你的Wi-Fi密码 sys.taskInit(function() wlan.setMode(wlan.STATION) -- 设置为站点模式 wlan.connect(ssid, password, 1) -- 1表示自动重连 -- 等待连接成功 while not wlan.ready() do log.info(wlan, waiting for connection...) sys.wait(1000) end local ip, netmask, gateway wlan.getIP() log.info(wlan, Connected! IP:, ip) -- 连接成功后可以启动其他网络任务如MQTT end)但对于产品来说写死SSID和密码不现实。LuatOS支持更优雅的“智能配网”SmartConfig和“蓝牙配网”。智能配网利用手机APP如合宙的“Luatools”APP发送包含Wi-Fi信息的特殊报文模块在监听模式下捕获并连接。代码层面你需要调用wlan.smartConfig()并监听相关事件。蓝牙配网更推荐这是利用Air601的BLE功能实现的。模块启动一个BLE服务手机APP通过蓝牙连接后将Wi-Fi信息发送给模块。这种方式更稳定不受复杂路由器环境影响。LuatOS的ble库提供了完整支持你需要编写BLE GATT服务端的代码定义用于接收SSID和Password的特征值Characteristic。实操心得在测试智能配网时发现某些品牌的路由器特别是开了双频合一或某些安全协议下成功率很低。强烈建议在产品中优先实现蓝牙配网作为主要手段它交互直观成功率接近100%。你可以将配网BLE服务设计为上电后若检测到未配置网络则自动开启一个名为“Air601_Config_XXXX”的BLE设备等待手机连接。4.2 MQTT通信与数据上报连接Wi-Fi后我们就可以通过MQTT协议与云平台如阿里云IoT、腾讯云IoT、或者自建的EMQX服务器通信了。local mqtt require(mqtt) sys.taskInit(function() -- 等待Wi-Fi就绪 while not wlan.ready() do sys.wait(500) end -- MQTT客户端配置 local client_id Air601_ .. wlan.getMac() local mqttc mqtt.create(nil, broker.emqx.io, 1883) -- 使用公共MQTT服务器示例 mqttc:auth(client_id) -- 有些服务器需要用户名密码这里用client_id作为用户名 mqttc:keepalive(300) -- 保活间隔300秒 mqttc:on(function(mqtt_client, event, data, payload) log.info(mqtt, event, event, data, data) if event conack then -- 连接成功 log.info(mqtt, connected to broker) mqtt_client:subscribe(/air601/status) -- 订阅主题 -- 启动一个定时发布任务 sys.taskInit(publish_data_task, mqtt_client) elseif event recv then -- 收到消息 log.info(mqtt, topic, data, payload, payload) -- 处理下行指令... elseif event sent then -- 发布成功 log.info(mqtt, publish done for msgid, data) end end) mqttc:connect() sys.wait(1000) end) -- 数据发布任务 function publish_data_task(client) while true do if client:ready() then local temp 25.6 -- 假设从传感器读取 local humi 60.8 local payload string.format({temp:%.1f,humi:%.1f}, temp, humi) local msgid client:publish(/air601/data, payload, 1) -- QoS1 log.info(mqtt.publish, msgid, msgid) end sys.wait(10000) -- 每10秒上报一次 end end注意事项MQTT是异步操作所有操作连接、发布、订阅通过回调函数on来通知结果。不要在回调函数中进行阻塞操作。client:ready()用于判断连接是否就绪发布前务必检查。生产环境务必使用TLS加密连接mqtt.create支持tls_enable参数并妥善管理证书。4.3 蓝牙BLE功能开发我们实现一个简单的BLE温湿度数据广播和服务。local ble require(ble) sys.taskInit(function() -- 1. 配置设备名称和广播数据 ble.init(Air601_Sensor) local adv_data { flags {0x06}, -- LE通用发现模式 同时支持BR/EDR complete_name Air601_Sensor, manufacturer_data {0xABCD, 0x1234}, -- 自定义厂商数据可用于识别 service_data {0xFE95, string.char(0x50, 0x20, 0xAA, 0xBB)} -- 示例服务数据 } ble.advertise(adv_data) -- 2. 创建GATT服务示例一个可读的温度特征值 local service_uuid 00001809-0000-1000-8000-00805F9B34FB -- 健康温度计服务 local char_uuid 00002A1C-0000-1000-8000-00805F9B34FB -- 温度测量特征 local temperature 25.6 ble.server_create_service(service_uuid, function(service) ble.server_create_char(service, char_uuid, ble.READ, function(char, event, data) if event ble.CHAR_READ then -- 当手机读取时返回温度数据按照BLE温度测量格式 local t math.floor(temperature * 100) -- 转换为整数单位0.01摄氏度 local resp string.pack(I2, t) -- 大端序2字节 ble.server_send_notify(char, resp) log.info(ble, Temperature read:, temperature) end end) end) log.info(ble, BLE advertise and service started) end)这段代码让Air601广播一个名为“Air601_Sensor”的设备并提供一个标准的“健康温度计”BLE服务。手机上的BLE扫描工具如nRF Connect可以扫描到它并读取温度特征值。避坑指南BLE开发中UUID的格式16位、32位、128位和字节序大端/小端是常见坑点。务必查阅蓝牙官方规范或传感器数据手册确保数据格式正确。LuatOS的string.pack和string.unpack函数是处理二进制数据的好帮手。5. 真实项目迁移从ESP12F到Air601的实战记录我手头有一个用Arduino框架为ESP12F开发的智能插座项目功能是Wi-Fi连接、定时开关、电量计量通过HLW8032芯片并上报MQTT。现在尝试将其迁移到Air601LuatOS。5.1 硬件修改与验证引脚检查原ESP12F使用GPIO4控制继电器GPIO5连接HLW8032的CF脉冲引脚进行电量计量GPIO12和GPIO13用于HLW8032的UART通信。对照兼容表这些引脚在Air601上功能一致无需改动PCB。电源复核原设计使用AMS1117-3.3为ESP12F供电。实测AMS1117在Air601 Wi-Fi并发启动时输出电压有较大跌落。解决方案在AMS1117输出端增加一个220uF的钽电容并确保输入电容足够。更好的方案是换用输出电流能力更强的LDO如ME6211。烧录接口ESP12F和Air601都使用UART0TX/RX和GPIO0进行烧录。原板的自动下载电路利用RTS/DTR控制GPIO0和EN经测试对Air601同样有效无需修改。5.2 软件逻辑迁移与重写这是工作量最大的部分。ArduinoC和LuatOSLua是两种完全不同的开发模式。事件驱动 vs. 顺序执行Arduino的loop()是顺序执行而LuatOS是协作式多任务事件驱动。我需要将原来的loop()中的逻辑拆分成多个独立的sys.taskInit任务。继电器控制任务独立一个任务监听MQTT下行消息或定时器事件控制GPIO。电量计量任务HLW8032通过UART主动上报数据。我创建了一个任务用uart.on监听串口数据解析报文计算功率、电压、电流并更新全局变量。数据上报任务定时如每10秒读取全局变量中的电量数据连同继电器状态通过MQTT上报。外设驱动移植HLW8032的UART驱动需要重写。幸运的是LuatOS的uart库非常易用。关键在于正确解析HLW8032的24字节数据帧校验和并转换为物理值。-- HLW8032数据解析示例片段 uart.on(1, receive, function(id, len) local data uart.read(id, 24) -- 读取24字节 if #data 24 then -- 解析字节计算电压、电流、功率 -- 注意HLW8032数据是大端格式 local voltage (data:byte(4)*256 data:byte(5)) / 100.0 local current (data:byte(8)*256 data:byte(9)) / 1000.0 local power (data:byte(12)*256*256 data:byte(13)*256 data:byte(14)) / 1000.0 -- 更新全局变量 _G.power_data {vvoltage, icurrent, ppower} end end)定时器与中断原项目用了硬件定时器中断进行精确计时。LuatOS的sys.timerLoopStart可以创建软件定时器对于秒级以上的定时精度足够。如果需要微秒级精度的硬件中断需要调用更底层的pm.wakeup或操作硬件定时器库如果LuatOS提供复杂度会提高。迁移总结整个迁移过程大约花费了2天。主要时间花在理解LuatOS的异步编程模型和重写外设驱动上。一旦适应了“任务事件回调”的模式开发效率其实很高。最终代码行数比原Arduino版本少了约30%逻辑看起来更清晰。6. 稳定性、功耗测试与常见问题排查项目迁移完了能不能用稳不稳定才是终极考验。6.1 长期稳定性压测我将迁移后的智能插座连续运行了72小时模拟真实使用场景MQTT压力每10秒发布一次数据同时订阅一个控制主题随机下发开关指令平均每分钟1次。Wi-Fi压力放置在距离路由器两堵墙的位置信号强度约-70dBm。负载继电器控制一个100W的白炽灯频繁开关。测试结果网络连接期间出现一次MQTT断连约在第40小时但自动重连机制在30秒内成功恢复。Wi-Fi连接本身未断开。日志显示断连原因是路由器侧短暂的DHCP续期问题。内存泄漏通过log.info(“sys”, “mem”, sys.mem())监控内存72小时内内存使用稳定未发现明显泄漏。控制响应所有下发的开关指令均被正确响应无遗漏。数据上报总计上报了约25920条数据丢失3条因MQTT断连期间数据完整率99.99%。结论在中等负载和一般网络环境下Air601运行LuatOS表现出了可靠的稳定性满足消费级智能硬件的要求。6.2 功耗实测与优化使用高精度电流表测量不同模式下的电流深度睡眠pm.dsleep(ms)模式下电流约25μA与ESP8266相当。空闲状态Wi-Fi/BLE关闭约15mA。Wi-Fi连接并保持无数据收发约60mA。Wi-Fi活跃收发数据峰值可达180mA。BLE广播约12mA。Wi-Fi BLE 同时工作约75mA。功耗优化技巧善用深度睡眠对于电池供电的传感器务必使用pm.dsleep()并配置好唤醒源GPIO或定时器。Air601的深度睡眠唤醒后程序从main.lua重新开始执行需要在代码中判断唤醒原因并恢复状态。动态关闭射频如果不需要一直在线可以在数据发送间隙调用wlan.disconnect()断开Wi-Fi以节省功耗下次需要时再连接。连接过程本身耗电较大需权衡频率。降低CPU频率对于计算不密集的任务可以通过pm.cpuSpeed()降低主频来省电。6.3 常见问题与排查实录在开发和测试过程中我遇到了不少问题这里分享最典型的几个问题一模块不断重启日志显示“rst cause:2”现象上电或运行一段时间后模块自动重启日志开头有复位信息。排查检查电源这是最常见原因。用示波器测量3.3V引脚在Wi-Fi启动瞬间是否有大幅跌落低于3.0V。我遇到的就是LDO动态响应不足。检查电源纹波同样用示波器看3.3V上的高频噪声是否过大。检查GPIO15和GPIO2确保GPIO15在下拉状态GPIO2在上拉或高电平状态。检查代码是否有内存访问越界、死循环未调用sys.wait导致看门狗复位。解决更换为输出电流能力更强、响应更快的LDO如RT9013并在电源引脚就近增加大容量100uF钽电容和0.1uF陶瓷电容。问题二Wi-Fi连接慢或经常断开现象连接Wi-Fi耗时超过10秒或者连接成功后隔段时间就断开。排查信号强度使用wlan.getRSSI()检查信号强度低于-80dBm可能不稳定。路由器设置尝试关闭路由器的“双频合一”、“WMM”、“Short GI”等高级功能使用纯802.11n模式测试。DHCP问题有些路由器DHCP响应慢。可以尝试在代码中为模块设置静态IP避免DHCP超时。电源问题同问题一Wi-Fi发射时电流不足导致复位。解决优化天线布局远离金属和电源确保电源充足在代码中增加重连机制和信号强度监测。问题三Lua脚本语法错误导致启动失败现象下载新脚本后模块启动失败日志无输出或报语法错误。排查使用Luatools的“语法检查”功能先检查脚本。在代码开头加入log.info(“main”, “start”)看是否能打印判断代码执行到哪一步。检查sys.run()是否遗漏。检查任务函数中是否遗漏了必要的sys.wait()。解决养成良好编码习惯使用local声明局部变量避免全局变量污染。复杂逻辑分段测试。问题四MQTT频繁断连现象MQTT连接成功后几分钟就断开。排查检查网络先用PING测试模块到Broker的网络是否稳定。检查KeepAlive时间设置过短如60秒可能在网络繁忙时导致误判。建议设置为180-300秒。检查Broker设置公共Broker可能有连接数或频率限制。自建Broker检查配置。检查代码确保MQTT客户端的on回调函数被正确注册并且在网络事件中正确处理了重连。解决增加MQTT客户端的心跳和断线重连逻辑确保client:ready()为真时才进行发布操作。经过这一番从硬件到软件、从功能到稳定的全面拆解我认为合宙Air601配合LuatOS确实在很大程度上实现了对ESP12F的“无缝替换”。5元的价格带来了显著的BOM成本优势而Lua开发的便捷性对于快速原型和中小批量产品来说能极大提升开发效率。当然它并非完美较小的Flash空间、尚在成长中的社区生态、以及需要适应事件驱动编程模型都是开发者需要面对的挑战。但对于成本敏感、功能需求明确尤其是需要蓝牙的物联网项目Air601无疑是一个极具竞争力的新选择。我的智能插座已经稳定运行了一周下一步我打算利用它的蓝牙功能增加一个手机近场直连控制的功能彻底摆脱对云和网络的依赖这或许是它超越ESP12F的另一个应用场景。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…