当前位置: 首页 > news >正文

【TB作品】msp430f5529单片机,dht22,烟雾传感器

功能

//硬件:msp430f5529、dht22、LCD1602、蜂鸣器、烟雾传感器、蓝牙模块。
//功能:读取温湿度、烟雾浓度显示到屏幕;
//按键调节三个报警数值;
//温度、湿度、烟雾浓度,任意一个大于报警数值就蜂鸣器报警;
//单片机将温度、湿度、烟雾浓度,通过蓝牙模块,发送到电脑端显示。
//电脑端也可以调节三个报警数值。

引脚


//PCF8574 LCD1602----MSP430F5529
//GND----------------GND
//VCC----------------3.3v
//SDA----------------P2.4
//SCL----------------P2.5//HC05 蓝牙----------MSP430F5529
//GND----------------GND
//VCC----------------3.3v
//RX-----------------P3.3  T
//TX-----------------P3.4  R//PM2烟雾传感器 0~3.3v电压转为ppm单位 20~20000ppm
//DHT22--------------MSP430F5529
//GND----------------GND
//VCC----------------3.3v
//DAT----------------P2.3//烟雾---------------MSP430F5529
//GND----------------GND
//VCC----------------3.3v
//A0-----------------P6.5//蜂鸣器-------------MSP430F5529
//GND----------------GND
//VCC----------------3.3v
//DAT----------------P1.6//按键----------------MSP430F5529
//KEY1----------------P1.2
//KEY2----------------P1.3
//KEY3----------------P1.4
//KEY4----------------P1.5
//GND-----------------GND//板子自己有的按键
//KEY5----------------P1.1
//KEY6----------------P2.1

部分程序


unsigned char get_key(void) //声明一个函数,返回值类型为 unsigned char,函数名为 get_key,参数列表为空
{unsigned char key; //声明一个名为 key 的无符号字符变量if ((P1IN & BIT2) == 0) //如果 P1IN 寄存器的第二位是 0,说明按键1被按下{delay_ms(10); //延时 10 毫秒,以确保读取的值稳定if ((P1IN & BIT2) == 0) //再次检测按键1是否被按下{key = 1; //将 key 设置为 1,表示按下了按键1while ((P1IN & BIT2) == 0)//等待按键1松开;}}else if ((P1IN & BIT3) == 0) //如果按键1未被按下,检测按键2是否被按下{delay_ms(10); //同样进行延时if ((P1IN & BIT3) == 0) //检测按键2是否被按下{key = 2; //将 key 设置为 2,表示按下了按键2while ((P1IN & BIT3) == 0)//等待按键2松开;}}else if ((P1IN & BIT4) == 0){delay_ms(10);if ((P1IN & BIT4) == 0){key = 3;while ((P1IN & BIT4) == 0);}}else if ((P1IN & BIT5) == 0){delay_ms(10);if ((P1IN & BIT5) == 0){key = 4;while ((P1IN & BIT5) == 0);}}else if ((P1IN & BIT1) == 0){delay_ms(10);if ((P1IN & BIT1) == 0){key = 5;while ((P1IN & BIT1) == 0);}}else if ((P2IN & BIT1) == 0){delay_ms(10);if ((P2IN & BIT1) == 0){key = 6;while ((P2IN & BIT1) == 0);}}else{key = 0;}return key;
}u8 data[5];
u16 shidu, wendu, yanwu;
u16 shidu_baojing = 900, wendu_baojing = 400, yanwu_baojing = 10000;
u8 disp[20];
u8 count = 0;
u8 timecnt = 0;
u8 keyvalue = 0;void disp_line1(void) // 定义名为disp_line1的函数
{count = 0; // 初始化计数器disp[count++] = wendu % 1000 / 100 + '0'; // 将温度百位数字转换为字符存入显示缓存数组,计数器+1disp[count++] = wendu % 100 / 10 + '0'; // 将温度十位数字转换为字符存入显示缓存数组,计数器+1disp[count++] = 'C'; // 存入字符'C',表示摄氏度,计数器+1disp[count++] = ' '; // 存入空格字符,计数器+1disp[count++] = shidu % 1000 / 100 + '0'; // 将湿度百位数字转换为字符存入显示缓存数组,计数器+1disp[count++] = shidu % 100 / 10 + '0'; // 将湿度十位数字转换为字符存入显示缓存数组,计数器+1disp[count++] = '%'; // 存入字符'%',表示百分比符号,计数器+1disp[count++] = ' '; // 存入空格字符,计数器+1disp[count++] = yanwu % 100000 / 10000 + '0'; // 将烟雾万位数字转换为字符存入显示缓存数组,计数器+1disp[count++] = yanwu % 10000 / 1000 + '0'; // 将烟雾千位数字转换为字符存入显示缓存数组,计数器+1disp[count++] = yanwu % 1000 / 100 + '0'; // 将烟雾百位数字转换为字符存入显示缓存数组,计数器+1disp[count++] = yanwu % 100 / 10 + '0'; // 将烟雾十位数字转换为字符存入显示缓存数组,计数器+1disp[count++] = yanwu % 10 + '0'; // 将烟雾个位数字转换为字符存入显示缓存数组,计数器+1disp[count++] = 'p'; // 存入字符'p',表示“ppm”(parts per million),计数器+1disp[count++] = 0; // 存入字符'\0',表示字符串结束,计数器+1LCD_write_str(0, 0, disp); // 在LCD屏幕第0行显示disp数组中的内容
}void send_computer(void)
{count = 0;disp[count++] = wendu % 1000 / 100 + '0';disp[count++] = wendu % 100 / 10 + '0';disp[count++] = 'C';disp[count++] = ' ';disp[count++] = shidu % 1000 / 100 + '0';disp[count++] = shidu % 100 / 10 + '0';disp[count++] = '%';disp[count++] = ' ';disp[count++] = yanwu % 100000 / 10000 + '0';disp[count++] = yanwu % 10000 / 1000 + '0';disp[count++] = yanwu % 1000 / 100 + '0';disp[count++] = yanwu % 100 / 10 + '0';disp[count++] = yanwu % 10 + '0';disp[count++] = 'p';disp[count++] = '\r';disp[count++] = '\n';disp[count++] = 0;Print_Str(disp);
}void disp_line2(void)
{count = 0; //计数器清零//显示湿度报警值的百位、十位disp[count++] = shidu_baojing % 1000 / 100 + '0';disp[count++] = shidu_baojing % 100 / 10 + '0';disp[count++] = 'C'; //显示'C'disp[count++] = ' '; //显示空格//显示温度报警值的百位、十位disp[count++] = wendu_baojing % 1000 / 100 + '0';disp[count++] = wendu_baojing % 100 / 10 + '0';disp[count++] = '%'; //显示'%'disp[count++] = ' '; //显示空格//显示烟雾报警值的万位、千位、百位、十位、个位disp[count++] = yanwu_baojing % 100000 / 10000 + '0';disp[count++] = yanwu_baojing % 10000 / 1000 + '0';disp[count++] = yanwu_baojing % 1000 / 100 + '0';disp[count++] = yanwu_baojing % 100 / 10 + '0';disp[count++] = yanwu_baojing % 10 + '0';disp[count++] = 'p'; //显示'p'disp[count++] = 0; //末尾字符为0//在LCD的第1行第0列显示字符串dispLCD_write_str(0, 1, disp);
}void deal_key(void)
{// 定义一个函数deal_key,没有返回值,没有参数if (keyvalue == 1){// 如果keyvalue的值为1shidu_baojing += 10;// 湿度报警值加10if (shidu_baojing > 900){// 如果湿度报警值大于900shidu_baojing = 900;// 把湿度报警值设为900}}else if (keyvalue == 2){// 否则,如果keyvalue的值为2shidu_baojing -= 10;// 湿度报警值减10if (shidu_baojing < 100){// 如果湿度报警值小于100shidu_baojing = 100;// 把湿度报警值设为100}}else if (keyvalue == 3){// 否则,如果keyvalue的值为3wendu_baojing += 10;// 温度报警值加10if (wendu_baojing > 900){// 如果温度报警值大于900wendu_baojing = 900;// 把温度报警值设为900}}else if (keyvalue == 4){// 否则,如果keyvalue的值为4wendu_baojing -= 10;// 温度报警值减10if (wendu_baojing < 100){// 如果温度报警值小于100wendu_baojing = 100;// 把温度报警值设为100}}else if (keyvalue == 5){// 否则,如果keyvalue的值为5yanwu_baojing += 100;// 烟雾报警值加100if (yanwu_baojing > 20000){// 如果烟雾报警值大于20000yanwu_baojing = 20000;// 把烟雾报警值设为20000}}else if (keyvalue == 6){// 否则,如果keyvalue的值为6yanwu_baojing -= 100;// 烟雾报警值减100if (yanwu_baojing < 200){// 如果烟雾报警值大于200yanwu_baojing = 200;// 把烟雾报警值设为200}}
}void contorl_beep(void) // 定义一个名为 contorl_beep 的函数
{if ((shidu > shidu_baojing) || (wendu > wendu_baojing) // 如果湿度、温度或烟雾任意一个超过了警戒值|| (yanwu > yanwu_baojing)){P1OUT &= ~BIT6; // 将 P1OUT 寄存器的第 6 位设置为 0,表示开启蜂鸣器}else // 如果湿度、温度和烟雾都没有超过警戒值{P1OUT |= BIT6; // 将 P1OUT 寄存器的第 6 位设置为 1,表示关闭开启蜂鸣器}
}/* 烟雾浓度换算 */
static unsigned int  yw_ppm_count(unsigned int x1)
{float a =0 ,b = 0,c = 0,d = 0;float ax =0 ,bx = 0,cx = 0,dx = 0;float y;float x;x=x1*3.3/4096;a = x * x * x * x * x;b = x * x * x * x;c = x * x * x;d = x * x ;ax = 0.0001923 * a;bx = 0.006017 * b;cx = 0.07267 * c;dx = 0.425 * d;y = ax - bx + cx - dx + (1.267 * x) + 1.209;y = y * 1000;return (unsigned int)y;
}void main(void)
{WDTCTL = WDTPW + WDTHOLD;                 // 停止看门狗定时器init_clock();                             // 初始化时钟init_uart();                              // 初始化UART串口init_adc();                               // 初始化ADC模块init_key();                               // 初始化按键init_beep();                              // 初始化蜂鸣器while (DHT22_Init() == 1)                 // 初始化DHT22温湿度传感器{delay_ms(100);                        // 延时100毫秒}delay_ms(1000);LCD_Init();                               // 初始化液晶屏disp_line2();                             // 在液晶屏上显示第二行_EINT();                                  // 开启总中断while (1)                                 // 无限循环{delay_ms(10);                         // 延时10毫秒timecnt++;                            // 时间计数器加1if (timecnt > 200)                    // 如果时间计数器超过200{timecnt = 0;                      // 重置时间计数器DHT22_Read_Data(data);            // 读取DHT22传感器数据shidu = data[0];                  // 湿度数据shidu = (shidu << 8) + data[1];   // 拼接数据wendu = data[2];                  // 温度数据wendu = (wendu << 8) + data[3];   // 拼接数据yanwu = get_adc();                // 获取烟雾浓度值//0到4096转为0到20000ppmyanwu = yw_ppm_count(yanwu);             // 将ADC值转换为烟雾浓度值contorl_beep();                    // 控制蜂鸣器disp_line1();                      // 在液晶屏上显示第一行disp_line2();                      // 在液晶屏上显示第二行send_computer();}keyvalue = get_key();                 // 获取按键值if (keyvalue)                         // 如果有按键按下{deal_key();                       // 处理按键disp_line2();                     // 在液晶屏上显示第二行}}
}unsigned char revchar = 0;                      // 定义一个无符号字符变量,初始值为0,用于保存接收到的字符
unsigned char revchar_openflag = 0;       // 定义一个无符号字符变量,初始值为0,用于标志接收到的字符是否为有效数据
unsigned char revchar_cnt = 0;               // 定义一个无符号字符变量,初始值为0,用于计数接收到的有效数据个数
unsigned char revchar_buffer[20];              // 定义一个无符号字符数组,长度为20,用于存储接收到的有效数据#pragma vector=USCI_A0_VECTOR                   // 定义中断函数,当 USCI_A0_VECTOR 中断发生时,执行以下函数
__interrupt void USCI_A0_ISR(void)
{switch (__even_in_range(UCA0IV, 4))// 获取 USCI_A0_VECTOR 中断的状态{case 0:                                     // Vector 0 - no interrupt,无中断状态break;case 2:                                     // Vector 2 - RXIFG,接收到数据的中断状态revchar = UCA0RXBUF;            // 读取 USCI_A0_VECTOR 的接收缓冲区数据到变量 revcharif (revchar_openflag)                   // 如果接收到的字符是有效数据{//S889912345                        // 检查接收到的数据是否符合特定的格式,如S889912345if ((revchar >= '0') && (revchar <= '9'))  // 如果接收到的数据是数字字符{revchar_buffer[revchar_cnt] = revchar - '0'; // 把接收到的数字字符转化为对应的数字存入 revchar_buffer 数组中revchar_cnt++;                              // 计数器加1if (revchar_cnt >= 9)                     // 如果接收到的数字字符数量达到特定的数量{shidu_baojing = revchar_buffer[0] * 100+ revchar_buffer[1] * 10;  // 计算湿度报警值wendu_baojing = revchar_buffer[2] * 100+ revchar_buffer[3] * 10;  // 计算温度报警值yanwu_baojing = revchar_buffer[4] * 10000+ revchar_buffer[5] * 1000 + revchar_buffer[6] * 100+ revchar_buffer[7] * 10 + revchar_buffer[8]; // 计算烟雾报警值revchar_openflag = 0;               // 清除接收标志revchar_cnt = 0;                    // 清除计数器}}else                                    // 如果接收到的字符不是数字字符{revchar_openflag = 0;               // 清除接收标志revchar_cnt = 0;                    // 清除计数器}}if (revchar == 'S'){revchar_openflag = 1;revchar_cnt = 0;}break;case 4:break;                             // Vector 4 - TXIFGdefault:break;}
}

全部程序

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

相关文章:

【TB作品】msp430f5529单片机,dht22,烟雾传感器

功能 //硬件&#xff1a;msp430f5529、dht22、LCD1602、蜂鸣器、烟雾传感器、蓝牙模块。 //功能&#xff1a;读取温湿度、烟雾浓度显示到屏幕&#xff1b; //按键调节三个报警数值&#xff1b; //温度、湿度、烟雾浓度&#xff0c;任意一个大于报警数值就蜂鸣器报警&#xff1…...

uni-app全局弹窗的实现方案

背景 为了解决uni-app 任意位置出现弹窗 解决方案 一、最初方案 受限于uni-app 调用组件需要每个页面都引入注册才可以使用&#xff0c;此方案繁琐&#xff0c;每个页面都要写侵入性比较强 二、改进方案 app端&#xff1a;新建一个页面进行跳转&#xff0c;可以实现伪弹窗…...

Love-Yi情侣网站3.0存在SQL注入漏洞

目录 1. 前言 2. 网站简介 3. 寻找特征点 3.1 第一次尝试 3.2 第二次尝试 4.资产搜索 5.漏洞复现 5.1 寻找漏洞点 5.2 进行进一步测试 5.2.1 手动测试 1.寻找字段 2.寻找回显位 3.查询当前用户 5.2.2 sqlmap去跑 6.总结 1. 前言 朋友说自己建了一个情侣网站,看到…...

自然语言处理(NLP)—— 神经网络语言处理

1. 总体原则 1.1 深度神经网络&#xff08;Deep Neural Network&#xff09;的训练过程 下图展示了自然语言处理&#xff08;NLP&#xff09;领域内使用的深度神经网络&#xff08;Deep Neural Network&#xff09;的训练过程的简化图。 在神经网络的NLP领域&#xff1a; 语料…...

SHA256计算原理

标签: SHA256计算原理;SHA256;SHA-2; SHA-256计算原理 SHA-256(Secure Hash Algorithm 256-bit)是SHA-2系列中的一种哈希算法,它由美国国家安全局(NSA)设计,并由美国国家标准与技术研究院(NIST)发布。SHA-256主要用于数据完整性验证和数字签名等领域。以下是SHA-…...

Mysql | select语句导入csv后再导入excel表格

需求 从mysql数据库中导出数据到excel 解决方案 sql导出csv文件 sql SELECT col1,col2 FROM tab_01 WHERE col3 xxx INTO OUTFILE /tmp/result.csv FIELDS TERMINATED BY , ENCLOSED BY " LINES TERMINATED BY \n;csv文件导出excel文件 1、【数据】-【导入数据】 …...

SpringBoot:手动创建应用

Spring提供了在线的Spring Initialzr在线创建Spring Boot项目&#xff0c;为了更好的理解Spring Boot项目&#xff0c;这里我们选择手动创建。 1.新建Web应用 1.1 生成工程 首先要做是创建一个Java项目&#xff0c;这里我们选择使用Maven来支持&#xff0c;使用archetype:ge…...

【LeetCode】39.组合总和

组合总和 题目描述&#xff1a; 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个…...

用JS来控制遥控车(一行代码即可连接, 超简单!)

简介 有些时候我们想要做车辆的某一个功能&#xff0c;但是又不想浪费时间做整辆小车时&#xff0c;一般会去买一辆差不多的遥控车来改&#xff0c;但是那也比较麻烦&#xff0c;市面上好像也没有便宜的直接提供编程接口的遥控车。所以就自己做一个吧~。 主要是要实现向外提供…...

MyBatis-Plus如何优雅的配置多租户及分页

MyBatis-Plus如何优雅的配置多租户及分页 一、配置多租户1、步骤一2、步骤二3、步骤三步骤四 二、配置分页1、步骤一2、步骤二3、步骤三 一、配置多租户 TenantLineInnerInterceptor 是 MyBatis-Plus 提供的一个插件&#xff0c;用于实现多租户的数据隔离。通过这个插件&#…...

国产操作系统上Vim的详解01--vim基础篇 _ 统信 _ 麒麟 _ 中科方德

原文链接&#xff1a;国产操作系统上Vim的详解01–vim基础篇 | 统信 | 麒麟 | 中科方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇在国产操作系统上使用Vim的详解文章。Vim是一款功能强大且高度可定制的文本编辑器&#xff0c;广泛应用于编程和日常文本编辑中。…...

如何正确理解事件溯源架构模式?

在微服务架构盛行的当下&#xff0c;DDD&#xff08;领域驱动设计&#xff09;也得到了崭新的发展。同时&#xff0c;随着DDD的不断发展&#xff0c;也诞生了一些新的设计思想和开发模式&#xff0c;今天要介绍的事件溯源是其中具有代表性的一种模式。 事件溯源模式是DDD领域中…...

【漏洞复现】电信网关配置管理系统 rewrite.php 文件上传漏洞

0x01 产品简介 中国电信集团有限公司(英文名称"China Telecom”、简称“"中国电信”)成立于2000年9月&#xff0c;是中国特大型国有通信企业、上海世博会全球合作伙伴。电信网关配置管理系统是一个用于管理和配置电信网络中网关设备的软件系统。它可以帮助网络管理员…...

线性调整率:LINE REGULATION详解

目录 一、概述 二、 举例 一、概述 LDO&#xff08;低压差线性稳压器&#xff09;的LINE REGULATION&#xff08;线路调整或线性调整&#xff09;参数是一个衡量稳压器输出稳定性的重要指标。它反映了LDO输出电压对输入电压变化的响应程度。 当输入电压在其规定的工作范围内变…...

Workfine默认首页功能详解

一、基本介绍 Workfine V6.3推出了默认的用户首页功能&#xff0c;这样用户在登入系统后就可以通过默认的首页栏进行一些业务操作。第一版的用户首页功能布局了审批&#xff0c;制单&#xff0c;业务导航&#xff0c;便捷入口&#xff0c;消息和预警六大块内容&#xff0c;后续…...

CSAPP Lab07——Malloc Lab完成思路

等不到天黑 烟火不会太完美 回忆烧成灰 还是等不到结尾 ——她说 完整代码见&#xff1a;CSAPP/malloclab-handout at main SnowLegend-star/CSAPP (github.com) Malloc Lab 按照惯例&#xff0c;我先是上来就把mm.c编译了一番&#xff0c;结果产生如下报错。搜索过后看样子应…...

简单、免费、无广告的高性能多线程文件下载工具

一、简介 1、它是一款免费、无广告的高性能多线程文件下载工具。它界面简洁&#xff0c;简单好用&#xff0c;压缩包大小仅有 0.7MB&#xff0c;目前仅支持 Windows 平台。 2、使用方法&#xff1a;点击程序左上角的【】按钮&#xff0c;将需要的链接输入进去后点击【下载】即…...

【退役之重学 SQL】什么是笛卡尔积

一、初识笛卡尔积 概念&#xff1a; 笛卡尔积是指在关系型数据库中&#xff0c;两个表进行 join 操作时&#xff0c;没有指定任何条件&#xff0c;导致生成的结果集&#xff0c;是两个表中所有行的组合。 简单来说&#xff1a; 笛卡尔积是两个表的乘积&#xff0c;结果集中的每…...

Vue3禁止 H5 界面放大与缩小功能

Vue3禁止 H5 界面放大与缩小功能 一、前言1.第一步2.第二部3.总结 一、前言 当涉及到禁止 H5 界面的放大与缩小功能时&#xff0c;Vue 3 提供了一种方便的方式来处理。我们可以使用 <script setup> 语法&#xff0c;将相关代码添加到 App.vue 组件中&#xff0c;以确保在…...

上位机图像处理和嵌入式模块部署(f407 mcu中tf卡读写和fatfs挂载)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 很早之前&#xff0c;个人对tf卡并不是很重视&#xff0c;觉得它就是一个存储工具而已。后来在移植v3s芯片的时候&#xff0c;才发现很多的soc其实…...

如何用OpenCATS免费开源招聘系统3天搭建企业级人才库

如何用OpenCATS免费开源招聘系统3天搭建企业级人才库 【免费下载链接】OpenCATS Open-source applicant tracking system (ATS) and recruitment CRM for staffing agencies and hiring teams. 项目地址: https://gitcode.com/gh_mirrors/op/OpenCATS 还在为招聘流程混乱…...

2026年5款专业气象数据可视化软件大盘点

在科技飞速发展的今天&#xff0c;气象可视化作为一种将复杂气象数据转化为直观图像的技术&#xff0c;正发挥着越来越重要的作用。它不仅为气象工作者提供了便捷的数据分析手段&#xff0c;也让普通大众能够轻松理解天气变化。接下来&#xff0c;让我们一起深入了解气象可视化…...

背单词为什么不背词典:CANN上FlashAttention的分块逻辑

上个月有个实习生问我&#xff0c;为什么昇腾CANN的ops-transformer仓库里&#xff0c;FlashAttention算子比标准实现快那么多。我说你先想一个问题&#xff1a;背四级单词&#xff0c;你是把整本词典摊开从头背&#xff0c;还是一次看一页&#xff1f;他说当然是看一页。我说对…...

昇腾CANN ascend-boost-comm:M×N 算子复用是怎么做到的

CANN 生态里 50 多个仓库&#xff0c;每个仓库有十几到几十个算子。这些算子之间存在大量公共功能&#xff1a;内存搬运算子需要数据切分、通信算子需要拓扑发现、融合算子需要 shape 推导。如果每个仓库各自实现一遍&#xff0c;代码膨胀的同时&#xff0c;任何一个公共功能的…...

别再只读原始值了!MPU6050数据滤波与姿态解算入门:用STM32实现简易角度估算

从原始数据到稳定姿态&#xff1a;MPU6050滤波与解算实战指南 当你第一次成功读取MPU6050的原始数据时&#xff0c;可能会被那些不断跳动的数值弄得手足无措。这些看似杂乱的数据背后&#xff0c;隐藏着设备在三维空间中的运动秘密。本文将带你超越基础的数据读取&#xff0c;探…...

Prodigal基因预测工具:3天快速掌握原核生物基因发现终极指南

Prodigal基因预测工具&#xff1a;3天快速掌握原核生物基因发现终极指南 【免费下载链接】Prodigal Prodigal Gene Prediction Software 项目地址: https://gitcode.com/gh_mirrors/pr/Prodigal 你是否正在寻找一款快速、准确的原核生物基因预测工具&#xff1f;Prodiga…...

AMD GPU本地AI模型部署终极指南:ollama-for-amd让你的Radeon显卡焕发新生

AMD GPU本地AI模型部署终极指南&#xff1a;ollama-for-amd让你的Radeon显卡焕发新生 【免费下载链接】ollama-for-amd Get up and running with Llama 3, Mistral, Gemma, and other large language models.by adding more amd gpu support. 项目地址: https://gitcode.com/…...

kagent支持的5大AI框架对比:ADK、CrewAI、LangGraph、OpenAI、技能框架

kagent支持的5大AI框架对比&#xff1a;ADK、CrewAI、LangGraph、OpenAI、技能框架 【免费下载链接】kagent Cloud Native Agentic AI | Discord: https://bit.ly/kagentdiscord 项目地址: https://gitcode.com/gh_mirrors/ka/kagent kagent作为一款云原生智能代理平台&…...

Python点云数据处理避坑指南:pypcd与pypcd4库在Ubuntu下的安装与实战对比

Python点云数据处理避坑指南&#xff1a;pypcd与pypcd4库在Ubuntu下的安装与实战对比 在3D视觉、自动驾驶和机器人开发领域&#xff0c;点云数据处理是基础而关键的环节。Ubuntu作为主流的开发环境&#xff0c;配合Python生态中的pypcd和pypcd4库&#xff0c;为工程师提供了高…...

服务器电源、电机驱动、UPS:IRLR3636TRPBF的60V功率MOSFET应用版图

IRLR3636TRPBF&#xff1a;DPAK封装60V/50A N沟道功率MOSFET的大电流开关应用解析在大功率开关电源、不间断电源以及直流电机驱动等领域&#xff0c;功率MOSFET的导通损耗直接影响系统的温升和能效等级。当设计需要在60V电压平台上处理50A级别的大电流时&#xff0c;导通电阻和…...