几个受欢迎的嵌入式开源项目

strongerHuang 2025-08-29 20:00
转自 | 嵌入式大杂烩

嵌入式开源项目GitHub有很多,今天就来分享几个很受欢迎的嵌入式开源项目,既有实用的软件模块,也有完整的硬件项目!

实用软件模块篇

MultiButton - 多按键处理库

项目地址:https://github.com/0x1abin/MultiButton

强大功能

// 支持多种按键事件
按键事件类型:
├── 单击:PRESS_DOWN, PRESS_UP
├── 长按:LONG_PRESS_START, LONG_PRESS_HOLD
├── 连击:PRESS_REPEAT (连续按下)
├── 组合:多按键同时按下检测
└── 状态:按键按下时长统计
资讯配图

使用示例

#include "multi_button.h"

struct Button btn1btn2;

// 按键事件回调函数
void btn1_callback(void *btn) {
    struct Button *handle = (struct Button *)btn;
    
    switch(handle->event) {
        case PRESS_DOWN:
            printf("Button1 press down\n");
            break;
        case PRESS_UP:
            printf("Button1 press up\n");
            break;
        case LONG_PRESS_START:
            printf("Button1 long press start\n");
            break;
        case LONG_PRESS_HOLD:
            printf("Button1 long press hold\n");
            break;
    }
}

void setup() {
    // 初始化按键
    button_init(&btn1, read_button1_GPIO, 0);
    button_attach(&btn1, PRESS_DOWN, btn1_callback);
    button_attach(&btn1, PRESS_UP, btn1_callback);
    button_attach(&btn1, LONG_PRESS_START, btn1_callback);
    
    button_start(&btn1);
}

void main_loop() {
    // 5ms调用一次
    button_ticks();
}

QueueForMcu - 单片机队列神器

项目地址:https://github.com/xiaoxinpro/QueueForMcu

项目亮点

// 专为单片机设计的队列库
核心特性:
├── 平台兼容:支持8/16/32位单片机
├── 内存高效:占用资源极少
├── 操作简单:入队、出队、查询接口
├── 线程安全:支持中断环境使用
└── 状态监控:队列满、空状态检测
资讯配图

代码示例

#include "queue.h"

// 定义队列
#define QUEUE_SIZE 32
uint8_t queue_buffer[QUEUE_SIZE];
Queue_t my_queue;

void setup() {
    // 初始化队列
    Queue_Init(&my_queue, queue_buffer, QUEUE_SIZE);
}

void uart_rx_handler(uint8_t data) {
    // 中断中安全入队
    if (!Queue_IsFull(&my_queue)) {
        Queue_Put(&my_queue, data);
    }
}

void main_loop() {
    uint8_t data;
    // 主循环中处理数据
    while (!Queue_IsEmpty(&my_queue)) {
        if (Queue_Get(&my_queue, &data)) {
            process_received_data(data);
        }
    }
}

应用场景

  • 串口数据缓存:接收不定长数据包
  • 按键消息队列:按键事件缓存处理
  • 传感器数据:多个传感器数据排队处理
  • 通信协议:数据包的缓存和解析

StateMachine - 状态机框架

项目地址:https://github.com/kiishor/UML-State-Machine-in-C

核心功能

// UML标准状态机实现
状态机特性:
├── 标准实现:符合UML状态图规范
├── 层次状态:支持嵌套状态结构
├── 事件驱动:基于事件的状态转换
├── 安全可靠:状态转换的原子性
└── 调试友好:状态转换日志记录
资讯配图

实际应用示例

// 智能门锁状态机
typedefenum {
    STATE_LOCKED,
    STATE_UNLOCKING,
    STATE_UNLOCKED,
    STATE_LOCKING,
    STATE_ALARM
door_state_t;

typedefenum {
    EVENT_PASSWORD_CORRECT,
    EVENT_PASSWORD_WRONG,
    EVENT_TIMEOUT,
    EVENT_MANUAL_LOCK,
    EVENT_INTRUSION_DETECTED
door_event_t;

// 状态转换表
conststate_transition_t door_transitions[] = {
    {STATE_LOCKED, EVENT_PASSWORD_CORRECT, STATE_UNLOCKING},
    {STATE_LOCKED, EVENT_PASSWORD_WRONG, STATE_ALARM},
    {STATE_UNLOCKING, EVENT_TIMEOUT, STATE_UNLOCKED},
    {STATE_UNLOCKED, EVENT_MANUAL_LOCK, STATE_LOCKING},
    {STATE_UNLOCKED, EVENT_TIMEOUT, STATE_LOCKING},
    // ... 更多转换规则
};

完整项目篇

TinyGameEngine - 基于STM32的游戏开发框架

项目地址:https://github.com/juj/fbcp-ili9341

项目特色

// 基于STM32的游戏开发框架
引擎功能:
├── 图形渲染:像素级图形绘制
├── 音效系统:PWM音效播放
├── 输入处理:按键、摇杆输入
├── 碰撞检测:简单的2D碰撞
├── 场景管理:游戏状态切换
└── 存档系统:EEPROM数据保存
资讯配图

经典游戏实现

  • 贪吃蛇:经典益智游戏
  • 俄罗斯方块:方块消除游戏
  • 打砖块:反弹球游戏
  • 太空射击:飞行射击游戏

HomeAutomation - 智能家居系统

项目地址:https://github.com/home-assistant/core

系统架构

// 分布式智能家居架构
系统组成:
├── 中央控制器:ESP32主控制板
├── 传感器网络:温湿度、光照、烟雾传感器
├── 执行器:继电器、舵机、LED控制
├── 通信协议:WiFi、蓝牙、Zigbee
├── Web界面:实时监控和控制
└── 数据记录:传感器数据存储
资讯配图

核心功能模块

// 设备抽象层
typedefstruct {
    uint8_t device_id;
    device_type_t type;
    device_status_t status;
    
    // 设备操作接口
    int (*init)(void *device);
    int (*read)(void *device, void *data);
    int (*write)(void *device, void *data);
    int (*control)(void *device, uint8_t cmd, void *param);
smart_device_t;

// 场景自动化
typedefstruct {
    char scene_name[32];
    trigger_condition_t trigger;
    action_list_t actions;
    bool enabled;
automation_scene_t;

CanBus-Triple - CAN总线分析仪

项目地址:https://github.com/CANBus-Triple/CANBus-Triple

项目功能

// 专业CAN总线工具
核心功能:
├── 数据监听:实时CAN帧捕获
├── 数据发送:自定义CAN帧发送
├── 协议分析:常见CAN协议解析
├── 数据记录:CAN数据存储回放
├── 远程控制:WiFi远程操作
└── 过滤功能:ID过滤和数据筛选
资讯配图

应用领域

  • 汽车诊断:OBD-II协议分析
  • 工业控制:CANopen网络调试
  • 设备开发:CAN设备功能测试
  • 逆向工程:未知CAN协议分析

物联网项目篇

ESP32-IoT-Platform - 物联网平台

项目地址:https://github.com/espressif/esp-idf

平台特性

// 完整的IoT解决方案
技术栈:
├── 硬件平台:ESP32/ESP8266
├── 网络连接:WiFi、蓝牙、LoRa
├── 云端服务:MQTT、HTTP、CoAP
├── 移动应用:Android/iOS APP
├── Web管理:设备管理界面
└── 数据分析:实时数据可视化
资讯配图

典型应用

// 环境监测站
typedefstruct {
    float temperature;
    float humidity;
    uint16_t pm25;
    uint16_t co2;
    uint8_t light_level;
    uint32_t timestamp;
env_data_t;

// 数据采集任务
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.light_level = read_light();
        data.timestamp = get_timestamp();
        
        // 发送到云端
        mqtt_publish("sensor/env", &data, sizeof(data));
        
        vTaskDelay(pdMS_TO_TICKS(60000)); // 1分钟采集一次
    }
}

PowerManagement - 低功耗管理

项目地址:https://github.com/espressif/esp-idf/tree/master/examples/system/deep_sleep

功耗优化技术

// 智能功耗管理系统
功耗策略:
├── 深度睡眠:最低功耗模式
├── 定时唤醒:RTC定时器唤醒
├── 事件唤醒:外部中断唤醒
├── 动态调频:根据负载调整频率
├── 外设管理:按需开启外设
└── 功耗监控:实时功耗测量
资讯配图

实现示例

#include "esp_sleep.h"
#include "esp_wifi.h"

// 进入低功耗模式
void enter_power_save_mode(uint32_t sleep_time_ms) {
    // 关闭WiFi
    esp_wifi_stop();
    
    // 关闭不必要的外设
    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;
    }
}

创意项目篇

MusicBox - 音乐盒项目

项目地址:https://github.com/TheRemote/PicoMusicBox

项目功能

// 基于单片机的音乐播放器
功能特性:
├── 音乐播放:PWM音频输出
├── 文件系统:SD卡音乐文件读取
├── 音效处理:音量控制、音调调节
├── 显示界面:OLED显示歌曲信息
├── 用户交互:按键控制播放
└── 音频输出:DAC高质量音频
资讯配图

SmartClock - 智能时钟

项目地址:https://github.com/witnessmenow/ESP32-Trinity

核心功能

// 多功能智能时钟
功能模块:
├── 时间显示:NTP网络时间同步
├── 环境监测:温湿度显示
├── 日程提醒:事件提醒功能
├── 天气预报:在线天气获取
├── 音乐闹钟:自定义铃声
├── 氛围灯光:RGB灯效控制
└── 手机控制:APP远程设置
资讯配图

调试工具篇

SerialPlotter - 串口波形显示

项目地址:https://github.com/devinaconley/arduino-plotter

工具特色

// 实时数据可视化工具
显示功能:
├── 波形显示:多通道数据波形
├── 数值显示:实时数值监控
├── 颜色区分:不同数据源颜色
├── 缩放功能:时间轴缩放
├── 数据保存:波形数据导出
└── 触发功能:数据触发捕获
资讯配图

数据格式

// 串口数据输出格式
void send_plot_data() {
    static uint32_t timestamp = 0;
    
    // 格式:timestamp:channel1:channel2:channel3
    printf("%lu:%.2f:%.2f:%.2f\n"
           timestamp++,
           read_adc_channel(0) * 3.3f / 4095.0f,
           read_adc_channel(1) * 3.3f / 4095.0f,
           read_temperature());
}

------------ END ------------

资讯配图

深圳行,第一天!


资讯配图

总线CAN和CANFD通信协议区别


资讯配图

我曾经跑了无数次工厂,有几次差点睡在厂房

声明:内容取材于网络,仅代表作者观点,如有内容违规问题,请联系处理。 
嵌入式 开源
more
InternVL 3.5来了!上海AI Lab最新开源:硬刚 GPT-5 还把效率玩明白,谁不爱?
关于举办“第二届集成芯片和芯粒技术开源社区大赛”的公告
碾压SOTA!腾讯HunyuanVideo-Foley开源:让视频自动生成电影级音效,沉浸感拉满!
盘古大模型等部门被裁撤;马斯克刚刚开源 Grok 2.5;法裔女CEO接管OpenAI,奥特曼退居幕后?| AI 周报
80%美国AI初创靠中国开源模型“吃饭”!a16z投资人震惊,全球开源榜前16名全被中国包揽
全球开源大模型,前十五名全是中国的
【他山之石】ICCV 2025 | ECD:高质量合成图表数据集,提升开源MLLM图表理解能力
秋招超强助攻:零基础1小时上手GPT微调!全流程教程免费开源
打破NVLink垄断,华为这个“大杀器”即将开源
万物皆可“邪修”?科研党靠这个开源大模型“开挂”:能解化学题、能分析AFM图,有8B轻量版还能二次开发
Copyright © 2025 成都区角科技有限公司
蜀ICP备2025143415号-1
  
川公网安备51015602001305号