• 正文
  • 相关推荐
申请入驻 产业图谱

GitHub上很受欢迎的单片机相关项目!

09/01 09:09
895
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

今天就来分享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?btn1,?btn2;

// 按键事件回调函数
void?btn1_callback(void?*btn)?{
? ??struct?Button?*handle?= (struct?Button?*)btn;
? ??
? ??switch(handle->event) {
? ? ? ??case?PRESS_DOWN:
? ? ? ? ? ??printf("Button1 press downn");
? ? ? ? ? ??break;
? ? ? ??case?PRESS_UP:
? ? ? ? ? ??printf("Button1 press upn");
? ? ? ? ? ??break;
? ? ? ??case?LONG_PRESS_START:
? ? ? ? ? ??printf("Button1 long press startn");
? ? ? ? ? ??break;
? ? ? ??case?LONG_PRESS_HOLD:
? ? ? ? ? ??printf("Button1 long press holdn");
? ? ? ? ? ??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:%.2fn",?
? ? ? ? ? ?timestamp++,
? ? ? ? ? ?read_adc_channel(0) *?3.3f?/?4095.0f,
? ? ? ? ? ?read_adc_channel(1) *?3.3f?/?4095.0f,
? ? ? ? ? ?read_temperature());
}

 

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录

本公众号专注于嵌入式技术,包括但不限于C/C++、嵌入式、物联网、Linux等编程学习笔记,同时,公众号内包含大量的学习资源。欢迎关注,一同交流学习,共同进步!