news 2026/9/29 15:07:24

基于STM32的智能鸽子驯养系统:从环境监测到自动饲喂的完整设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于STM32的智能鸽子驯养系统:从环境监测到自动饲喂的完整设计

1. 从鸽棚里的真实痛点说起:这套系统到底要解决什么

养鸽子这件事,外行看是闲情逸致,内行才知道是个精细活。我接触过不少鸽友,有养信鸽参赛的,有做观赏鸽繁育的,也有规模化肉鸽养殖的。聊下来发现一个共性痛点:鸽舍的环境管理和饲喂管理极度依赖人工经验,而且很难做到24小时不间断盯守。温度高了低了、湿度大了小了、氨气浓度上来了、饲料投喂不规律、饮水被污染——这些问题任何一项没及时处理,轻则影响鸽子状态,重则整棚出问题。

传统做法是什么?靠人定时去巡棚,拿个温湿度计看一眼,凭手感决定要不要开通风、要不要加水加料。这种方式的问题很明显:夜里没人管、数据不连续、判断标准因人而异。尤其是信鸽驯养,鸽子的归巢训练、体能状态跟环境稳定性关系极大,你不可能半夜三点爬起来看温湿度。

这套基于STM32的智能鸽子驯养系统,核心目标就是用一颗STM32主控芯片,把鸽舍里的环境监测、自动饲喂、饮水控制、通风调节、异常报警这几件事串起来,做成一个能自动运行、能记录数据、能远程查看的闭环系统。它不是一个概念Demo,而是有实物、有完整电路、有设计手册的可落地项目。

适合谁看?如果你是电子类专业的学生,正在找基于STM32的毕业设计选题,这套系统的完整度足够撑起一个本科甚至研究生的课题;如果你是嵌入式开发者想练手一个综合项目,它涵盖了传感器采集、执行器驱动、电源设计、通信接口、PCB布局等全链路;如果你是养殖从业者或者有电子基础的鸽友,照着设计手册也能自己攒一套出来。

我先把这套系统的整体框架摆出来,让你有个全局认知,后面再逐块拆解。

功能模块核心器件实现目标
主控STM32F103C8T6系统调度、数据处理、逻辑控制
环境监测DHT22 + MQ-135温湿度、氨气浓度采集
自动饲喂28BYJ-48步进电机 + ULN2003定时定量投料
饮水控制水位传感器 + 电磁阀自动补水、防溢流
通风调节继电器 + 直流风扇氨气/温度超标自动排风
人机交互OLED + 按键本地参数设置与状态显示
通信RS485 / USB虚拟串口上位机数据上传与远程配置
电源Buck电路 + LDO12V转5V转3.3V多级供电

这套架构看起来不复杂,但真正做起来,坑都在细节里。下面我按实际开发顺序,把每个环节的关键设计、选型理由、踩坑经验全部摊开讲。

2. 主控选型与最小系统:为什么是STM32F103而不是别的

2.1 选型背后的真实考量

很多人做STM32项目,第一反应就是"我用F103C8T6",但问他为什么,答不上来。我选这颗芯片的理由很具体:

第一,外设资源刚好够用且不浪费。这套系统需要至少2路ADC(氨气传感器、水位传感器)、1路定时器做步进电机脉冲输出、2路USART(一路RS485、一路调试)、若干GPIO驱动继电器和读取按键。F103C8T6有2个12位ADC共10个通道、4个定时器、3个USART、37个GPIO,完全覆盖需求,而且LQFP48封装手工焊接难度可接受。

第二,成本与供货稳定性。这颗芯片在市场上的保有量极大,价格透明,替代品多。对于毕业设计或者小批量制作来说,不会因为缺货卡住进度。

第三,开发资料生态成熟。标准外设库、HAL库、寄存器操作三种方式都有大量参考,遇到问题容易找到解决方案。这一点对新手尤其重要。

如果你要加以太网、CAN总线或者更多路ADC,那就得上F103ZET6或者F407系列。但这套鸽子驯养系统的需求边界很清楚,没必要为冗余性能买单。

2.2 最小系统里最容易被忽视的三个电路

最小系统原理图网上到处都是,但我要重点说三个新手最容易画错或者省掉的部分。

复位电路。STM32的NRST引脚是低电平复位,标准做法是接一个10K上拉电阻到3.3V,再并一个100nF电容到地,配合复位按键。我见过有人只接按键不接电容,结果按键抖动导致多次复位,系统启动不稳定。那个100nF电容不是可有可无的,它起到硬件消抖的作用,跟后面要讲的防抖电路是一个道理。

晶振电路。外部8MHz晶振配两个20pF负载电容,这个值不是随便定的。负载电容的计算要参考晶振规格书里的CL值,公式是:CL = (C1 × C2) / (C1 + C2) + Cstray,其中Cstray是PCB走线寄生电容,一般取3-5pF。如果晶振规格书标CL=10pF,那C1和C2大概取15-18pF比较合适。很多人直接抄20pF,大部分情况能起振,但余量不够,温度变化大时可能停振。

启动模式配置。BOOT0和BOOT1引脚决定了芯片从哪里启动。正常运行时BOOT0接10K下拉到地,从主Flash启动。如果你要用串口下载程序,需要把BOOT0拉高再复位。我建议在PCB上留一个跳线帽或者拨码开关,别直接焊死,不然每次下载都要动烙铁。

提示:STM32芯片第一脚的确认方法——LQFP封装芯片,第一脚附近会有一个圆点标记或者斜切角,逆时针数第一脚。焊接前务必用放大镜确认,焊反了通电就烧。

2.3 看门狗电路:不是可选项,是必选项

鸽子驯养系统是长期无人值守运行的,一旦程序跑飞,整个鸽舍的饲喂和通风就停了。看门狗电路在这里不是锦上添花,是保命设计。

STM32内部有独立看门狗(IWDG)和窗口看门狗(WWDG)。我建议用IWDG,因为它由独立的LSI时钟驱动,即使主时钟挂了它也能工作。配置上,IWDG的超时时间通过预分频和重装载值设定,假设LSI约40kHz,预分频设为64,重装载值设为625,超时时间就是 (64 × 625) / 40000 ≈ 1秒。主循环里必须保证每秒至少喂狗一次,否则系统复位。

但这里有个坑:喂狗不能放在定时器中断里。如果主循环卡死了但中断还在跑,中断喂狗会让看门狗形同虚设。正确做法是在主循环的关键节点喂狗,确保主逻辑真的在正常运行。

3. 传感器采集链路:从模拟信号到可信数据

3.1 温湿度采集:DHT22的时序陷阱

DHT22是单总线器件,一根数据线完成通信。它的时序要求比较严格:主机拉低至少1ms作为起始信号,然后释放总线,DHT22响应80us低电平+80us高电平,之后开始传输40位数据。

问题在于,DHT22对时序的容忍度不高,如果MCU在读取过程中被中断打断,数据就会错乱。我的做法是:读取DHT22时关闭全局中断,读完立即开启。整个读取过程大约5ms,短暂关中断不会影响系统其他功能。

另外,DHT22的供电电压范围是3.3V-5.5V,但如果你用5V供电,数据线电平也是5V,直接接STM32的3.3V GPIO会长期损伤引脚。要么用3.3V供电,要么加电平转换。我选3.3V供电,省事。

数据校验方面,DHT22输出的40位数据里,前16位是湿度、中间16位是温度、最后8位是校验和。校验和等于前四个字节相加取低8位。如果校验失败,直接丢弃这次数据,等下一次采集,不要用错误数据去驱动执行器。

3.2 氨气浓度检测:MQ-135的标定问题

鸽舍里氨气浓度是衡量空气质量的关键指标。MQ-135对氨气、苯、烟雾等多种气体都有响应,便宜好用,但它有个致命问题:输出是模拟量,而且一致性差。每颗传感器的基线漂移都不一样,你不能直接拿ADC值去判断浓度。

我的处理方案是:上电预热24小时后做基线标定。具体做法是,在洁净空气环境中记录ADC值作为基准R0,然后根据传感器手册的灵敏度曲线,用对数关系换算实际浓度。代码里用一个简单的查表加线性插值实现:

// MQ-135浓度换算(简化版) float get_nh3_ppm(uint16_t adc_val) { float rs = (3.3f * 10000.0f) / adc_val - 10000.0f; // 负载电阻10K float ratio = rs / R0; // R0为标定基准 // 根据手册曲线拟合:ppm = a * (ratio)^b float ppm = 100.0f * powf(ratio, -2.5f); return ppm; }

实际使用中,我不会完全依赖绝对浓度值,而是设置相对阈值:比如标定后基线ADC为2000,当ADC超过2800时触发通风,超过3200时触发报警。这样避开了绝对标定的麻烦,实用性更强。

3.3 水位检测:最简单的往往最可靠

饮水系统我用的是浮球式水位开关,而不是超声波或者电容式。原因很简单:鸽舍环境潮湿、有粉尘,光学和超声波方案容易受干扰,而浮球开关是机械触点,可靠性极高,成本几块钱。

电路上,浮球开关一端接3.3V,另一端接GPIO并配10K下拉电阻。水位正常时开关断开,GPIO读低;水位低时开关闭合,GPIO读高。这里加一个RC滤波电路(100Ω + 100nF)可以滤掉触点抖动和长线引入的干扰。

如果你非要用STM32超声波测距方案做水位检测,那要注意:超声波模块HC-SR04的Echo引脚输出5V电平,必须分压到3.3V再接STM32。分压电阻用1K和2K,输出就是3.3V。另外超声波在潮湿环境里探头容易结露,影响精度,我不推荐用在鸽舍。

4. 执行器驱动:从弱电控制到强电动作

4.1 步进电机饲喂机构:ULN2003与28BYJ-48的配合

自动饲喂的核心是一个螺旋出料机构,用28BYJ-48步进电机带动。这颗电机是5V供电、四相五线、减速比1:64,输出扭矩不大但足够推动颗粒饲料。

驱动用ULN2003达林顿阵列,它内部集成了续流二极管,可以直接驱动感性负载。接线很简单:STM32的四个GPIO接ULN2003的IN1-IN4,OUT1-OUT4接电机线圈。但有个细节:ULN2003的COM引脚要接5V,这样续流二极管才能把电机断电时产生的反向电动势泄放到电源,保护芯片。

步进电机的控制方式我用的是八拍模式,比四拍模式运行更平滑,振动更小。八拍的通电顺序是:A-AB-B-BC-C-CD-D-DA。每走一步延时1.5ms,转一圈需要64×8=512步,耗时约0.77秒。出料量通过控制步数来定量,比如每次投喂走200步,对应大约多少克饲料,这个需要实际标定。

注意:步进电机在堵转时会持续发热,如果出料机构卡住,电机温度会迅速上升。我在机构上加了机械限位,同时在软件里加了堵转检测——如果连续发送脉冲但电机位置没有变化(通过霍尔传感器反馈),就停止并报警。

4.2 继电器与风扇控制:推挽电路与续流保护

通风风扇用的是12V直流风扇,通过继电器控制通断。STM32的GPIO输出电流最大20mA,驱动继电器线圈(通常需要70mA以上)必须加驱动级。

我用的是S8050三极管推挽驱动方案:GPIO通过1K基极电阻接S8050,发射极接地,集电极接继电器线圈一端,线圈另一端接5V。继电器线圈两端反并一个1N4148续流二极管,方向是阴极接5V、阳极接集电极。这个二极管的作用是:继电器断电瞬间,线圈产生的反向电动势通过二极管形成回路泄放,避免击穿三极管。

这里涉及到一个推挽电路的概念。推挽是用两个互补的管子分别负责拉电流和灌电流,但在继电器驱动这种单向负载场景,其实用单管加续流二极管就够了。推挽更多用在需要双向驱动的场合,比如H桥电机驱动。

如果你要控制的是交流风扇,那就不能用继电器直接切,需要用光耦加双向可控硅的方案,做好强弱电隔离。鸽舍环境我不建议用交流方案,直流更安全。

4.3 电磁阀饮水控制:RS485远程控制的配合

饮水系统的电磁阀是12V常闭型,通电打开、断电关闭。驱动电路和继电器类似,但电磁阀的感性更强,续流二极管必须用快恢复型,比如FR107,普通1N4148恢复速度不够。

电磁阀的开关状态需要反馈到上位机,这里就用到了RS485电路。RS485是差分信号,抗干扰能力强,适合鸽舍这种长距离传输场景。收发器我用的是MAX485或者SN65HVD230(3.3V版本),STM32的USART TX/RX接收发器的DI/RO,一个GPIO控制RE/DE引脚切换收发方向。

RS485总线上要加终端电阻,通常是120Ω,接在总线两端。如果总线长度小于50米,终端电阻可以省略,但加了更稳。另外,A/B线要双绞,并且远离电源线走线,这是抗干扰电路设计的基本功。

5. 电源系统:Buck电路与多级供电的取舍

5.1 为什么不用LDO一路到底

系统总供电是12V(风扇和电磁阀需要),但STM32和传感器需要3.3V,继电器和步进电机需要5V。如果全部用LDO线性稳压,12V降到5V的压差是7V,假设5V负载电流500mA,LDO上的功耗就是3.5W,发热严重,效率只有41%。

所以我的方案是:12V转5V用Buck电路,5V转3.3V用LDO。Buck电路效率能到85%以上,发热小。5V到3.3V压差只有1.7V,LDO的功耗可以接受。

Buck电路我用的是MP1584模块,输入4.5V-28V,输出可调,最大3A。电路上关键元件是电感、续流二极管和输出电容。电感选47uH,输出电容用220uF电解加100nF陶瓷并联,滤高频和低频纹波。

5.2 Buck电路布局的EMI陷阱

Buck电路是开关电源,开关节点(SW引脚)的电压跳变会产生EMI滤波电路要处理的问题。布局上有个铁律:输入电容、芯片、续流二极管、电感构成的环路面积要尽可能小。这个环路里电流变化率很高,环路面积越大,辐射越强。

具体做法:输入电容紧贴芯片VIN和GND引脚,续流二极管紧贴SW和GND,电感紧贴SW。PCB上这几个元件放在同一面,走线短而粗。如果条件允许,在电源输入处加一个共模电感加X电容的EMI滤波器,能显著降低传导干扰。

我实测过,布局不好的Buck电路,输出纹波能到200mV以上,布局优化后能压到50mV以内。这个纹波如果太大,会影响ADC采样精度,氨气传感器的读数会跳。

5.3 模拟电源与数字电源的隔离

ADC采集对电源噪声很敏感。我的做法是:数字3.3V和模拟3.3V之间用一个磁珠隔离,磁珠选100MHz时阻抗600Ω的型号。模拟3.3V单独给传感器和ADC参考电压供电,数字3.3V给MCU和数字外设。

地平面处理上,数字地和模拟地单点连接,连接点选在ADC芯片下方或者电源入口处。不要大面积铺铜把数字地和模拟地混在一起,那样数字噪声会串到模拟区。

6. 通信与数据上传:RS485和USB虚拟串口的双通道设计

6.1 RS485作为主通信通道的理由

鸽舍到值班室的距离可能几十米,RS485在这种场景下比UART TTL和I2C都合适。差分传输抗共模干扰,双绞线成本低,组网方便。

协议上我用的是Modbus RTU,这是工业标准,上位机用现成的Modbus调试工具就能读数据。STM32端可以用agile_modbus这个开源库,移植简单,支持主机和从机模式。寄存器映射我这样规划:

寄存器地址内容读写
0x0000温度值(×10)只读
0x0001湿度值(×10)只读
0x0002氨气ADC值只读
0x0003水位状态只读
0x0010投喂间隔(分钟)读写
0x0011通风阈值读写
0x0012手动投喂触发写入

Modbus RTU的帧间隔是3.5个字符时间,波特率9600时约4ms。STM32端要用定时器做帧超时判断,不能靠UART空闲中断,因为空闲中断的触发时间不好精确控制。

6.2 USB虚拟串口做调试通道

开发阶段用STM32 USB虚拟串口打印调试信息非常方便,不需要额外的USB转TTL模块。STM32F103自带USB外设,配置成CDC类设备,电脑上会识别出一个串口。

配置步骤:使能USB时钟(48MHz来自PLL),配置USB中断,移植ST的USB库或者用HAL库的CDC例程。注意USB的DP引脚需要接1.5K上拉电阻到3.3V,有些开发板已经内置了,自己画板子别忘了。

USB虚拟串口的坑在于:枚举过程需要时间,如果MCU启动后立即往USB发数据,电脑还没枚举完,数据会丢。我的做法是在USB发送函数里加一个标志位,等USB配置完成中断触发后再允许发送。

6.3 3.3V与1.8V电平转换的坑

如果你的系统里有1.8V器件(比如某些GPS模块或者无线模块),STM32的3.3V UART不能直接连。串口3.3V转1.8V电平转化三极管电路是一种低成本方案:用一个NPN三极管,基极接3.3V侧TX通过电阻分压,集电极接1.8V侧RX并上拉到1.8V,发射极接地。但这个电路只能单向传输,双向通信需要两个。

更简单的方案是用专用的电平转换芯片,比如TXS0108E,双向自动方向识别,省心。但成本高一些。毕业设计用三极管方案能体现设计能力,实际产品我推荐用专用芯片。

7. 软件架构:定时器调度与状态机设计

7.1 用定时器构建软时钟

这套系统需要同时处理多件事:每2秒读一次温湿度、每5秒读一次氨气、每30秒检查一次水位、按设定间隔投喂、实时响应按键。用delay函数阻塞式等待肯定不行,STM32定时器模式在这里派上用场。

我用TIM2配置成1ms中断,在中断里维护一组软件计数器:

volatile uint32_t tick_2s = 0, tick_5s = 0, tick_30s = 0; void TIM2_IRQHandler(void) { if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM2, TIM_IT_Update); if (++tick_2s >= 2000) { tick_2s = 0; flag_read_dht = 1; } if (++tick_5s >= 5000) { tick_5s = 0; flag_read_mq135 = 1; } if (++tick_30s >= 30000) { tick_30s = 0; flag_check_water = 1; } } }

主循环里检查这些标志位,置位就执行对应任务。这样每个任务都不会互相阻塞。注意中断里只做标志置位,不做耗时操作,这是嵌入式编程的基本原则。

7.2 状态机管理饲喂流程

饲喂不是简单转电机就完事,要处理"正在投喂""投喂完成""料仓空""电机堵转"等多个状态。我用一个状态机来管理:

typedef enum { FEED_IDLE, FEED_RUNNING, FEED_DONE, FEED_ERROR } feed_state_t; feed_state_t feed_state = FEED_IDLE; void feed_task(void) { switch (feed_state) { case FEED_IDLE: if (feed_trigger) { feed_state = FEED_RUNNING; step_count = 0; } break; case FEED_RUNNING: if (step_count < TARGET_STEPS) { step_motor_one_step(); step_count++; } else { feed_state = FEED_DONE; } if (motor_stall_detected()) { feed_state = FEED_ERROR; } break; case FEED_DONE: feed_trigger = 0; feed_state = FEED_IDLE; break; case FEED_ERROR: buzzer_on(); // 等待人工处理 break; } }

状态机的好处是逻辑清晰,每个状态只关心自己的事,不会出现"投喂过程中又被触发一次"这种混乱。

7.3 看门狗与延时函数的冲突

这里说一个我踩过的坑:STM32延时函数delay卡死导致看门狗复位。早期我用的是空循环延时,如果编译器优化等级变了,循环次数就不准了,严重时延时比预期长很多,主循环来不及喂狗就复位了。

解决方案:用SysTick定时器做延时基准,或者用定时器计数做非阻塞延时。如果非要用阻塞延时,确保延时时间远小于看门狗超时时间,并且在延时前后都喂狗。

8. 实物调试与避坑实录

8.1 上电前的检查清单

板子焊完不要直接上电,按这个顺序检查:

  1. 用万用表测3.3V、5V、12V对地电阻,确认没有短路。电路短路是烧板子的头号杀手。
  2. 检查芯片方向,特别是STM32和RS485收发器,焊反了通电就废。
  3. 检查电解电容极性,反接会爆。
  4. 先不焊MCU,上电测各路电压是否正常,正常后再焊MCU。

8.2 调试顺序:从点到面

我的调试顺序是:电源→最小系统→串口打印→单个传感器→单个执行器→联调。

最小系统跑起来后,先点一个LED,确认STM32电量一个LED小灯没问题。然后配好串口,能打印信息。接着一个一个接传感器,每接一个就用串口打印读数,确认正常再接下一个。执行器同理,先单独测试继电器吸合、电机转动,再接入主逻辑。

这个顺序看起来慢,但能保证出问题时快速定位。我见过有人全部焊完直接上电,结果不工作,排查了两天,最后发现是某个传感器电源接错。

8.3 抗干扰实战:从乱码到稳定

RS485通信在鸽舍环境里最容易出问题。我遇到过的情况是:电机一启动,RS485就乱码。原因是电机干扰通过电源和空间耦合到了通信线。

解决措施有三条:第一,电机电源线和RS485线分开走,不要捆在一起;第二,RS485收发器的电源加磁珠和电容滤波;第三,软件上加CRC校验和重传机制,即使偶尔错一帧也能恢复。

还有一次是ADC读数跳动厉害,排查发现是Buck电路的开关噪声耦合到了模拟电源。在模拟电源入口加了一个LC滤波器(10uH电感+100uF电容)后,跳动从±50LSB降到了±5LSB。

8.4 关于开发环境

Keil5是主流选择,但如果你同时要开发51单片机,Keil5兼容C51和STM32安装需要一些技巧:先装C51,再装MDK,装的时候选同一个目录,然后用管理员权限运行,注册号分别填。或者干脆用STM32CubeIDE,免费且集成CubeMX,配置外设很方便。

STM32芯片包安装如果在线安装慢,可以离线下载pack包,双击安装。opencode STM32代码开发这种工具我没用过,不做评价,但建议新手还是从标准工具链入手,出了问题好找资料。

9. 设计手册里该写什么:给做毕业设计的同学

如果你这个项目是要交毕业设计,设计手册的含金量直接决定答辩分数。我的建议是,手册里必须包含这几块:

系统框图。用Visio或者draw.io画,标清楚每个模块的输入输出关系。不要用mermaid,答辩老师不一定认。

完整原理图。分模块画,电源一块、主控一块、传感器一块、执行器一块。每个元件标清楚型号和参数,电阻电容不要只写R1、C1,要写10K、100nF。

PCB布局图。标注关键走线,比如电源线宽度、差分线等长、模拟数字分区。这是体现你工程能力的地方。

流程图。主程序流程图、中断流程图、状态机流程图。用标准流程图符号,不要用伪代码代替。

测试数据。温湿度采集精度、氨气响应曲线、投喂量标定表、通信误码率测试。有数据才有说服力。

问题与改进。把你调试中遇到的问题和解决方案写进去,这比只写"系统运行正常"有价值得多。答辩老师最喜欢问的就是"你遇到了什么问题,怎么解决的"。

10. 后续可以扩展的方向

这套系统的基础框架搭好之后,往上加东西其实不难。比如加一个DS3231做高精度RTC,即使主电源断了,时间也不丢,投喂计划更准。DS3231走I2C接口,STM32的I2C外设直接读,注意上拉电阻4.7K。

再比如加ESP8266或者4G模块做远程上报,把数据传到云平台,手机就能看鸽舍状态。通信协议用MQTT,STM32端移植一个轻量级MQTT客户端,比如MQTTClient-C。

还有基于STM32的毕业设计常见的加分项:加一个摄像头做鸽子活动监测,用简单的帧差法判断鸽子是否活跃;或者加K210与STM32通讯,用K210做图像识别,STM32做控制执行,两者通过串口交互。

但我要提醒一句:扩展功能要量力而行。基础功能做扎实,比堆一堆半成品功能强。答辩的时候,老师更看重你对核心原理的理解,而不是你用了多少模块。

我个人在实际操作中的体会是,这套系统最花时间的不是写代码,而是机械结构的设计和调试。出料机构的角度、电机的扭矩匹配、料仓的防潮处理,这些看起来跟电子无关的东西,往往决定了系统能不能真正用起来。电路和代码可以照着手册复现,但机械部分必须根据你的实际饲料类型和鸽舍布局去调整。多做几版原型,比一次追求完美更靠谱。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/29 15:06:56

OpenHarmony上Flutter功能卡片组件实战:状态管理与平台通道

最近我一直在折腾 Flutter for OpenHarmony 这套链路&#xff0c;手里的项目是一个文件转换助手 App。整个界面没有用传统的列表页加详情页那种结构&#xff0c;而是把所有操作单元都做成了“功能卡片组件”&#xff1a;选文件是一张卡片、选转换格式是一张卡片、调参数是一张卡…

作者头像 李华
网站建设 2026/9/29 15:06:43

《AI 时代 FPGA 的全栈开发实战·从入门到精通》筑基篇|第3课时

课时导读 前两课时我们完成了两件事:建立了硬件思维(第1课时)、补齐了数字电路地基(第2课时)。本课时回答一个非常实际的问题:2026年,FPGA开发者到底有哪些AI工具可以用?它们各自擅长什么?我应该怎么选、怎么搭配? 很多学习者现在的状态是网上说什么火就用什么:刷…

作者头像 李华
网站建设 2026/9/29 15:06:21

千万级设备并发接入,FluxMQ 如何扛住海量终端连接洪峰?

千万级设备并发接入&#xff0c;FluxMQ 如何扛住海量终端连接洪峰&#xff1f;很多企业都会遇到一个共性问题&#xff1a;平台平时运行稳定&#xff0c;一旦遇到设备批量上线、网络断联回复、整点集中上报&#xff0c;就会出现延迟飙升、设备频繁掉线、系统负载爆表&#xff0c…

作者头像 李华
网站建设 2026/9/29 15:06:05

Linux如何开放SSH服务监听多个端口

Linux上默认SSH服务端口为22&#xff0c;但是通常在一些公司里面这个端口是禁用的&#xff0c;需要进行对应的修改。如果大家要开放多个端口的监听&#xff0c;可以通过如下方法进行配置。首先&#xff0c;修改sshd的配置文件 &#xff0c;默认位置为&#xff1a;/etc/ssh/sshd…

作者头像 李华
网站建设 2026/9/29 15:02:58

普通人也能轻松掌握的20个DeepSeek高频提示词(2025版)

以下这些高频提示词都是普通人很容易就掌握得住的, 总共有20个, 版本是2025版的, 它们把内容覆盖在了六大场景之下, 具体包括基础原则这个方面、职场效率这个方面、内容创作这个方面、编程开发这个方面、学习研究这个方面以及高阶技巧这个方面, 这样做的目的是为了能够帮助大家…

作者头像 李华
网站建设 2026/9/29 15:02:20

RK3588学习日记(五) Python 多线程 NPU 推理:吞吐、延迟与核绑定实测

上一篇跑通了 Python 单线程 NPU 推理。这次先把预处理、推理、后处理分开计时&#xff0c;再测不同 Worker 数、核绑定和有界队列。共享同一个 Runtime 并发推理时&#xff0c;程序没有报错&#xff0c;输出却与串行参考不一致。1. 这篇做什么 第 1 步 量清单帧时间&#xff0…

作者头像 李华