【32项目】基于stm32f103c8t6WIFI远程监控智慧农业大棚(含完整代码)

目录

前言

设计背景

设计原理

所需材料

JW01二氧化碳传感器介绍

YL-69土壤湿度传感器介绍

PCB及原理图

部分代码(完整代码见文章末尾)


前言

随着农业现代化的发展,智慧农业的概念越来越受到重视。智慧农业利用物联网、大数据、人工智能等技术,实现对农业生产过程的智能化管理,提高农业生产效率和效益。

本人每天会不定时更新一些项目。

设计背景

随着人口的不断增长和气候变化的不确定性,传统的农业生产模式已经无法满足日益增长的食品需求。智能农业大棚作为一种现代化的农业生产方式,借助先进的传感技术、自动化控制和远程监测,能够实现对植物生长环境的精准调控,提高农作物的产量和质量,同时减少资源浪费和环境污染。

本研究以STM32微控制器为核心,结合先进的传感器技术和云平台连接,设计了一套智能农业大棚管理系统。该系统不仅能够实时监测大棚内的环境参数,如温湿度、光照强度和土壤状况,还能通过自动化控制实现对风扇、水泵和步进电机等设备的精准操作。通过远程监控和控制,用户可以随时随地了解大棚内部情况,并进行远程调节,使得农业生产更加智能高效。

设计原理

智能农业大棚管理系统的设计基于STM32微控制器,目的在实现对大棚环境的全面监测和自动化控制。系统涉及硬件和软件两个层面,下面将分别介绍这两个方面的设计思路。

(1)硬件部分

硬件设计是系统的基础,主要包括STM32微控制器、传感器模块、执行模块以及显示模块。

首先,选择STM32微控制器作为系统的核心,由于其低功耗、高性能的特点,能够满足大棚管理系统对实时性和稳定性的要求。同时,STM32具有丰富的外设接口,便于与各种传感器和执行模块进行连接。

传感器模块包括环境温湿度传感器、土壤温湿度传感器、光照强度传感器和二氧化碳传感器。这些传感器通过模拟或数字接口与STM32连接,实时采集大棚内的环境数据。

执行模块主要包括风扇、水泵和步进电机。这些模块通过数字输出口与STM32连接,实现对大棚内环境的精准控制。

最后,为了方便用户了解系统运行状态,采用OLED屏幕进行数据显示。用户可以通过屏幕直观地查看大棚内的温湿度、光照强度等信息。

(2)软件部分

软件设计是系统的智能核心,主要包括检测功能、显示功能、控制功能、手动模式、自动模式、报警功能、阈值调节、接入云平台和远程控制。

检测功能通过编程实现对各种传感器的数据采集,确保系统能够及时准确地获取大棚内的环境信息。

显示功能通过STM32控制OLED屏幕,将检测到的环境数据实时显示,使用户能够直观地了解大棚内部状况。

控制功能通过编写控制算法,实现对风扇、水泵和步进电机等执行模块的精准控制,以满足大棚内环境的需求。

手动模式通过手机APP或小程序,用户可以远程手动控制设备的运行状态,灵活应对特殊情况。

自动模式通过设定预设的阈值,系统能够自动判断环境状态,实现自动控制设备的开启和关闭,从而维持大棚内的理想环境。

报警功能通过蜂鸣器进行提示,当传感器数据超出设定的阈值范围时,系统及时报警,提醒用户注意。

阈值调节通过按键手动调节传感器的阈值,使系统更加灵活适应不同的种植需求。

接入云平台通过ESP8266 WIFI模块连接网络,实现数据传输和接入机智云服务器,为系统提供更广泛的监控和控制手段。

远程控制通过APP,用户可以随时随地查看传感器数据,并进行远程控制,实现对大棚的全程管理。

所需材料

0.96OLED模块_4P1
风扇1
串口1
水泵1
JW01二氧化碳传感器1
YL-69土壤湿度传感器1
按键11
按键21
按键31
按键41
4.7kΩ3
GL5528(10-20)光敏电阻1
10kΩ1
2kΩ2
20kΩ2
20Ω2
150Ω1
继电器2
DHT11温湿度传感器1
S80503
ULN2003A1
步进电机1
STM32F103C8T6核心板1
DS18B20温度传感器1

JW01二氧化碳传感器介绍

JW01 二氧化碳传感器是一种用于检测空气中二氧化碳浓度的传感器。它通常用于以下应用:

室内空气质量监测:监测室内二氧化碳浓度,以确保空气质量良好,并提醒用户通风。
温室气体监测: 监测温室中的二氧化碳浓度,以优化植物生长条件。
工业过程控制: 监测工业过程中的二氧化碳浓度,以确保安全和效率。

JW01 二氧化碳传感器的工作原理是基于非分散红外 (NDIR) 技术。NDIR 技术利用二氧化碳对特定波长的红外光的吸收特性来检测二氧化碳浓度。

JW01 二氧化碳传感器的主要特点:

高精度:能够准确测量空气中的二氧化碳浓度。
低功耗: 功耗低,适合电池供电的应用。
快速响应: 能够快速响应二氧化碳浓度变化。
稳定性好:具有良好的长期稳定性,能够长时间可靠地工作。
体积小巧:体积小巧,易于安装。

JW01 二氧化碳传感器的应用:

智能家居: 用于监测室内空气质量,并提醒用户通风。
智能农业:用于监测温室中的二氧化碳浓度,以优化植物生长条件。
工业自动化:用于监测工业过程中的二氧化碳浓度,以确保安全和效率。
医疗保健: 用于监测患者呼出的二氧化碳浓度,以诊断和治疗疾病。

JW01 二氧化碳传感器是一种可靠且实用的传感器,可用于各种应用。
 

引脚功能
+5电源正极
GND电源负极
ARXD
BTXD

YL-69土壤湿度传感器介绍

YL-69 土壤湿度传感器是一种用于测量土壤水分含量的传感器。它通常用于以下应用:

  • 农业: 监测土壤水分,以优化灌溉时间和水量,提高作物产量。
  • 园艺: 监测盆栽植物的土壤水分,以确保植物获得充足的水分。
  • 环境监测: 监测土壤水分,以评估土壤水分状况和水资源管理。

YL-69 土壤湿度传感器的工作原理是基于电阻式测量原理。传感器包含两个电极,当土壤水分含量较高时,电极之间的电阻较低,反之则较高。传感器通过测量电极之间的电阻来判断土壤水分含量。

YL-69 土壤湿度传感器的主要特点:

  • 高灵敏度: 能够准确测量土壤水分含量的细微变化。
  • 响应速度快: 能够快速响应土壤水分含量的变化。
  • 耐用性强: 能够承受恶劣的土壤环境。
  • 体积小巧: 体积小巧,易于安装。
  • 价格低廉: 价格低廉,适合大规模应用。

YL-69 土壤湿度传感器的应用:

  • 智能灌溉系统: 用于监测土壤水分,并自动控制灌溉系统,以优化灌溉时间和水量。
  • 温室控制系统: 用于监测土壤水分,并自动控制温室环境,以确保植物获得最佳生长条件。
  • 土壤水分监测系统: 用于监测土壤水分,以评估土壤水分状况和水资源管理。

YL-69 土壤湿度传感器是一种可靠且实用的传感器,可用于各种土壤水分监测应用。

PCB及原理图

部分代码(完整代码见文章末尾)

main.c部分

#include "stm32f10x.h"                  // Device header
#include "iwdg.h"
#include "adcx.h"
#include "ldr.h"
#include "oled.h"
#include "dht11.h"
#include "led.h"
#include "key.h"
#include "tim2.h"   
#include "tim3.h"   
#include "usart3.h"   
#include "usart.h"
#include "yl_69.h"
#include "motor.h"
#include "sensormodules.h"
#include "gizwits_product.h"
#include "flash.h"#define KEY_1	1
#define KEY_2	2
#define KEY_3	3
#define KEY_4	4#define FLASH_START_ADDR	0x0801f000	//写入的起始地址SensorModules sensorData;	//声明传感器数据结构体变量
SensorThresholdValue Sensorthreshold;	//声明传感器阈值结构体变量uint8_t menu = 1;	//显示菜单变量
uint8_t OLED_Clear_Flag;	//阈值设置界面的清屏标志位
uint8_t mode = 0;	//系统模式enum 
{display_page1 = 1,display_page2,settingsPage}MenuPages;/*** @brief  显示菜单1的固定内容* @param  无* @retval 无*/
void OLED_Menu1(void)
{//显示系统名OLED_ShowChinese(1, 1, 0);OLED_ShowChinese(1, 2, 1);OLED_ShowChinese(1, 3, 2);OLED_ShowChinese(1, 4, 3);OLED_ShowChinese(1, 5, 4);OLED_ShowChinese(1, 6, 5);OLED_ShowChinese(1, 7, 6);OLED_ShowChinese(1, 8, 7);//显示“系统模式:”OLED_ShowChinese(2, 1, 6);OLED_ShowChinese(2, 2, 7);OLED_ShowChinese(2, 3, 19);OLED_ShowChinese(2, 4, 20);	OLED_ShowChar(2, 9, ':');//显示”光照强度:  Lux“OLED_ShowChinese(3, 1, 15);OLED_ShowChinese(3, 2, 16);	OLED_ShowChinese(3, 3, 28);OLED_ShowChinese(3, 4, 29);	OLED_ShowChar(3, 9, ':');OLED_ShowString(3, 14, "Lux");//显示“二氧化碳: ”OLED_ShowChinese(4, 1, 24);OLED_ShowChinese(4, 2, 25);OLED_ShowChinese(4, 3, 26);OLED_ShowChinese(4, 4, 27);OLED_ShowChar(4, 9, ':');OLED_ShowString(4, 14, "ppm");
}/*** @brief  显示菜单2的固定内容* @param  无* @retval 无*/
void OLED_Menu2(void)
{//显示“环境温度:  C”OLED_ShowChinese(1, 1, 13);OLED_ShowChinese(1, 2, 14);OLED_ShowChinese(1, 3, 8);OLED_ShowChinese(1, 4, 9);	OLED_ShowChar(1, 9, ':');OLED_ShowChar(1, 12, 'C');//显示“环境湿度:  %”OLED_ShowChinese(2, 1, 13);OLED_ShowChinese(2, 2, 14);OLED_ShowChinese(2, 3, 10);OLED_ShowChinese(2, 4, 9);	OLED_ShowChar(2, 9, ':');OLED_ShowChar(2, 12, '%');		//显示“土壤温度:  C”OLED_ShowChinese(3, 1, 11);OLED_ShowChinese(3, 2, 12);OLED_ShowChinese(3, 3, 8);OLED_ShowChinese(3, 4, 9);	OLED_ShowChar(3, 9, ':');OLED_ShowChar(3, 12, 'C');		//显示“土壤湿度:  %”OLED_ShowChinese(4, 1, 11);OLED_ShowChinese(4, 2, 12);OLED_ShowChinese(4, 3, 10);OLED_ShowChinese(4, 4, 9);	OLED_ShowChar(4, 9, ':');OLED_ShowChar(4, 12, '%');	
}/*** @brief  显示菜单1的传感器数据* @param  无* @retval 无*/
void SensorDataDisplay1(void)
{//显示系统状态数据if (!mode){OLED_ShowChinese(2, 6, 21);OLED_ShowChinese(2, 7, 22);		}else{OLED_ShowChinese(2, 6, 23);OLED_ShowChinese(2, 7, 22);			}//显示光照强度数据OLED_ShowNum(3, 10, sensorData.lux, 4);//显示CO2浓度数据OLED_ShowNum(4, 10, sensorData.CO2, 4);
}/*** @brief  显示菜单2的传感器数据* @param  无* @retval 无*/
void SensorDataDisplay2(void)
{//显示环境温度数据OLED_ShowNum(1, 10, sensorData.temp, 2);//显示环境湿度数据OLED_ShowNum(2, 10, sensorData.humi, 2);//显示土壤温度数据OLED_ShowNum(3, 10, sensorData.soilTemp, 2);//显示土壤湿度数据OLED_ShowNum(4, 10, sensorData.soilHumi, 2);
}/*** @brief  显示阈值设置界面1的固定内容* @param  无* @retval 无*/
void OLED_settingsPage1(void)
{//显示“环境温度:”OLED_ShowChinese(1, 2, 13);OLED_ShowChinese(1, 3, 14);OLED_ShowChinese(1, 4, 8);OLED_ShowChinese(1, 5, 9);	OLED_ShowChar(1, 11, ':');//显示“环境湿度:”OLED_ShowChinese(2, 2, 13);OLED_ShowChinese(2, 3, 14);OLED_ShowChinese(2, 4, 10);OLED_ShowChinese(2, 5, 9);	OLED_ShowChar(2, 11, ':');//显示“土壤温度:”OLED_ShowChinese(3, 2, 11);OLED_ShowChinese(3, 3, 12);OLED_ShowChinese(3, 4, 8);OLED_ShowChinese(3, 5, 9);	OLED_ShowChar(3, 11, ':');//显示“土壤湿度:”OLED_ShowChinese(4, 2, 11);OLED_ShowChinese(4, 3, 12);OLED_ShowChinese(4, 4, 10);OLED_ShowChinese(4, 5, 9);	OLED_ShowChar(4, 11, ':');
}/*** @brief  显示阈值设置界面2的固定内容* @param  无* @retval 无*/
void OLED_settingsPage2(void)
{//显示”光照强度:“OLED_ShowChinese(1, 2, 15);OLED_ShowChinese(1, 3, 16);	OLED_ShowChinese(1, 4, 28);OLED_ShowChinese(1, 5, 29);	OLED_ShowChar(1, 11, ':');//显示“二氧化碳:”OLED_ShowChinese(2, 2, 24);OLED_ShowChinese(2, 3, 25);OLED_ShowChinese(2, 4, 26);OLED_ShowChinese(2, 5, 27);OLED_ShowChar(2, 11, ':');	
}/*** @brief  显示阈值界面1的传感器数据* @param  无* @retval 无*/
void settingsThresholdDisplay1(void)
{//显示环境温度阈值数据OLED_ShowNum(1, 13, Sensorthreshold.tempValue, 2);//显示环境湿度阈值数据OLED_ShowNum(2, 13, Sensorthreshold.humiValue, 2);//显示土壤温度阈值数据OLED_ShowNum(3, 13, Sensorthreshold.soilTempValue, 2);//显示土壤湿度阈值数据OLED_ShowNum(4, 13, Sensorthreshold.soilHumiValue, 2);
}/*** @brief  显示阈值界面2的传感器数据* @param  无* @retval 无*/
void settingsThresholdDisplay2(void)
{//显示光照强度阈值数据OLED_ShowNum(1, 13, Sensorthreshold.luxValue, 4);//显示CO2浓度阈值数据OLED_ShowNum(2, 13, Sensorthreshold.CO2Value, 4);
}/*** @brief  显示阈值界面的选择符号* @param  num 为显示的位置* @retval 无*/
void OLED_Option(uint8_t num)
{switch(num){case 1:	OLED_ShowChar(1,1,'>');OLED_ShowChar(2,1,' ');OLED_ShowChar(3,1,' ');OLED_ShowChar(4,1,' ');break;case 2:	OLED_ShowChar(1,1,' ');OLED_ShowChar(2,1,'>');OLED_ShowChar(3,1,' ');OLED_ShowChar(4,1,' ');break;case 3:	OLED_ShowChar(1,1,' ');OLED_ShowChar(2,1,' ');OLED_ShowChar(3,1,'>');OLED_ShowChar(4,1,' ');break;case 4:	OLED_ShowChar(1,1,' ');OLED_ShowChar(2,1,' ');OLED_ShowChar(3,1,' ');OLED_ShowChar(4,1,'>');break;case 5:	OLED_ShowChar(1,1,'>');OLED_ShowChar(2,1,' ');OLED_ShowChar(3,1,' ');OLED_ShowChar(4,1,' ');break;case 6:	OLED_ShowChar(1,1,' ');OLED_ShowChar(2,1,'>');OLED_ShowChar(3,1,' ');OLED_ShowChar(4,1,' ');break;default: break;}
}/*** @brief  根据标志位控制步进电机的运行* @param  无* @retval 无*/
void MotorOperation(void)
{if (motorFlag == 1){MOTOR_Direction_Angle(1, 0, 90, 1);MOTOR_STOP();motorFlag = 0;}else if (motorFlag == 2){MOTOR_Direction_Angle(0, 0, 90, 1);MOTOR_STOP();motorFlag = 0;		}}/*** @brief  记录阈值界面下按KEY1的次数* @param  无* @retval 返回次数*/
uint8_t SetSelection(void)
{static uint8_t count = 1;if(KeyNum == KEY_1){KeyNum = 0;count++;if (count == 5){OLED_Clear();}else if (count > 6){OLED_Clear();count = 1;}}return count;
}/*** @brief  对阈值界面的传感器阈值进行修改* @param  num 为当前用户需要更改的传感器阈值位置* @retval 无*/
void ThresholdModification(uint8_t num)
{switch (num){case 1:if (KeyNum == 3){KeyNum = 0;Sensorthreshold.tempValue++;if (Sensorthreshold.tempValue > 99){Sensorthreshold.tempValue = 1;}}else if (KeyNum == 4){KeyNum = 0;Sensorthreshold.tempValue--;if (Sensorthreshold.tempValue < 1){Sensorthreshold.tempValue = 99;}				}break;case 2:if (KeyNum == 3){KeyNum = 0;Sensorthreshold.humiValue++;if (Sensorthreshold.humiValue > 99){Sensorthreshold.humiValue = 1;}}else if (KeyNum == 4){KeyNum = 0;Sensorthreshold.humiValue--;if (Sensorthreshold.humiValue < 1){Sensorthreshold.humiValue = 99;}				}			break;case 3:if (KeyNum == 3){KeyNum = 0;Sensorthreshold.soilTempValue++;if (Sensorthreshold.soilTempValue > 99){Sensorthreshold.soilTempValue = 1;}}else if (KeyNum == 4){KeyNum = 0;Sensorthreshold.soilTempValue--;if (Sensorthreshold.soilTempValue < 1){Sensorthreshold.soilTempValue = 99;}				}break;case 4:if (KeyNum == 3){KeyNum = 0;Sensorthreshold.soilHumiValue++;if (Sensorthreshold.soilHumiValue > 99){Sensorthreshold.soilHumiValue = 1;}}else if (KeyNum == 4){KeyNum = 0;Sensorthreshold.soilHumiValue--;if (Sensorthreshold.soilHumiValue < 1){Sensorthreshold.soilHumiValue = 99;}				}break;case 5:if (KeyNum == 3){KeyNum = 0;Sensorthreshold.luxValue += 10;if (Sensorthreshold.luxValue > 2000){Sensorthreshold.luxValue = 0;}}else if (KeyNum == 4){KeyNum = 0;Sensorthreshold.luxValue -= 10;if (Sensorthreshold.luxValue > 2000){Sensorthreshold.luxValue = 2000;}				}			break;case 6:if (KeyNum == 3){KeyNum = 0;Sensorthreshold.CO2Value += 10;if (Sensorthreshold.CO2Value > 2000){Sensorthreshold.CO2Value = 0;}}else if (KeyNum == 4){KeyNum = 0;Sensorthreshold.CO2Value -= 10;if (Sensorthreshold.CO2Value > 2000){Sensorthreshold.CO2Value = 2000;}				}break;	default: break;		}
}/*** @brief  获取二氧化碳数据* @param  *data 为数据传参* @retval 无*/
void CO2GetData(uint16_t *data)
{if (Usart3_RxFlag == 1){Usart3_RxFlag = 0;*data = Usart3_RxPacket[1] * 256 + Usart3_RxPacket[2];}
}/*** @brief  传感器数据扫描* @param  无* @retval 无*/
void SensorScan(void)
{DHT11_Read_Data(&sensorData.humi, &sensorData.temp);YL69_PercentageData(&sensorData.soilHumi);LDR_LuxData(&sensorData.lux);CO2GetData(&sensorData.CO2);DS18B20_Read_Temp(&sensorData.soilTemp);
}int main(void)
{ADCX_Init();Timer2_Init(9,14398);Uart2_Init(9600);Uart1_Init(115200);Uart3_Init();IWDG_Init();	//初始化看门狗LDR_Init();YL69_Init();OLED_Init();DHT11_Init();LED_Init();Buzzer_Init();Relay_Init();MOTOR_Init();Key_Init();Sensorthreshold.CO2Value = FLASH_R(FLASH_START_ADDR);	//从指定页的地址读FLASHSensorthreshold.luxValue = FLASH_R(FLASH_START_ADDR+2);	//从指定页的地址读FLASHSensorthreshold.tempValue = FLASH_R(FLASH_START_ADDR+4);	//从指定页的地址读FLASHSensorthreshold.humiValue = FLASH_R(FLASH_START_ADDR+6);	//从指定页的地址读FLASHSensorthreshold.soilTempValue = FLASH_R(FLASH_START_ADDR+8);	//从指定页的地址读FLASHSensorthreshold.soilHumiValue = FLASH_R(FLASH_START_ADDR+10);	//从指定页的地址读FLASHGENERAL_TIM_Init();userInit();		//完成机智云初始赋值gizwitsInit();	//开辟一个环形缓冲区while (1){IWDG_ReloadCounter(); //重新加载计数值 喂狗SensorScan();	//获取传感器数据switch (menu){case display_page1:SensorDataDisplay1();	//显示传感器1数据OLED_Menu1();	//显示主页面1固定信息if (KeyNum == KEY_2)	//是否按下按键2{KeyNum = 0;OLED_Clear();	//清屏menu = display_page2;	//menu = 主页面2}MotorOperation();break;case display_page2:		SensorDataDisplay2();	//显示传感器2数据		OLED_Menu2();	//显示主页面2固定信息if (KeyNum == KEY_2)	//是否按下按键2{KeyNum = 0;OLED_Clear();	//清屏menu = display_page1;	//menu = 主页面1}MotorOperation();break;case settingsPage://从主页面跳转至设置页面时进行一次清屏if (OLED_Clear_Flag){OLED_Clear_Flag = 0;	//清除清屏标志位OLED_Clear();	//清屏}ThresholdModification(SetSelection());	//调节传感器阈值OLED_Option(SetSelection());	//获取按键次数,从而判断“>”显示位置//按键次数小于等于4时,显示设置页面1if (SetSelection() <= 4)		{settingsThresholdDisplay1();	//显示传感器阈值1数据	OLED_settingsPage1();	//显示阈值设置界面1固定信息}else	//否则显示设置页面2{settingsThresholdDisplay2();	//显示传感器阈值2数据	OLED_settingsPage2();	//显示阈值设置界面2固定信息}if (KeyNum == KEY_2)	//判断用户是否按下退出按键{KeyNum = 0;OLED_Clear();	//清屏menu = display_page1;	//回到主页面1//存储修改的传感器阈值至flash内FLASH_W(FLASH_START_ADDR, Sensorthreshold.CO2Value, Sensorthreshold.luxValue,Sensorthreshold.tempValue, Sensorthreshold.humiValue,Sensorthreshold.soilTempValue, Sensorthreshold.soilHumiValue);}break;default: break;}userHandle();	//更新机智云数据点变量存储的值gizwitsHandle((dataPoint_t *)&currentDataPoint);	//数据上传至机智云					}
}

完整代码:

通过网盘分享的文件:4.程序.zip
链接: https://pan.baidu.com/s/1IxBrhDwdfaMWIZFxjigeYg?pwd=hubv 提取码: hubv

————由于博主还是大三的在读生,时间有限,每天会不定时更新一些学习经验和一些32的项目,如果喜欢就点点关注吧,大佬们!!!!————

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络 数据链路层2

ALOHA:想发就发 CSMA 载波监听多路访问协议 CS&#xff1a;载波监听&#xff0c;在发送数据之前检测总线上是否有其他计算机在发送数据 1-坚持CSMA:主机想发送消息&#xff0c;需要监听信道&#xff1b; 信道空闲则直接传输信息&#xff1b; 信道忙碌则一直监听&#xff0c;直…

【JavaWeb】JDBCDruidTomcat入门使用

本章使用技术版本&#xff1a; Tomcatv10.1.25 关于javaweb相关的其他技术&#xff0c;比如tomcat和maven&#xff0c;在我的主页记录了笔记&#xff0c;ajax我用的是本地笔记以后再考虑上传&#xff0c;前端三板斧我用的菜鸟教程文档 JDBC 初识 JDBC概念 JDBC 就是使用Jav…

【深度学习 transformer】使用pytorch 训练transformer 模型,hugginface 来啦

Hugging Face是一个致力于开源自然语言处理&#xff08;NLP&#xff09;和机器学习项目的社区。它由几个关键组件组成&#xff1a; Transformers&#xff1a;这是一个基于PyTorch的库&#xff0c;提供了各种预训练的NLP模型&#xff0c;如BERT、GPT、RoBERTa、DistilBERT等。它…

SEO之网站结构优化(十四-内部链接及权重分配3)

初创企业搭建网站的朋友看1号文章&#xff1b;想学习云计算&#xff0c;怎么入门看2号文章谢谢支持&#xff1a; 1、我给不会敲代码又想搭建网站的人建议 2、“新手上云”能够为你开启探索云世界的第一步 博客&#xff1a;阿幸SEO~探索搜索排名之道 7、锚文字分布及变化 前面…

WebGIS与WebGL是什么,两者之间的关系?

WebGL和 WebGlS 都是 web 技术领域的重要内容&#xff0c;特别是这几年webgis开发领域&#xff0c;和webgl打交道是必然的&#xff0c;常见的WebGL开发的基础上&#xff0c;比如二维的Leaflet、三维的Cesium也都是热门。 WebGL是一种基于 HTML5 Canvas 元素的 JavaScriptAPI&a…

RLHF(带有人类反馈的强化学习)初探

我的目标是&#xff0c;在决策游戏上学习某人风格&#xff0c;可以让人对战“带有某人风格”的AI&#xff0c;比如你可以在这里对战“sky风格的AI”,这样的效果。 我最开始受到的启发来源于xbox的广告《爸爸的幽灵车》&#xff0c;已故人在游戏中留下的速度记录的固定轨迹。 …

IOS17.0安装巨魔:TrollRestore巨魔发布

&#x1f47b; TrollRestore 17.0 巨魔发布 15.0 - 16.7 RC&#xff08;20H18&#xff09;和17.0。 官网&#xff1a;https://trollrestore.com/ 下载&#xff1a;https://pan.metanetdisk.com/IOS/%E5%B7%A8%E9%AD%94%E7%8E%A9%E5%AE%B6/TrollRestore.com 使用&#xff1a;ht…

【数字人】Facevid2vid:用于视频会议的一次性自由视图说话头合成

论文&#xff1a;https://arxiv.org/pdf/2011.15126 github:GitHub - zhanglonghao1992/One-Shot_Free-View_Neural_Talking_Head_Synthesis: Pytorch implementation of paper "One-Shot Free-View Neural Talking-Head Synthesis for Video Conferencing" 一种新颖…

缓存分布式一致性问题

缓存一致性问题发生的原因&#xff0c;是在更新数据时数据库和缓存数据的不一致。我们要做到保证缓存的最终一致性。如果数据需要强一致性建议直接查询数据库。 双写模式 双写模式为先写数据库&#xff0c;在写缓存。 进来两个请求&#xff0c;先执行“请求1”的操作写入数据…

装WebVideoCreator记录

背景&#xff0c;需要在docker容器内配置WebVideoCreator环境&#xff0c;配置npm、node.js https://github.com/Vinlic/WebVideoCreatorWebVideoCreator地址&#xff1a;https://github.com/Vinlic/WebVideoCreator 配置环境&#xff0c;使用这个教程&#xff1a; linux下安…

Spring Boot-自定义banner

在 Spring Boot 应用中&#xff0c;你可以自定义启动时显示的 banner。这些 banner 可以包括图形、文字或者其他形式的标识。如图所示&#xff1a; 1. 使用 banner.txt 文件 默认情况下&#xff0c;Spring Boot 使用项目的 banner.txt 文件中的内容作为启动时的 banner。你可以…

文献阅读:对区域间皮层投射神经元命运多样性的时间控制

文献介绍 文献题目&#xff1a; 对区域间皮层投射神经元命运多样性的时间控制 研究团队&#xff1a; Denis Jabaudon&#xff08;瑞士日内瓦大学&#xff09; 发表时间&#xff1a; 2021-11-09 发表期刊&#xff1a; Nature 影响因子&#xff1a; 49.9&#xff08;2021年&am…

关于电力系统的几个疑问

非电力专业人员对于电力中的某些知识不能够形成系统的认识&#xff0c;接下有空也有补充下这方面知识&#xff0c;吹水时候才有水可以吹&#xff0c;嘻嘻&#xff01;这里舍不得删掉下边chatgpt这几张图片&#xff0c;暂时先保留着。因为一直有个因为在电网里边用发电端和用电端…

EmguCV学习笔记 C# 9.3 移动检测类

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

爬取图片保存为pdf

本文章想借着爬虫给大家介绍一下图片转pdf,有需要的友友们可以看看参考参考&#xff0c;有帮助到友友的可以收藏&#xff0b;关注。下面以爬取初中7年级数学上册为例给大家演示一下。网址是这个 https://mp.weixin.qq.com/s?__bizMzAxOTE4NjI1Mw&mid2650214000&idx…

智慧医院是什么?建设智慧医院的关键步骤

智慧医院是什么&#xff1f; 智慧医院是一种新型的医疗机构&#xff0c;它利用先进的信息技术、数据分析和智能化系统&#xff0c;优化医院的管理和服务流程&#xff0c;提高医疗质量和效率。在智慧医院中&#xff0c;所有的运营和管理环节都可以通过数据驱动的方式来实现优化…

Trollspeed网速悬浮窗,精简且强大

我很喜欢iOS的界面UI&#xff0c;它的设计哲学是以人为本&#xff0c;简约而不简单。不过有时候&#xff0c;我也会觉得iOS简约过头了。人类是很没安全感的动物&#xff0c;获取的信息量足够多&#xff0c;我们才会感觉到安全。 在iOS16中&#xff0c;苹果加入了电量百分比显示…

一种快速edit的方法

后端的CURD&#xff0c;通过chatgpt很容易。 前端的CURD&#xff0c;编辑操作稍微有点复杂。 我一开始的想法是编辑的时候使用一个模态框&#xff0c;但是发现不舒服&#xff0c;为了快速实现&#xff0c;我决定点击编辑的时候&#xff0c;直接打开新的页面&#xff0c;这样开…

[数据集][目标检测]街头摊贩识别检测数据集VOC+YOLO格式758张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;758 标注数量(xml文件个数)&#xff1a;758 标注数量(txt文件个数)&#xff1a;758 标注类别…

航电系统,无人机的核心!!!

一、核心组成部分 飞控系统 定义&#xff1a;无人机飞行控制系统&#xff0c;负责接收来自传感器的数据&#xff0c;并根据飞行任务指令&#xff0c;通过算法计算出无人机的姿态和位置信息&#xff0c;进而控制无人机的飞行状态。 组成&#xff1a;通常由主控制器、姿态传感…