STM32智能农业灌溉系统教程

news2024/11/28 2:45:26

目录

  1. 引言
  2. 环境准备
  3. 智能农业灌溉系统基础
  4. 代码实现:实现智能农业灌溉系统 4.1 数据采集模块 4.2 数据处理与分析模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化
  5. 应用场景:农业监测与优化
  6. 问题解决方案与优化
  7. 收尾与总结

1. 引言

智能农业灌溉系统通过STM32嵌入式系统结合各种传感器、通信模块和控制设备,实现对农田环境的实时监控、自动控制和数据传输。本文将详细介绍如何在STM32系统中实现一个智能农业灌溉系统,包括环境准备、系统架构、代码实现、应用场景及问题解决方案和优化方法。

2. 环境准备

硬件准备

  1. 开发板:STM32F4系列或STM32H7系列开发板
  2. 调试器:ST-LINK V2或板载调试器
  3. 传感器:如土壤湿度传感器、温湿度传感器、光照传感器、雨量传感器等
  4. 通信模块:如Wi-Fi模块、蓝牙模块
  5. 显示屏:如OLED显示屏
  6. 按键或旋钮:用于用户输入和设置
  7. 控制设备:如水泵、电磁阀等
  8. 电源:电源适配器

软件准备

  1. 集成开发环境(IDE):STM32CubeIDE或Keil MDK
  2. 调试工具:STM32 ST-LINK Utility或GDB
  3. 库和中间件:STM32 HAL库和FreeRTOS

安装步骤

  1. 下载并安装STM32CubeMX
  2. 下载并安装STM32CubeIDE
  3. 配置STM32CubeMX项目并生成STM32CubeIDE项目
  4. 安装必要的库和驱动程序

3. 智能农业灌溉系统基础

控制系统架构

智能农业灌溉系统由以下部分组成:

  1. 数据采集模块:用于采集农田环境数据,如土壤湿度、温湿度、光照、雨量等
  2. 数据处理与分析模块:对采集的数据进行处理和分析
  3. 通信与网络系统:实现农田数据与服务器或其他设备的通信
  4. 显示系统:用于显示环境数据和系统状态
  5. 用户输入系统:通过按键或旋钮进行设置和调整
  6. 控制系统:根据数据分析结果控制灌溉设备

功能描述

通过各种传感器采集农田环境数据,并实时显示在OLED显示屏上。系统通过数据处理和通信模块,实现对农田环境的实时监控和自动控制。用户可以通过按键或旋钮进行设置,并通过显示屏查看当前状态。

4. 代码实现:实现智能农业灌溉系统

4.1 数据采集模块

配置土壤湿度传感器

使用STM32CubeMX配置ADC接口:

  1. 打开STM32CubeMX,选择您的STM32开发板型号。
  2. 在图形化界面中,找到需要配置的ADC引脚,设置为输入模式。
  3. 生成代码并导入到STM32CubeIDE中。

代码实现:

#include "stm32f4xx_hal.h"

ADC_HandleTypeDef hadc1;

void ADC_Init(void) {
    __HAL_RCC_ADC1_CLK_ENABLE();

    ADC_ChannelConfTypeDef sConfig = {0};

    hadc1.Instance = ADC1;
    hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
    hadc1.Init.Resolution = ADC_RESOLUTION_12B;
    hadc1.Init.ScanConvMode = DISABLE;
    hadc1.Init.ContinuousConvMode = ENABLE;
    hadc1.Init.DiscontinuousConvMode = DISABLE;
    hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
    hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;
    hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;
    hadc1.Init.NbrOfConversion = 1;
    hadc1.Init.DMAContinuousRequests = DISABLE;
    hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
    HAL_ADC_Init(&hadc1);

    sConfig.Channel = ADC_CHANNEL_0;
    sConfig.Rank = 1;
    sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
    HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}

uint32_t Read_Soil_Moisture(void) {
    HAL_ADC_Start(&hadc1);
    HAL_ADC_PollForConversion(&hadc1, HAL_MAX_DELAY);
    return HAL_ADC_GetValue(&hadc1);
}

int main(void) {
    HAL_Init();
    SystemClock_Config();
    ADC_Init();

    uint32_t soil_moisture;

    while (1) {
        soil_moisture = Read_Soil_Moisture();
        HAL_Delay(1000);
    }
}
配置温湿度传感器

使用STM32CubeMX配置I2C接口:

  1. 打打开STM32CubeMX,选择您的STM32开发板型号。
  2. 在图形化界面中,找到需要配置的I2C引脚,设置为I2C模式。
  3. 生成代码并导入到STM32CubeIDE中。

代码实现:

#include "stm32f4xx_hal.h"
#include "i2c.h"
#include "dht22.h"

I2C_HandleTypeDef hi2c1;

void I2C1_Init(void) {
    hi2c1.Instance = I2C1;
    hi2c1.Init.ClockSpeed = 100000;
    hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
    hi2c1.Init.OwnAddress1 = 0;
    hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
    hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
    hi2c1.Init.OwnAddress2 = 0;
    hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
    hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
    HAL_I2C_Init(&hi2c1);
}

void Read_Temperature_Humidity(float* temperature, float* humidity) {
    DHT22_ReadAll(temperature, humidity);
}

int main(void) {
    HAL_Init();
    SystemClock_Config();
    I2C1_Init();
    DHT22_Init();

    float temperature, humidity;

    while (1) {
        Read_Temperature_Humidity(&temperature, &humidity);
        HAL_Delay(1000);
    }
}
配置光照传感器

使用STM32CubeMX配置ADC接口:

  1. 打打开STM32CubeMX,选择您的STM32开发板型号。
  2. 在图形化界面中,找到需要配置的ADC引脚,设置为输入模式。
  3. 生成代码并导入到STM32CubeIDE中。

代码实现:

#include "stm32f4xx_hal.h"

ADC_HandleTypeDef hadc2;

void ADC2_Init(void) {
    __HAL_RCC_ADC2_CLK_ENABLE();

    ADC_ChannelConfTypeDef sConfig = {0};

    hadc2.Instance = ADC2;
    hadc2.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
    hadc2.Init.Resolution = ADC_RESOLUTION_12B;
    hadc2.Init.ScanConvMode = DISABLE;
    hadc2.Init.ContinuousConvMode = ENABLE;
    hadc2.Init.DiscontinuousConvMode = DISABLE;
    hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
    hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START;
    hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT;
    hadc2.Init.NbrOfConversion = 1;
    hadc2.Init.DMAContinuousRequests = DISABLE;
    hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
    HAL_ADC_Init(&hadc2);

    sConfig.Channel = ADC_CHANNEL_1;
    sConfig.Rank = 1;
    sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
    HAL_ADC_ConfigChannel(&hadc2, &sConfig);
}

uint32_t Read_Light_Intensity(void) {
    HAL_ADC_Start(&hadc2);
    HAL_ADC_PollForConversion(&hadc2, HAL_MAX_DELAY);
    return HAL_ADC_GetValue(&hadc2);
}

int main(void) {
    HAL_Init();
    SystemClock_Config();
    ADC2_Init();

    uint32_t light_intensity;

    while (1) {
        light_intensity = Read_Light_Intensity();
        HAL_Delay(1000);
    }
}
配置雨量传感器

使用STM32CubeMX配置ADC接口:

  1. 打打开STM32CubeMX,选择您的STM32开发板型号。
  2. 在图形化界面中,找到需要配置的ADC引脚,设置为输入模式。
  3. 生成代码并导入到STM32CubeIDE中。

代码实现:

#include "stm32f4xx_hal.h"

ADC_HandleTypeDef hadc3;

void ADC3_Init(void) {
    __HAL_RCC_ADC3_CLK_ENABLE();

    ADC_ChannelConfTypeDef sConfig = {0};

    hadc3.Instance = ADC3;
    hadc3.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4;
    hadc3.Init.Resolution = ADC_RESOLUTION_12B;
    hadc3.Init.ScanConvMode = DISABLE;
    hadc3.Init.ContinuousConvMode = ENABLE;
    hadc3.Init.DiscontinuousConvMode = DISABLE;
    hadc3.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE;
    hadc3.Init.ExternalTrigConv = ADC_SOFTWARE_START;
    hadc3.Init.DataAlign = ADC_DATAALIGN_RIGHT;
    hadc3.Init.NbrOfConversion = 1;
    hadc3.Init.DMAContinuousRequests = DISABLE;
    hadc3.Init.EOCSelection = ADC_EOC_SINGLE_CONV;
    HAL_ADC_Init(&hadc3);

    sConfig.Channel = ADC_CHANNEL_2;
    sConfig.Rank = 1;
    sConfig.SamplingTime = ADC_SAMPLETIME_3CYCLES;
    HAL_ADC_ConfigChannel(&hadc3, &sConfig);
}

uint32_t Read_Rain_Level(void) {
    HAL_ADC_Start(&hadc3);
    HAL_ADC_PollForConversion(&hadc3, HAL_MAX_DELAY);
    return HAL_ADC_GetValue(&hadc3);
}

int main(void) {
    HAL_Init();
    SystemClock_Config();
    ADC3_Init();

    uint32_t rain_level;

    while (1) {
        rain_level = Read_Rain_Level();
        HAL_Delay(1000);
    }
}

4.2 数据处理与分析模块

数据处理模块将传感器数据转换为可用于控制系统的数据,并进行必要的计算和分析。

农田数据处理算法

实现一个简单的农田数据处理算法,根据传感器数据生成控制信号:

void Process_Farm_Data(uint32_t soil_moisture, float temperature, float humidity, uint32_t light_intensity, uint32_t rain_level) {
    // 控制灌溉设备
    if (soil_moisture < 300 && rain_level < 100) {
        // 土壤湿度低且没有下雨,开启灌溉
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_SET); // 水泵
    } else {
        HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0, GPIO_PIN_RESET); // 关闭水泵
    }

    // 打印环境数据(可选)
    printf("Temp: %.2f, Humidity: %.2f, Light: %lu, Rain: %lu\n", temperature, humidity, light_intensity, rain_level);
}

void GPIOB_Init(void) {
    __HAL_RCC_GPIOB_CLK_ENABLE();

    GPIO_InitTypeDef GPIO_InitStruct = {0};
    GPIO_InitStruct.Pin = GPIO_PIN_0;
    GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
}

int main(void) {
    HAL_Init();
    SystemClock_Config();
    GPIOB_Init();
    ADC_Init();
    ADC2_Init();
    ADC3_Init();
    I2C1_Init();
    DHT22_Init();

    uint32_t soil_moisture, light_intensity, rain_level;
    float temperature, humidity;

    while (1) {
        soil_moisture = Read_Soil_Moisture();
        light_intensity = Read_Light_Intensity();
        rain_level = Read_Rain_Level();
        Read_Temperature_Humidity(&temperature, &humidity);

        Process_Farm_Data(soil_moisture, temperature, humidity, light_intensity, rain_level);

        HAL_Delay(1000);
    }
}

4.3 通信与网络系统实现

配置Wi-Fi模块

使用STM32CubeMX配置UART接口:

  1. 打打开STM32CubeMX,选择您的STM32开发板型号。
  2. 在图形化界面中,找到需要配置的UART引脚,设置为UART模式。
  3. 生成代码并导入到STM32CubeIDE中。

代码实现:

#include "stm32f4xx_hal.h"
#include "usart.h"
#include "wifi_module.h"

UART_HandleTypeDef huart2;

void UART2_Init(void) {
    huart2.Instance = USART2;
    huart2.Init.BaudRate = 115200;
    huart2.Init.WordLength = UART_WORDLENGTH_8B;
    huart2.Init.StopBits = UART_STOPBITS_1;
    huart2.Init.Parity = UART_PARITY_NONE;
    huart2.Init.Mode = UART_MODE_TX_RX;
    huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
    huart2.Init.OverSampling = UART_OVERSAMPLING_16;
    HAL_UART_Init(&huart2);
}

void Send_Farm_Data_To_Server(uint32_t soil_moisture, float temperature, float humidity, uint32_t light_intensity, uint32_t rain_level) {
    char buffer[128];
    sprintf(buffer, "Soil Moisture: %lu, Temp: %.2f, Humidity: %.2f, Light: %lu, Rain: %lu",
            soil_moisture, temperature, humidity, light_intensity, rain_level);
    HAL_UART_Transmit(&huart2, (uint8_t*)buffer, strlen(buffer), HAL_MAX_DELAY);
}

int main(void) {
    HAL_Init();
    SystemClock_Config();
    UART2_Init();
    GPIOB_Init();
    ADC_Init();
    ADC2_Init();
    ADC3_Init();
    I2C1_Init();
    DHT22_Init();

    uint32_t soil_moisture, light_intensity, rain_level;
    float temperature, humidity;

    while (1) {
        soil_moisture = Read_Soil_Moisture();
        light_intensity = Read_Light_Intensity();
        rain_level = Read_Rain_Level();
        Read_Temperature_Humidity(&temperature, &humidity);

        Process_Farm_Data(soil_moisture, temperature, humidity, light_intensity, rain_level);

        Send_Farm_Data_To_Server(soil_moisture, temperature, humidity, light_intensity, rain_level);

        HAL_Delay(1000);
    }
}

4.4 用户界面与数据可视化

配置OLED显示屏

使用STM32CubeMX配置I2C接口:

  1. 打打开STM32CubeMX,选择您的STM32开发板型号。
  2. 在图形化界面中,找到需要配置的I2C引脚,设置为I2C模式。
  3. 生成代码并导入到STM32CubeIDE中。

代码实现:

首先,初始化OLED显示屏:

#include "stm32f4xx_hal.h"
#include "i2c.h"
#include "oled.h"

void Display_Init(void) {
    OLED_Init();
}

然后实现数据展示函数,将农田数据展示在OLED屏幕上:

void Display_Farm_Data(uint32_t soil_moisture, float temperature, float humidity, uint32_t light_intensity, uint32_t rain_level) {
    char buffer[32];
    sprintf(buffer, "Soil: %lu", soil_moisture);
    OLED_ShowString(0, 0, buffer);
    sprintf(buffer, "Temp: %.2f C", temperature);
    OLED_ShowString(0, 1, buffer);
    sprintf(buffer, "Humidity: %.2f %%", humidity);
    OLED_ShowString(0, 2, buffer);
    sprintf(buffer, "Light: %lu", light_intensity);
    OLED_ShowString(0, 3, buffer);
    sprintf(buffer, "Rain: %lu", rain_level);
    OLED_ShowString(0, 4, buffer);
}

int main(void) {
    HAL_Init();
    SystemClock_Config();
    I2C1_Init();
    Display_Init();
    UART2_Init();
    GPIOB_Init();
    ADC_Init();
    ADC2_Init();
    ADC3_Init();
    DHT22_Init();

    uint32_t soil_moisture, light_intensity, rain_level;
    float temperature, humidity;

    while (1) {
        soil_moisture = Read_Soil_Moisture();
        light_intensity = Read_Light_Intensity();
        rain_level = Read_Rain_Level();
        Read_Temperature_Humidity(&temperature, &humidity);

        // 显示农田数据
        Display_Farm_Data(soil_moisture, temperature, humidity, light_intensity, rain_level);

        HAL_Delay(1000);
    }
}

6. 问题解决方案与优化

常见问题及解决方案

传感器数据不准确

确保传感器与STM32的连接稳定,定期校准传感器以获取准确数据。

解决方案:检查传感器与STM32之间的连接是否牢固,必要时重新焊接或更换连接线。同时,定期对传感器进行校准,确保数据准确。

数据处理延迟

优化数据处理算法和硬件配置,减少数据处理的延迟,提高系统反应速度。

解决方案:优化数据处理算法,使用更高效的数据结构和算法,减少计算量。使用DMA(直接存储器访问)技术提高数据传输效率,减少CPU负担。选择更高效的处理器,提高数据处理的响应速度。

数据传输失败

确保Wi-Fi模块与STM32的连接稳定,优化通信协议,提高数据传输的可靠性。

解决方案:检查Wi-Fi模块与STM32之间的连接是否牢固,必要时重新焊接或更换连接线。优化通信协议,减少数据传输的延迟和丢包率。选择更稳定的通信模块,提升数据传输的可靠性。

显示屏显示异常

检查I2C通信线路,确保显示屏与MCU之间的通信正常,避免由于线路问题导致的显示异常。

解决方案:检查I2C引脚的连接是否正确,确保电源供电稳定。使用示波器检测I2C总线信号,确认通信是否正常。如有必要,更换显示屏或MCU。

⬇帮大家整理了单片机的资料

包括stm32的项目合集【源码+开发文档】

点击下方蓝字即可领取,感谢支持!⬇

点击领取更多嵌入式详细资料

问题讨论,stm32的资料领取可以私信!

 

优化建议

数据集成与分析

集成更多类型的传感器数据,使用数据分析技术进行农田环境状态的预测和优化。

建议:增加更多农业监测传感器,如空气质量传感器、压力传感器等。使用云端平台进行数据分析和存储,提供更全面的农田监测和管理服务。

用户交互优化

改进用户界面设计,提供更直观的数据展示和更简洁的操作界面,增强用户体验。

建议:使用高分辨率彩色显示屏,提供更丰富的视觉体验。设计简洁易懂的用户界面,让用户更容易操作。提供图形化的数据展示,如实时环境参数图表、历史记录等。

智能化控制提升

增加智能决策支持系统,根据历史数据和实时数据自动调整农业管理策略,实现更高效的农田监测和控制。

建议:使用数据分析技术分析农业数据,提供个性化的管理建议。结合历史数据,预测可能的问题和需求,提前优化管理策略。

7. 收尾与总结

本教程详细介绍了如何在STM32嵌入式系统中实现智能农业灌溉系统,从硬件选择、软件实现到系统配置和应用场景都进行了全面的阐述。通过合理的技术选择和系统设计,可以构建一个高效且功能强大的智能农业灌溉系统。

在未来的发展中,智能农业灌溉系统可以进一步结合人工智能和大数据分析技术,提升系统的智能化程度,为农业生产提供更强大的技术支持。希望本教程能够为读者提供有价值的参考和指导,助力智能农业灌溉系统的开发与实现。

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

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

相关文章

Sklearn实例:水果多分类

机器学习五步&#xff1a; 加载数据集分割数据集建立模型训练模型预测模型 导入库文件 import numpy as np #科学计算库 import matplotlib.pyplot as plt #绘图库可视化函数 import pandas as pd #数据处理库&#xff0c;数据分析库 import seaborn as sns #高级数据可视化…

AI技术修复奥运珍贵历史影像,《永不失色的她》再现百年奥运女性光彩

Greatness of HER &#xff01; AI致敬 , 了不起的「她」。 7月25日&#xff0c;在国际奥委会和各方力量的支持下&#xff0c;阿里云以AI技术修复奥运珍贵历史影像&#xff0c;让百年奥运女性的伟大光彩被看见&#xff0c;并在巴黎推出《永不失色的她》全球首映礼。 国际奥委会…

【练习】使用DevEco Studio编写鸿蒙代码,实现卡片效果,主要是练习布局

效果展示 实现代码 build() {Column(){Column(){Image($r("app.media.avatar")).width("100%").borderRadius({topLeft:10,topRight:10})Text("今晚吃这个 | 每日艺术分享 No.43").fontSize(14).fontWeight(600).lineHeight(22).height(60)Row(…

Xlua原理分析 四

前面已经介绍了Xlua的通信原理&#xff0c;这篇主要记录Xlua如何做到Hotfix的。 我们项目就用到Xlua的Hotfix特性&#xff0c;周更用Lua去修改代码。版本内用C#开发。这点我觉得是Xlua比toLua强大的重要特性之一。 如何使用Hotfix本篇不介绍了&#xff0c;看Xlua教程懂得都懂…

网页上空格

&#xA0; no-break space(普通的英文半角空格但不换行) 中文全角空格 (一个中文宽度) &ensp; en空格(半个中文宽度) &emsp; em空格 (一个中文宽度) 四分之一em空格 (四分之一中文宽度) 相比平时的空格()&#xff0c;&nbsp拥有不间断(non-breaking)特性。即连续…

postgresql 您要的日期查询都在这

1、获取当前日期 select now();select current_timestamp;返回值均是当前年月日、时分秒&#xff0c;且秒保留6位小数&#xff0c;两种方式等价 select current_time;返回值&#xff1a;时分秒&#xff0c;秒最高精确到6位 select current_date;返回值&#xff1a;年月日 2…

HarmonyOS 鸿蒙DFX能力简介

DFX简介&#xff1a; Development and Feedback eXchange&#xff08;‌DFX&#xff09;‌&#xff0c;‌用于开发、‌测试和维护鸿蒙应用&#xff0c;提供一系列的工具和功能&#xff0c;‌帮助开发者在开发过程中进行性能分析、‌故障检测、‌异常处理。比如异常处理、性能分…

【qt小系统】传感器云平台3D散点图(附源码)

摘要&#xff1a;本文主要使用QT5&#xff0c;实现了一个传感器云平台的小示例&#xff0c;模拟的是各类传感器的添加&#xff0c;例如&#xff1a;热成像传感器、温度传感器、超声波传感器&#xff0c;模拟添加完成后&#xff0c;会自动将此传感器的三维坐标增加到3D散点图上&…

【每日一篇】UrbanGPT:时空大语言模型 【方便自己看】

摘要 时空预测旨在预测和洞察城市环境在时间和空间上不断变化的动态。它的目的是预测未来的模式&#xff0c;趋势和城市生活的各个方面的事件&#xff0c;包括交通&#xff0c;人口流动和犯罪率。虽然已经有许多努力致力于开发神经网络技术来准确预测时空数据&#xff0c;但重…

【C 语言】深入理解冒泡排序算法

0. 前言 冒泡排序是一种经典且基础的排序算法。它虽然在效率上并非最优&#xff0c;但对于初学者理解排序的基本概念和逻辑有着重要的意义。 1. 冒泡排序的基本思想 冒泡排序的基本思想是通过反复比较相邻的元素并交换它们&#xff08;如果顺序错误&#xff09;&#xff0c;…

基于GEC6818开发板+Linux+Qt设计的智能养老院出入管理系统(195)

一、前言 1.1 项目介绍 【1】项目功能介绍 随着我国老龄化进程的加快,养老问题日益突出,如何有效保障老年人的生活质量与安全成为社会关注的重点。智能化、信息化技术的发展为解决这一问题提供了新的思路和手段。基于Linux系统的智能养老院出入管理系统应运而生,为了实现…

记录一次使用Docker部署skywalking的过程

临时一个测试系统需要追一下bug&#xff0c;所以计划单节点部署一套skywalking进行调用链分析。 网上扒拉了几篇&#xff0c;都有点问题&#xff0c;这里单独记录一个。 首先skywalking需要是用es做数据源&#xff0c;当然也有mysql等多个版本&#xff0c;这里用的es。 同时…

使用JavaFx Fxml笔记

使用JavaFx Fxml实现账号密码登录 HelloApplication.java&#xff1a;package com.example.dr295cmonth7;import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.geometry.Insets; import javafx.scene.Parent; import javafx.scene.Scene; i…

Pinely Round 4 (Div. 1 + Div. 2)

有不明白或者想交流一下的可以加一下扣扣&#xff1a;2674993642&#xff0c;博客一般写的时候才看 A. Maximize the Last Element 解析&#xff1a;题目要让一次删除两个相邻的数字&#xff0c;最后留下尽可能最大的数字&#xff0c;赛时我用笔模拟了一下&#xff0c;发现如…

c++11,左值引用和右值引用,右值引用的作用

目录 左右值引用概念 右值引用的作用 左右值引用概念 什么是左值&#xff1f;什么是左值引用&#xff1f; 左值是一个表示数据的表达式(如变量名或解引用的指针)&#xff0c;我们可以获取它的地址可以对它赋 值&#xff0c;左值可以出现赋值符号的左边&#xff0c;右值不能出…

最详细最新最简单的Jenkins安装使用

首先去jenkins官网下载最新LTS war版本https://www.jenkins.io/download/ 准备sdk包 、nginx配置文件 、已配置的maven文件 查看系统架构 cat /etc/redhat-release uname -a uname -m lscpu安装常用工具 yum install jq -y yum install git -yyum install nginx -y systemc…

深入源码:解析SpotBugs (6)jvm 字节码简介

文章目录 一、JVM字节码概述一、文件结构概述二、详细解析1. 魔数和Class文件的版本2. 常量池3. 访问标志4. 类索引、父类索引与接口索引集合5. 字段表和方法表6. 属性表 字节码Spotbugs 作为一名资深的Java开发工程师&#xff0c;对JVM及其字节码有着深入的理解。现在&#xf…

DRAM 和 NAND 闪存收入将在 2024 年显著增长 75% 和 77%

#### 市场概况 根据 TrendForce 最新发布的市场报告&#xff0c;预计 2024 年 DRAM 和 NAND 闪存的收入将分别显著增长 75% 和 77%&#xff0c;这一增长主要是由于平均价格的上涨以及高价值产品的兴起&#xff0c;例如 HBM&#xff08;高带宽内存&#xff09;和 QLC&#xff0…

卷积神经网络(六)---实现 cifar10 分类

cifar10 数据集有60000张图片&#xff0c;每张图片的大小都是 32x32 的三通道的彩色图&#xff0c;一共是10种类别、每种类别有6000张图片&#xff0c;如图4.27所示。 图 4.27 cifar数据集 使用前面讲过的残差结构来处理 cifar10 数据集&#xff0c;可以实现比较高的准确率。 …