嵌入式人别再瞎折腾了!这8个开源项目,解决按键/队列/物联网所有痛点,小白也能抄作业

你是不是也有过这样的崩溃时刻:想做个按键控制,结果长按、连击、组合键的逻辑写了200行if-else,最后还时不时串键;想缓存串口数据,自己写的队列要么溢出要么丢包,调试到半夜怀疑人生;想搞个智能家居,连网、控设备、做界面绕得头皮发麻……

其实嵌入式开发早有“现成答案”!GitHub上藏着一堆超实用的开源项目,从单个功能模块到完整硬件方案,全是前辈们踩坑后的精华。今天就把这些“省时神器”扒出来,不用你再从零造轮子,看完就能直接用!

一、实用软件模块篇:解决单个功能的“小而美”

先从最基础的功能模块说起——这些项目就像厨房的“预制菜”,不用你从头切菜调味,拆开就能怼进代码里,专治各种“重复造轮子”。

1. MultiButton:把按键逻辑“打包”的神器

痛点:处理按键时,光是“单击、长按、连击、组合键”就得写一堆状态判断,稍微复杂点就容易出bug,比如长按没触发,反而误判成两次单击。
项目地址:https://github.com/0x1abin/MultiButton
它能帮你做什么
不管是单个按键的“按下/松开”,还是长按后的“持续触发”,甚至是多个按键同时按的“组合键”,这库都帮你封装好了。你不用管底层怎么扫描、怎么计时,只要告诉它“按这个键要触发什么动作”就行。
比如想实现“按一下开灯,长按3秒调光”,以前得自己记按下时间、判断时长,现在直接绑定两个事件,几行代码搞定。

简单用例(一看就懂)

#include "multi_button.h"
// 先定义两个按键(比如一个控制灯,一个控制风扇)
struct Button light_btn, fan_btn;// 按键触发时要做的事(回调函数)
void light_btn_callback(void *btn) {struct Button *handle = (struct Button *)btn;// 看当前是哪种按键事件switch(handle->event) {case PRESS_DOWN:  // 按下printf("灯的按键按下去了\n");break;case LONG_PRESS_START:  // 长按开始(比如3秒)printf("长按开始,灯开始调光\n");break;}
}// 初始化按键
void setup() {// 绑定按键:light_btn是哪个按键,read_light_btn_GPIO是读GPIO的函数button_init(&light_btn, read_light_btn_GPIO, 0);// 给按键绑定事件:按下时触发light_btn_callbackbutton_attach(&light_btn, PRESS_DOWN, light_btn_callback);// 启动按键监测button_start(&light_btn);
}// 主循环里每隔5ms扫一次(不用改)
void main_loop() {button_ticks();
}

适用场景:遥控器、智能开关、带按键的传感器,只要涉及按键操作,它都能扛。

2. QueueForMcu:单片机的“快递柜”,数据再也不丢了

痛点:中断里接收到数据,主循环还没处理完,新数据又来了——要么丢数据,要么程序崩;多个传感器同时发数据,顺序全乱,根本没法处理。
项目地址:https://github.com/xiaoxinpro/QueueForMcu
它能帮你做什么
这东西就是单片机里的“快递柜”:数据来了先存进“柜子”里(队列),主循环什么时候有空,再按顺序一个个取出来处理。哪怕中断里数据来得再快,只要“柜子”没满,就不会丢;而且支持中断和主循环同时操作,不用担心“抢数据”的问题。

简单用例(比如处理串口数据)

#include "queue.h"
// 定义一个“快递柜”:32个位置,存uint8_t类型的数据
#define QUEUE_SIZE 32
uint8_t queue_buffer[QUEUE_SIZE];  // 柜子的“格子”
Queue_t uart_queue;  // 队列本身// 初始化队列(相当于把快递柜搭好)
void setup() {Queue_Init(&uart_queue, queue_buffer, QUEUE_SIZE);
}// 串口接收到数据的中断函数(数据来了先存柜子)
void uart_rx_handler(uint8_t data) {// 先看柜子满没满,没满就存进去if (!Queue_IsFull(&uart_queue)) {Queue_Put(&uart_queue, data);}
}// 主循环里慢慢处理数据
void main_loop() {uint8_t data;// 只要柜子里有数据,就一个个取出来处理while (!Queue_IsEmpty(&uart_queue)) {if (Queue_Get(&uart_queue, &data)) {process_data(data);  // 你的数据处理函数}}
}

适用场景:串口数据缓存、按键事件排队、多个传感器数据排序,总之只要涉及“数据暂时存起来,后面再处理”,它就是刚需。

3. StateMachine:给设备装“导航”,状态再也不混乱

痛点:做个智能门锁,要处理“锁定、解锁中、已解锁、报警”这几个状态,结果状态之间跳来跳去,比如“已解锁”时按错密码,本该进报警,结果还在解锁状态——说白了就是没管好“状态转换”。
项目地址:https://github.com/kiishor/UML-State-Machine-in-C
它能帮你做什么
这东西就是设备的“导航系统”,按照UML标准帮你定义“哪些状态能转去哪些状态”,比如“锁定状态”只能接收“密码正确(转解锁中)”或“密码错误(转报警)”,其他状态触发不了,从根源上避免混乱。而且支持嵌套状态(比如“解锁中”还能分“验证密码”“电机转动”),复杂逻辑也能理清。

简单用例(智能门锁)

// 先定义门锁的所有状态
typedef enum {STATE_LOCKED,    // 锁定STATE_UNLOCKING, // 解锁中STATE_UNLOCKED,  // 已解锁STATE_ALARM      // 报警
} door_state_t;// 定义触发状态变化的事件
typedef enum {EVENT_PASSWORD_CORRECT,  // 密码正确EVENT_PASSWORD_WRONG,    // 密码错误EVENT_TIMEOUT            // 超时(比如解锁后没关门)
} door_event_t;// 定义“状态转换规则”:相当于导航地图
const state_transition_t door_transitions[] = {{STATE_LOCKED, EVENT_PASSWORD_CORRECT, STATE_UNLOCKING},  // 锁定→密码对→解锁中{STATE_LOCKED, EVENT_PASSWORD_WRONG, STATE_ALARM},        // 锁定→密码错→报警{STATE_UNLOCKING, EVENT_TIMEOUT, STATE_UNLOCKED},         // 解锁中→超时→已解锁// 更多规则...
};

适用场景:智能门锁、洗衣机控制、工业设备流程(比如注塑机的“加热→注塑→冷却”),只要设备有多个状态,用它就能避免“状态乱跳”。

二、完整项目篇:拿过去就能搭硬件的“成品方案”

如果说模块是“零件”,那这部分就是“半成品”——从硬件到软件都给你搭好了,你改改参数、换个传感器,就能做成自己的项目。

1. TinyGameEngine:在STM32上玩“复古游戏”,小白也能当游戏开发者

痛点:想在单片机上做个贪吃蛇,结果要自己写像素绘制、按键响应、碰撞检测,光是画个“蛇头”就得调半天,最后还卡得不行。
项目地址:https://github.com/juj/fbcp-ili9341
它能帮你做什么
这是个专门给STM32用的“游戏引擎”,相当于把“画画、音效、按键、碰撞”这些游戏必备功能都做好了。你不用管“怎么在LCD上画个方块”“怎么判断蛇撞到墙”,只要写“蛇怎么动、食物在哪出现”的逻辑就行,甚至还支持存档(用EEPROM存游戏进度)。

它能做哪些游戏

  • 贪吃蛇:经典中的经典,引擎帮你处理蛇身跟随、食物刷新、碰撞死亡;
  • 俄罗斯方块:方块下落、旋转、消除的逻辑都封装好了,你只管调速度;
  • 打砖块:反弹球的物理碰撞、砖块消除效果,直接用现成的接口。

适合人群:想练手STM32、又想做个“能玩的项目”的新手,做完能当摆件,成就感拉满。

2. HomeAutomation:自己搭智能家居,不用再买“米家全家桶”

痛点:想做智能家居,买现成的设备又贵又不灵活,自己做又不知道怎么连传感器、怎么控灯、怎么搞手机界面——总之就是“无从下手”。
项目地址:https://github.com/home-assistant/core
它能帮你做什么
这是个完整的智能家居系统方案,相当于给你一套“搭建手册”:用ESP32当“大脑”(中央控制器),连接温湿度、光照、烟雾传感器(眼睛),控制继电器(灯/插座)、舵机(门锁)、LED(氛围灯)(手脚),还支持WiFi、蓝牙、Zigbee三种通信方式,手机能通过Web界面实时看数据、控设备,甚至能存传感器数据(比如记录一周的温湿度变化)。

核心功能模块

  • 设备抽象层:不管是灯还是插座,都用统一的“初始化、读状态、控制”接口,不用重复写代码;
  • 场景自动化:比如“光照低于200lux时自动开灯”“温湿度高于28℃时自动开风扇”,自己设规则就行。

适合人群:想折腾智能家居、又想“自定义功能”的玩家,比如你想做个“烟雾报警时自动开窗”,现成设备做不到,但这个项目能改。

3. CanBus-Triple:CAN总线调试神器,汽车/工业设备都能用

痛点:做汽车电子或工业控制,要调试CAN总线(比如读汽车OBD数据、调试工业CANopen设备),买专业调试器要几千块,性价比太低;自己写代码读CAN帧,又看不到实时数据,没法分析。
项目地址:https://github.com/CANBus-Triple/CANBus-Triple
它能帮你做什么
这是个开源的CAN总线分析仪,相当于“几百块实现几千块设备的功能”:能实时捕获CAN帧(看总线上发了什么数据)、自定义发送CAN帧(模拟设备发指令)、解析常见协议(比如汽车的OBD-II、工业的CANopen),还能通过WiFi远程控制(不用插电脑,手机也能看数据),甚至能过滤特定ID的数据(只看你关心的设备)。

应用场景

  • 汽车诊断:读汽车的转速、水温、故障码(OBD-II协议);
  • 工业调试:调试CANopen设备(比如电机、传感器),看数据有没有传对;
  • 逆向工程:分析未知的CAN协议(比如某设备的控制指令)。

适合人群:做汽车电子、工业控制的开发者,能省不少调试成本。

三、物联网项目篇:让设备“连上网”的必备工具

物联网项目的核心是“连网+传数据”,这部分项目就是帮你解决“怎么连、怎么传、怎么省电”的问题。

1. ESP32-IoT-Platform:物联网开发“全家桶”,连网传数据不用愁

痛点:做物联网项目,最烦的就是“连网配置”(WiFi怎么连、蓝牙怎么配对)、“云端通信”(MQTT怎么发数据、HTTP怎么调接口)、“手机界面”(怎么搞个APP控设备)——这些事儿占了80%的开发时间。
项目地址:https://github.com/espressif/esp-idf
它能帮你做什么
这是乐鑫(ESP32的厂商)官方的物联网平台,相当于“把物联网开发的所有坑都填好了”:支持ESP32/ESP8266两种硬件,WiFi、蓝牙、LoRa三种连网方式,MQTT、HTTP、CoAP三种云端通信协议,甚至还给你现成的Android/iOS APP模板、Web管理界面——你只管读传感器数据、控执行器,剩下的“连网、传数据、做界面”都不用自己写。

简单用例(环境监测站)

// 定义要传的环境数据
typedef struct {float temperature;  // 温度float humidity;     // 湿度uint16_t pm25;      // PM2.5uint16_t co2;       // CO2uint32_t timestamp; // 时间戳
} env_data_t;// 数据采集任务(每隔1分钟发一次数据到云端)
void sensor_task(void *pvParameters) {env_data_t data;while(1) {// 读传感器数据(你只要实现这部分)data.temperature = read_temperature();data.humidity = read_humidity();data.pm25 = read_pm25();data.co2 = read_co2();data.timestamp = get_timestamp();// 发数据到云端(现成接口,不用自己调MQTT)mqtt_publish("sensor/env", &data, sizeof(data));// 等1分钟再采集vTaskDelay(pdMS_TO_TICKS(60000));}
}

适合人群:刚接触物联网的新手,不用再逐个学“WiFi配置”“MQTT协议”,直接用现成的接口。

2. PowerManagement:让设备“多活几天”,低功耗优化神器

痛点:做电池供电的设备(比如无线传感器、智能门锁),明明用的是锂电池,结果几天就没电了——不是电池不行,是没做好功耗优化,设备一直“醒着”耗电。
项目地址:https://github.com/espressif/esp-idf/tree/master/examples/system/deep_sleep
它能帮你做什么
这是ESP32的低功耗管理方案,相当于教你怎么让设备“该睡就睡,该醒就醒”:支持“深度睡眠”(功耗低到微安级,相当于设备“冬眠”)、“定时唤醒”(比如每隔10分钟醒一次,读数据后再睡)、“事件唤醒”(比如有人按按键,设备才醒),还能动态调节CPU频率(负载低时降频省电)、按需开启外设(不用的传感器就关掉)。

简单用例(低功耗传感器)

#include "esp_sleep.h"
#include "esp_wifi.h"// 进入低功耗模式(睡sleep_time_ms毫秒后醒)
void enter_power_save_mode(uint32_t sleep_time_ms) {// 先关掉WiFi(联网最耗电)esp_wifi_stop();// 关掉不用的外设(比如LED、传感器)disable_unused_peripherals();// 配置唤醒源:定时唤醒(睡够时间就醒)+ 外部中断唤醒(比如按按键)esp_sleep_enable_timer_wakeup(sleep_time_ms * 1000);  // 定时唤醒esp_sleep_enable_ext1_wakeup(GPIO_SEL_0, ESP_EXT1_WAKEUP_ANY_HIGH);  // 按键唤醒// 进入深度睡眠(相当于“冬眠”)esp_deep_sleep_start();
}// 唤醒后处理(看是被什么唤醒的)
void handle_wakeup() {esp_sleep_wakeup_cause_t wakeup_reason = esp_sleep_get_wakeup_cause();switch(wakeup_reason) {case ESP_SLEEP_WAKEUP_TIMER:  // 定时唤醒printf("到点了,读传感器数据\n");collect_sensor_data();  // 读数据break;case ESP_SLEEP_WAKEUP_EXT1:  // 按键唤醒printf("有人按按键,处理用户操作\n");handle_user_input();  // 处理按键break;}
}

适合人群:做无线、电池供电设备的开发者,比如无线温湿度传感器、智能门锁,用它能让电池寿命翻几倍。

四、创意项目篇:好玩又实用的“小发明”模板

不想做枯燥的工业项目?这两个创意项目能让你把单片机玩出花,做完还能用在生活里。

1. MusicBox:自己做个音乐盒,能播SD卡里的歌

痛点:想买个音乐盒,要么只能放固定的几首歌,要么音质差;想自己做,又不知道怎么读SD卡、怎么解码MP3、怎么输出音频——一堆音频相关的坑。
项目地址:https://github.com/TheRemote/PicoMusicBox
它能帮你做什么
这是个基于单片机的音乐盒项目,相当于给你一套“音乐播放解决方案”:支持读SD卡里的MP3/WAV文件(不用自己写文件系统)、PWM/DAC两种音频输出(音质可选)、OLED显示歌名/进度(不用自己画界面)、按键控制播放/暂停/切歌/调音量,甚至还能调音调(比如把歌变调,搞点有趣的效果)。

硬件要求
单片机(比如树莓派Pico、STM32)+ SD卡模块 + OLED屏 + 音频模块(比如MAX98357),成本也就几十块,比买现成的音乐盒灵活多了。

玩法
可以做成“生日音乐盒”,存上朋友喜欢的歌;也能做成“床头音响”,连手机蓝牙播歌(稍微改改代码就行)。

2. SmartClock:不止看时间,还能当“家庭小助手”

痛点:普通时钟只能看时间,想知道温湿度得再买个传感器,想设闹钟得用手机——东西越堆越多,桌面乱糟糟。
项目地址:https://github.com/witnessmenow/ESP32-Trinity
它能帮你做什么
这是个多功能智能时钟,相当于“把时钟、温湿度计、天气预报、闹钟、氛围灯”整合到一起:用ESP32做主控,支持NTP网络时间同步(不用手动调时间)、OLED/LCD显示时间/温湿度/天气(不用自己爬天气接口)、自定义音乐闹钟(存喜欢的歌当铃声)、RGB氛围灯(能跟着时间/天气变颜色),还能通过手机APP远程设置(比如在公司设好家里的闹钟)。

核心功能

  • 时间:NTP同步,精确到秒,支持12/24小时制;
  • 环境:显示温湿度、光照强度(接个光照传感器就行);
  • 天气:连网获取未来3天天气预报(支持国内城市);
  • 闹钟:支持多个闹钟,铃声可以是MP3文件;
  • 氛围灯:RGB灯效,比如晚上自动变暗,早上渐变亮。

适合人群:想做个“实用又好看”的桌面摆件,同时练手ESP32联网、显示、传感器的新手。

五、调试工具篇:让调试效率翻倍的“辅助神器”

嵌入式开发“三分写代码,七分调bug”,好的工具能让你少走很多弯路,比如下面这个串口波形显示工具。

SerialPlotter:串口数据“可视化”,再也不用对着数字发呆

痛点:调试传感器时,串口打印一堆数字(比如温湿度、ADC值),想知道数据变化趋势,得自己把数字抄下来画表格——眼睛都看花了,还容易看错。
项目地址:https://github.com/devinaconley/arduino-plotter
它能帮你做什么
这是个串口数据可视化工具,相当于“把数字变成波形图”:你只要按固定格式从串口发数据(比如“时间戳:温度:湿度:光照”),它就能自动生成多通道波形图,不同数据用不同颜色区分,还能缩放时间轴、看实时数值、导出数据(比如把一天的温湿度波形存成文件),甚至支持“触发捕获”(比如只有温度超过30℃时才显示波形)。

数据格式示例

// 按“时间戳:通道1:通道2:通道3”的格式发数据
void send_plot_data() {static uint32_t timestamp = 0;  // 时间戳(每次加1)// 比如发“时间戳:ADC0电压:ADC1电压:温度”printf("%lu:%.2f:%.2f:%.2f\n",timestamp++,  // 时间戳read_adc(0)*3.3/4095,  // ADC0电压(12位ADC,参考电压3.3V)read_adc(1)*3.3/4095,  // ADC1电压read_temperature()     // 温度);
}

适合场景:调试传感器(看数据是否稳定)、PID控制(看输出是否收敛)、电源电压监测(看是否有波动),总之只要涉及“连续数据变化”,用它调试效率能翻几倍。

最后说两句

其实嵌入式开发不用“死磕”,很多前辈已经把难走的路铺好了——这些开源项目不仅能帮你省时间,更重要的是能让你学习“优秀的代码逻辑”(比如队列的实现、状态机的设计)。

如果觉得某个项目有用,不妨去GitHub给作者点个Star(开源精神的鼓励),遇到问题也能看Issues里的讨论,甚至自己提PR贡献代码——嵌入式圈子的快乐,不就是“互相抄作业,一起进步”嘛~

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

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

相关文章

C++篇(7)string类的模拟实现

一、string的成员变量string和数据结构中的顺序表类似,本质上可以理解成字符顺序表,其成员变量仍然是_str,_size和_capacity。但是,C标准库里面也有一个string,和我们要自己实现的string类冲突了,该如何解决…

【直接套模板】如何用 Web of Science 精准检索文献?

在文献检索的时候遇到一些问题,单独使用关键词检索出来的文章数量太多,如果是多加一些限定词,又什么都检索不到:比如我明明知道某篇论文已经发表,但在 Web of Science (WoS) 里却检索不到。这其实和检索式的写法密切相…

HTTP 协议:从原理到应用的深度剖析

一、什么是HTTP协议?HTTP协议,全称 Hyper Text Transfer Protocol(超⽂本传输协议)的缩写,是⽤于服务器与客户端浏览器之间传输超⽂本数据(⽂字、图⽚、视频、⾳频)的应⽤层协议。它规定了客户端…

【算法--链表】138.随机链表的复制--通俗讲解

算法通俗讲解推荐阅读 【算法–链表】83.删除排序链表中的重复元素–通俗讲解 【算法–链表】删除排序链表中的重复元素 II–通俗讲解 【算法–链表】86.分割链表–通俗讲解 【算法】92.翻转链表Ⅱ–通俗讲解 【算法–链表】109.有序链表转换二叉搜索树–通俗讲解 【算法–链表…

为什么现在企业注重数据可视化?一文讲清可视化数据图表怎么做

目录 一、企业注重数据可视化的原因 1.提升数据理解效率 2.发现数据中的规律和趋势 3.促进企业内部沟通与协作 4.增强决策的科学性 5.提升企业竞争力 二、可视化数据图表的基本概念 1.常见的可视化图表类型 2.可视化图表的构成要素 3.可视化图表的设计原则 三、制作…

Cursor 辅助开发:快速搭建 Flask + Vue 全栈 Demo 的实战记录

Cursor 辅助开发:快速搭建 Flask Vue 全栈 Demo 的实战记录 🌟 Hello,我是摘星! 🌈 在彩虹般绚烂的技术栈中,我是那个永不停歇的色彩收集者。 🦋 每一个优化都是我培育的花朵,每一个…

实战:用 Python 搭建 MCP 服务 —— 模型上下文协议(Model Context Protocol)应用指南

📌 实战:用 Python 搭建 MCP 服务 —— 模型上下文协议(Model Context Protocol)应用指南 标签:#MCP #AI工程化 #Python #LLM上下文管理 #Agent架构🎯 引言:为什么需要 MCP? 在构建大…

宋红康 JVM 笔记 Day16|垃圾回收相关概念

一、今日视频区间 P154-P168 二、一句话总结 System.gc()的理解;内存溢出与内存泄漏;Stop The World;垃圾回收的并行与并发;安全点与安全区域;再谈引用:强引用;再谈引用:软引用;再谈…

OpenCV 高阶 图像金字塔 用法解析及案例实现

目录 一、什么是图像金字塔? 二、图像金字塔的核心作用 三、图像金字塔的核心操作:上下采样 3.1 向下采样( pyrDown ):从高分辨率到低分辨率 1)原理与步骤 2)关键注意事项 3)…

【ARMv7】系统复位上电后的程序执行过程

引子:对于ARMv7-M系列SOC来说,上电后程序复位执行的过程相对来说比较简单,因为绝大部分芯片,都是XIP(eXecute In Place,就地执行)模式执行程序,不需要通过BooROM->PL(preloader)-…

神经网络的初始化:权重与偏置的数学策略

在深度学习中,神经网络的初始化是一个看似不起眼,却极其重要的环节。它就像是一场漫长旅程的起点,起点的选择是否恰当,往往决定了整个旅程的顺利程度。今天,就让我们一起深入探讨神经网络初始化的数学策略,…

第 16 篇:服务网格的未来 - Ambient Mesh, eBPF 与 Gateway API

系列文章:《Istio 服务网格详解》 第 16 篇:服务网格的未来 - Ambient Mesh, eBPF 与 Gateway API 本篇焦点: 反思当前主流 Sidecar 模式的挑战与权衡。 深入了解 Istio 官方的未来演进方向:Ambient Mesh (无边车模式)。 探讨革命性技术 eBPF 将如何从根本上重塑服务网格的…

摆动序列:如何让数组“上下起伏”地最长?

文章目录摘要描述题解答案题解代码分析代码解析示例测试及结果时间复杂度空间复杂度总结摘要 今天我们要聊的是 LeetCode 第 376 题 —— 摆动序列。 题目的意思其实很有意思:如果一个序列里的相邻差值能保持正负交替,就叫做“摆动”。比如 [1, 7, 4, 9…

玩转Docker | 使用Docker部署KissLists任务管理工具

玩转Docker | 使用Docker部署KissLists任务管理工具 前言 一、KissLists介绍 KissLists简介 KissLists核心特点 KissLists注意事项 二、系统要求 环境要求 环境检查 Docker版本检查 检查操作系统版本 三、部署KissLists服务 下载KissLists镜像 编辑部署文件 创建容器 检查容器状…

【滑动窗口】C++高效解决子数组问题

个人主页 : zxctscl 专栏 【C】、 【C语言】、 【Linux】、 【数据结构】、 【算法】 如有转载请先通知 文章目录前言1 209. 长度最小的子数组1.1 分析1.2 代码2 3. 无重复字符的最长子串2.1 分析2.2 代码3 1004. 最大连续1的个数 III3.1 分析3.2 代码4 1658. 将 x …

[rStar] 搜索代理(MCTS/束搜索)

第2章:搜索代理(MCTS/束搜索) 欢迎回到rStar 在前一章中,我们学习了求解协调器,它就像是解决数学问题的项目经理。 它组织整个过程,但本身并不进行"思考",而是将这项工作委托给其专家团队。 今天&#x…

Electron 核心模块速查表

为了更全面地覆盖常用 API,以下表格补充了更多实用方法和场景化示例,同时保持格式清晰易读。 一、主进程模块 模块名核心用途关键用法 示例注意事项app应用生命周期管理• 退出应用:app.quit()• 重启应用:app.relaunch() 后需…

Qt C++ 图形绘制完全指南:从基础到进阶实战

Qt C 图形绘制完全指南:从基础到进阶实战 前言 Qt框架提供了强大的2D图形绘制能力,通过QPainter类及其相关组件,开发者可以轻松实现各种复杂的图形绘制需求。本文将系统介绍Qt图形绘制的核心技术,并通过实例代码演示各种绘制技巧…

二分搜索边界问题

在使用二分搜索的时候&#xff0c;更新条件不总是相同&#xff0c;虽然说使用bS目的就是为了target&#xff0c;但也有如下几种情况&#xff1a;求第一个target的索引求第一个>target的索引求第一个>target的索引求最后一个target的索引求最后一个<target的索引求最后…

【springboot+vue3】博客论坛管理系统(源码+文档+调试+基础修改+答疑)

目录 一、整体目录&#xff1a; 项目包含源码、调试、修改教程、调试教程、讲解视频、开发文档&#xff08;项目摘要、前言、技术介绍、可行性分析、流程图、结构图、ER属性图、数据库表结构信息、功能介绍、测试致谢等约1万字&#xff09; 二、运行截图 三、代码部分&…