基于STM32和人工智能的智能仓储管理系统

目录

  1. 引言
  2. 环境准备
  3. 智能仓储管理系统基础
  4. 代码实现:实现智能仓储管理系统
    • 4.1 数据采集模块
    • 4.2 数据处理与分析
    • 4.3 控制系统
    • 4.4 用户界面与数据可视化
  5. 应用场景:智能仓储管理与优化
  6. 问题解决方案与优化
  7. 收尾与总结

1. 引言

智能仓储管理系统通过结合STM32嵌入式系统和人工智能技术,实现对仓库环境的实时监测、库存管理和自动控制,提升仓储效率和管理水平。本文将详细介绍如何在STM32嵌入式系统中结合人工智能技术实现一个智能仓储管理系统,包括环境准备、系统架构、代码实现、应用场景及问题解决方案和优化方法。

2. 环境准备

硬件准备

  • 开发板:STM32F407 Discovery Kit
  • 调试器:ST-LINK V2或板载调试器
  • 温湿度传感器:如DHT22
  • 重量传感器:如HX711
  • RFID模块:用于物品识别
  • 摄像头:用于实时监控
  • 显示屏:如OLED显示屏
  • 电机控制模块:用于货架控制
  • 按键或旋钮:用于用户输入和设置
  • 电源:12V或24V电源适配器

软件准备

  • 集成开发环境(IDE):STM32CubeIDE或Keil MDK
  • 调试工具:STM32 ST-LINK Utility或GDB
  • 库和中间件:STM32 HAL库、TensorFlow Lite
  • 人工智能模型:用于数据分析和预测

安装步骤

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

3. 智能仓储管理系统基础

控制系统架构

智能仓储管理系统由以下部分组成:

  • 数据采集模块:用于采集环境和库存数据(温湿度、重量、物品识别等)
  • 数据处理与分析:使用人工智能算法对采集的数据进行分析和预测
  • 控制系统:根据分析结果控制仓库设备(如货架、电机等)
  • 显示系统:用于显示仓储状态和系统信息
  • 用户输入系统:通过按键或旋钮进行设置和调整

功能描述

通过温湿度传感器、重量传感器、RFID模块和摄像头采集仓库环境和库存数据,并使用人工智能算法进行分析和预测,实时控制仓库设备,实现智能化的仓储管理。用户可以通过按键或旋钮进行设置,并通过显示屏查看当前状态和系统信息。

4. 代码实现:实现智能仓储管理系统

4.1 数据采集模块

配置DHT22温湿度传感器
使用STM32CubeMX配置GPIO接口:

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

代码实现:

初始化DHT22传感器并读取数据:

#include "stm32f4xx_hal.h"
#include "dht22.h"#define DHT22_PIN GPIO_PIN_0
#define GPIO_PORT GPIOAvoid GPIO_Init(void) {__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitTypeDef GPIO_InitStruct = {0};GPIO_InitStruct.Pin = DHT22_PIN;GPIO_InitStruct.Mode = GPIO_MODE_INPUT;GPIO_InitStruct.Pull = GPIO_NOPULL;HAL_GPIO_Init(GPIO_PORT, &GPIO_InitStruct);
}void DHT22_Init(void) {DHT22_Init(DHT22_PIN, GPIO_PORT);
}void Read_Temperature_Humidity(float* temperature, float* humidity) {DHT22_ReadData(temperature, humidity);
}int main(void) {HAL_Init();SystemClock_Config();GPIO_Init();DHT22_Init();float temperature, humidity;while (1) {Read_Temperature_Humidity(&temperature, &humidity);HAL_Delay(1000);}
}

配置HX711重量传感器
使用STM32CubeMX配置GPIO接口:

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

代码实现:

初始化HX711传感器并读取数据:

#include "stm32f4xx_hal.h"
#include "hx711.h"#define HX711_SCK_PIN GPIO_PIN_1
#define HX711_DT_PIN GPIO_PIN_2
#define GPIO_PORT GPIOAvoid GPIO_Init(void) {__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitTypeDef GPIO_InitStruct = {0};GPIO_InitStruct.Pin = HX711_SCK_PIN | HX711_DT_PIN;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIO_PORT, &GPIO_InitStruct);
}void HX711_Init(void) {HX711_Init(HX711_SCK_PIN, HX711_DT_PIN, GPIO_PORT);
}float Read_Weight(void) {return HX711_GetValue();
}int main(void) {HAL_Init();SystemClock_Config();GPIO_Init();HX711_Init();float weight;while (1) {weight = Read_Weight();HAL_Delay(1000);}
}

配置RFID模块
使用STM32CubeMX配置SPI接口:

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

代码实现:

初始化RFID模块并读取数据:

#include "stm32f4xx_hal.h"
#include "rfid.h"SPI_HandleTypeDef hspi1;void SPI_Init(void) {__HAL_RCC_SPI1_CLK_ENABLE();hspi1.Instance = SPI1;hspi1.Init.Mode = SPI_MODE_MASTER;hspi1.Init.Direction = SPI_DIRECTION_2LINES;hspi1.Init.DataSize = SPI_DATASIZE_8BIT;hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;hspi1.Init.NSS = SPI_NSS_SOFT;hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;hspi1.Init.TIMode = SPI_TIMODE_DISABLE;hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;hspi1.Init.CRCPolynomial = 10;HAL_SPI_Init(&hspi1);
}void RFID_Init(void) {RFID_Init(&hspi1);
}void Read_RFID_Data(uint8_t* id) {RFID_ReadID(id);
}int main(void) {HAL_Init();SystemClock_Config();SPI_Init();RFID_Init();uint8_t rfid_id[10];while (1) {Read_RFID_Data(rfid_id);HAL_Delay(1000);}
}

4.2 数据处理与分析

集成TensorFlow Lite进行数据分析
使用STM32CubeMX配置必要的接口,确保嵌入式系统能够加载和运行TensorFlow Lite模型。

代码实现:

初始化TensorFlow Lite:

#include "tensorflow/lite/c/common.h"
#include "tensorflow/lite/micro/micro_interpreter.h"
#include "tensorflow/lite/micro/micro_error_reporter.h"
#include "tensorflow/lite/micro/micro_mutable_op_resolver.h"
#include "tensorflow/lite/schema/schema_generated.h"
#include "tensorflow/lite/version.h"
#include "model_data.h"  // 人工智能模型数据namespace {tflite::MicroErrorReporter micro_error_reporter;tflite::MicroInterpreter* interpreter = nullptr;TfLiteTensor* input = nullptr;TfLiteTensor* output = nullptr;constexpr int kTensorArenaSize = 2 * 1024;uint8_t tensor_arena[kTensorArenaSize];
}void AI_Init(void) {tflite::InitializeTarget();static tflite::MicroMutableOpResolver<10> micro_op_resolver;micro_op_resolver.AddFullyConnected();micro_op_resolver.Add```cmicro_op_resolver.AddSoftmax();const tflite::Model* model = tflite::GetModel(model_data);if (model->version() != TFLITE_SCHEMA_VERSION) {TF_LITE_REPORT_ERROR(&micro_error_reporter,"Model provided is schema version %d not equal ""to supported version %d.",model->version(), TFLITE_SCHEMA_VERSION);return;}static tflite::MicroInterpreter static_interpreter(model, micro_op_resolver, tensor_arena, kTensorArenaSize,&micro_error_reporter);interpreter = &static_interpreter;interpreter->AllocateTensors();input = interpreter->input(0);output = interpreter->output(0);
}void AI_Run_Inference(float* input_data, float* output_data) {// 拷贝输入数据到模型输入张量for (int i = 0; i < input->dims->data[0]; ++i) {input->data.f[i] = input_data[i];}// 运行模型推理if (interpreter->Invoke() != kTfLiteOk) {TF_LITE_REPORT_ERROR(&micro_error_reporter, "Invoke failed.");return;}// 拷贝输出数据for (int i = 0; i < output->dims->data[0]; ++i) {output_data[i] = output->data.f[i];}
}int main(void) {HAL_Init();SystemClock_Config();AI_Init();DHT22_Init();HX711_Init();RFID_Init();float input_data[INPUT_SIZE];float output_data[OUTPUT_SIZE];float temperature, humidity;float weight;uint8_t rfid_id[10];while (1) {// 获取传感器数据并填充 input_data 数组Read_Temperature_Humidity(&temperature, &humidity);weight = Read_Weight();Read_RFID_Data(rfid_id);// 假设 input_data 数组的结构为 {temperature, humidity, weight, rfid_id[0], ... , rfid_id[9]}input_data[0] = temperature;input_data[1] = humidity;input_data[2] = weight;for (int i = 0; i < 10; ++i) {input_data[3 + i] = rfid_id[i];}// 运行AI推理AI_Run_Inference(input_data, output_data);// 根据模型输出数据执行相应的操作HAL_Delay(1000);}
}

4.3 控制系统

配置GPIO控制电机和货架
使用STM32CubeMX配置GPIO:

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

代码实现:

初始化电机和货架控制引脚:

#include "stm32f4xx_hal.h"#define MOTOR_PIN GPIO_PIN_0
#define SHELF_PIN GPIO_PIN_1
#define GPIO_PORT GPIOBvoid GPIO_Init(void) {__HAL_RCC_GPIOB_CLK_ENABLE();GPIO_InitTypeDef GPIO_InitStruct = {0};GPIO_InitStruct.Pin = MOTOR_PIN | SHELF_PIN;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIO_PORT, &GPIO_InitStruct);
}void Control_Motor(uint8_t state) {HAL_GPIO_WritePin(GPIO_PORT, MOTOR_PIN, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
}void Control_Shelf(uint8_t state) {HAL_GPIO_WritePin(GPIO_PORT, SHELF_PIN, state ? GPIO_PIN_SET : GPIO_PIN_RESET);
}int main(void) {HAL_Init();SystemClock_Config();GPIO_Init();AI_Init();float input_data[INPUT_SIZE];float output_data[OUTPUT_SIZE];float temperature, humidity;float weight;uint8_t rfid_id[10];while (1) {// 获取传感器数据并填充 input_data 数组Read_Temperature_Humidity(&temperature, &humidity);weight = Read_Weight();Read_RFID_Data(rfid_id);// 假设 input_data 数组的结构为 {temperature, humidity, weight, rfid_id[0], ... , rfid_id[9]}input_data[0] = temperature;input_data[1] = humidity;input_data[2] = weight;for (int i = 0; i < 10; ++i) {input_data[3 + i] = rfid_id[i];}// 运行AI推理AI_Run_Inference(input_data, output_data);// 根据AI输出控制电机和货架uint8_t motor_state = output_data[0] > 0.5; // 假设模型输出0代表是否启动电机uint8_t shelf_state = output_data[1] > 0.5; // 假设模型输出1代表是否控制货架Control_Motor(motor_state);Control_Shelf(shelf_state);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_Warehouse_Data(float* output_data) {char buffer[32];sprintf(buffer, "Motor: %s", output_data[0] > 0.5 ? "ON" : "OFF");OLED_ShowString(0, 0, buffer);sprintf(buffer, "Shelf: %s", output_data[1] > 0.5 ? "ON" : "OFF");OLED_ShowString(0, 1, buffer);sprintf(buffer, "Temp: %.2f C", output_data[2]);OLED_ShowString(0, 2, buffer);sprintf(buffer, "Humidity: %.2f %%", output_data[3]);OLED_ShowString(0, 3, buffer);sprintf(buffer, "Weight: %.2f g", output_data[4]);OLED_ShowString(0, 4, buffer);
}

在主函数中,初始化系统并开始显示数据:

int main(void) {HAL_Init();SystemClock_Config();GPIO_Init();DHT22_Init();HX711_Init();RFID_Init();AI_Init();Display_Init();float input_data[INPUT_SIZE];float output_data[OUTPUT_SIZE];float temperature, humidity;float weight;uint8_t rfid_id[10];while (1) {// 获取传感器数据并填充 input_data 数组Read_Temperature_Humidity(&temperature, &humidity);weight = Read_Weight();Read_RFID_Data(rfid_id);// 假设 input_data 数组的结构为 {temperature, humidity, weight, rfid_id[0], ... , rfid_id[9]}input_data[0] = temperature;input_data[1] = humidity;input_data[2] = weight;for (int i = 0; i < 10; ++i) {input_data[3 + i] = rfid_id[i];}// 运行AI推理AI_Run_Inference(input_data, output_data);// 显示仓储数据和AI结果Display_Warehouse_Data(output_data);// 根据AI结果控制电机和货架uint8_t motor_state = output_data[0] > 0.5;uint8_t shelf_state = output_data[1] > 0.5;Control_Motor(motor_state);Control_Shelf(shelf_state);HAL_Delay(1000);}
}

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

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

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

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

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

5. 应用场景:智能仓储管理与优化

自动化仓储

智能仓储管理系统可以应用于自动化仓库,通过实时监测和控制,提高库存管理效率,减少人工操作。

物流中心

在物流中心,智能仓储管理系统可以帮助管理人员实时监控货物状态,优化货物存储和取货流程,提高物流效率。

医药仓库

在医药仓库,智能仓储管理系统可以监控药品存储环境,确保药品在合适的温度和湿度条件下存放,保障药品质量。

冷链物流

智能仓储管理系统在冷链物流中可以监控冷库环境,确保食品和药品在运输和存储过程中保持在合适的温度范围内,保证质量和安全。

6. 问题解决方案与优化

常见问题及解决方案

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

    • 解决方案:检查传感器与STM32之间的连接是否牢固,必要时重新焊接或更换连接线。同时,定期对传感器进行校准,确保数据准确。
  2. 设备响应延迟:优化控制逻辑和硬件配置,减少设备响应时间,提高系统反应速度。

    • 解决方案:优化传感器数据采集和处理流程,减少不必要的延迟。使用DMA(直接存储器访问)来提高数据传输效率,减少CPU负担。选择速度更快的处理器和传感器,提升整体系统性能。
  3. 显示屏显示异常:检查I2C通信线路,确保显示屏与MCU之间的通信正常,避免由于线路问题导致的显示异常。

    • 解决方案:检查I2C引脚的连接是否正确,确保电源供电稳定。使用示波器检测I2C总线信号,确认通信是否正常。如有必要,更换显示屏或MCU。
  4. RFID读取不稳定:确保RFID模块和天线的连接正常,优化RFID读取算法。

    • 解决方案:检查RFID模块与天线的连接,确保接线正确、牢固。使用更高性能的RFID模块和天线,提高读取范围和稳定性。优化RFID读取算法,减少误读和漏读现象。
  5. 电池续航时间短:优化系统功耗设计,提高电池续航时间。

    • 解决方案:使用低功耗模式(如STM32的STOP模式)降低系统功耗。选择容量更大的电池,并优化电源管理策略,减少不必要的电源消耗。

优化建议

  1. 数据集成与分析:集成更多类型的传感器数据,使用大数据分析和机器学习技术进行仓储环境和库存状态的预测和优化。

    • 建议:增加更多环境和库存传感器,如光照传感器、气体传感器等。使用云端平台进行数据分析和存储,提供更全面的仓储管理服务。
  2. 用户交互优化:改进用户界面设计,提供更直观的数据展示和更简洁的操作界面,增强用户体验。

    • 建议:使用高分辨率彩色显示屏,提供更丰富的视觉体验。设计简洁易懂的用户界面,让用户更容易操作。提供图形化的数据展示,如实时图表、库存地图等。
  3. 智能化控制提升:增加智能决策支持系统,根据历史数据和实时数据自动调整仓储管理策略,实现更高效的仓储管理。

    • 建议:使用人工智能技术分析仓储数据,提供个性化的控制建议。结合历史数据,预测可能的库存短缺和需求变化,提前调整管理策略。

7. 收尾与总结

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

总结

  1. 系统设计:结合STM32和多种传感器,实现全面的仓储环境监测和库存管理。
  2. 人工智能:使用TensorFlow Lite进行数据分析和预测,提高系统智能化水平。
  3. 用户界面:通过OLED显示屏提供直观的数据展示,提升用户体验。
  4. 优化和扩展:通过硬件和软件的优化,不断提升系统性能和可靠性。

 

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

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

相关文章

Hadoop 2.0 大家族(二)

目录 三、Hbase&#xff08;一&#xff09;Hbase简介&#xff08;二&#xff09;Hbase入门 四、Pig&#xff08;一&#xff09;Pig简介&#xff08;二&#xff09;Pig入门 三、Hbase Hbase是基于Hadoop的开源分布式数据库&#xff0c;它以Google的BigTable为原型&#xff0c;设…

天地图(二)引入地图

1、在public下的index.html中引入天地图 <script src"http://api.tianditu.gov.cn/api?v4.0&tk你的密钥"></script> 2、在vue文件中写入 <template><div:id"mapDiv currentIndex"class"map"style"position: a…

生成式AI和LLM的一些基本概念和名词解释

1. Machine Learning 机器学习是人工智能&#xff08;AI&#xff09;的一个分支&#xff0c;旨在通过算法和统计模型&#xff0c;使计算机系统能够从数据中学习并自动改进。机器学习算法使用数据来构建模型&#xff0c;该模型可用于预测或决策。机器学习应用于各种领域&#x…

C语言基础关键字的含义和使用方法

​关键字在C语言中扮演着非常重要的角色&#xff0c;它们定义了语言的基本构造和语法规则&#xff0c;通过使用关键字&#xff0c;开发者可以创建变量、定义数据类型、控制程序流程&#xff08;如循环和条件判断&#xff09;、声明函数等。由于这些字是保留的&#xff0c;所以编…

[SAP ABAP] 变量与常量

1.变量 定义变量的基本方式 DATA <name> TYPE <type> [VALUE <val>]. <name>&#xff1a;指定变量的名称 <type>&#xff1a;指定变量的数据类型 <val>&#xff1a;指定<name>的初始值 示例1 定义变量lv_data1和lv_data3 输出结果…

threejs 光影投射-与场景进行交互(六)

效果 场景中有三个立方体,三种颜色.点击变成红色,再点恢复自身原有颜色 代码 import ./style.css import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls.js import { log } from three/examples/jsm/nodes/Nodes.js//…

运算放大器(运放)积分器电路

积分器电路 运算放大器(运放)积分器电路是在图2运放反相放大器的电路上增加一个积分电容构成&#xff0c;该积分电容并联在运算放大器的反馈电阻上&#xff0c;见图1。 运算放大器(运放)反相放大器电路 设计目标 输入fMin输入f0dB输入fMax输出VoMin输出VoMax电源Vcc电源Vee1…

【源码+硬件说明+接线】Arduino-ESP32 http访问播放网络mp3音乐并获取获取远程服务器文件并存SD卡

前言 最近跟浩楠哥接了一个外包,不得不说人总得逼自己一把就可以学到很多东西,这次收获不小,就把一部分困扰我一段时间的部分放出来给大家看看,避免大家踩我相同的坑 1. 硬件准备 1.1 Esp32Wroom 主控使用esp32Wroom,我具备蓝牙,wifi,低功耗蓝牙功能,配合Arduino库作…

Go-知识并发控制mutex

Go-知识并发控制mutex 1. 介绍2. 数据结构2.1 Mutex 结构体2.2 Mutex 方法 3. 加锁解锁过程3.1 简单加锁3.2 加锁被阻塞3.3 简单解锁3.4 解锁并唤醒协程 4. 自旋过程4.1 什么是自旋4.2 自旋条件4.3 自旋的优势4.4 自旋的问题 5. Mutex 模式5.1 Normal 模式5.2 Starving 模式(饥…

市场价格到底是因为什么而变动?

在外汇及广泛的金融市场中&#xff0c;影响金融工具价格起伏的因素纷繁复杂。然而&#xff0c;万变不离其宗&#xff0c;无论是哪个市场&#xff0c;价格的最终决定力量始终是供需之间的平衡法则。 对于外汇、大宗商品等金融市场而言&#xff0c;表面上似乎受宏观经济数据、央…

FastBoot刷机获取root权限(Magisk)

1.首先要下载ADB、Fastboot等工具。 1.ADB、Fastboot工具 https://developer.android.com/studio/releases/platform-tools 2.安装FastBoot的USB驱动 https://developer.android.com/studio/run/oem-usb 2.下载对应的镜像 https://developers.google.com/android/images?…

Ubuntu系统配置C/C++编译环境

在Ubuntu系统中安装和学习C语言非常的方便&#xff0c;与Windows复杂的环境配置不同&#xff0c;Ubuntu提供了多种C/C开发工具&#xff0c;如GCC&#xff08;GNU Compiler Collection&#xff09;、GDB&#xff08;GNU Debugger&#xff09;和Valgrind等。这些工具不仅功能强大…

24.1 部署-交叉编译、压缩二进制文件、Docker容器

1. 交叉编译 Go语言的优越性之一是可在众多环境下运行&#xff0c;其中包括&#xff1a; 操作系统 windows、darwin、plan9、solaris、linux、netbsd/openbsd/freebsd、android体系架构 386/amd64、arm/arm64、ppc64/ppc64le、mips/mipsle/mips64/mips64le 使用go env命令可…

穿越时空的金星奥秘:揭秘古代天文学的惊人成就

在浩瀚的历史长河中&#xff0c;人类对宇宙的探索从未停止。而在中国古代&#xff0c;一项惊人的天文发现&#xff0c;至今仍让世界为之惊叹。那就是西汉时期的《五星占》&#xff0c;一部揭示金星会合周期的珍贵文献&#xff0c;其精确度之高&#xff0c;足以令现代天文学家瞠…

【AI基础】大模型资源整理

开局一张图&#xff0c;全靠硬凑&#xff1a; 硬拼一个雷达图&#xff1a; AI大模型&#xff0c;这是核心智能助手&#xff0c;基于大模型搭建的拿来就用的成熟应用平台应用分享&#xff0c;基于大模型搭建的拿来就用的小应用AI开发&#xff0c;基于大模型开发小应用 学习资源…

容器之分栏窗体构件演示

代码; #include <gtk-2.0/gtk/gtk.h> #include <glib-2.0/glib.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <stdio.h>int main(int argc, char *argv[]) {gtk_init(&argc, &argv);GtkWidget *window;window gtk_window_new(GTK_WINDO…

智慧园区解决方案PPT(53页)

## 1.1 智慧园区背景及需求分析 - 智慧园区的发展历程包括园区规划、经济、产业、企业、管理、理念的转变&#xff0c;强调管理模式创新&#xff0c;关注业务综合化、管理智慧化等发展。 ## 1.2 国家对智慧园区发展的政策 - 涉及多个国家部门&#xff0c;如工信部、住建部、…

抖音开放平台代开发小程序,上传模板代码

大家好&#xff0c;我是小悟 抖音小程序第三方平台开发着力于解决抖音生态体系内的小程序管理问题&#xff0c;一套模板&#xff0c;随处部署。能尽可能地减少服务商的开发成本&#xff0c;服务商只用开发一套小程序代码作为模板就可以快速批量的孵化出大量的商家小程序。 第…

Service方法增加@Asyn注解后导致bean无法找到 NoSuchBeanDefinitionException

Service方法增加Asyn注解后导致bean无法找到 NoSuchBeanDefinitionException 场景处理方法原因 场景 首先确认的是Service添加了Service或Component等注解&#xff0c;另外也增加了ComponentScan确定扫描的包路径是包含对应Service的&#xff0c;但就是无法找到这个bean。 通…

开放式耳机怎么选?五款劲爆机型强势PK!2024推荐版!

身为健身达人&#xff0c;我对耳机的要求可不低。开放式耳机让我在健身时既能享受音乐&#xff0c;又能清晰听到教练的指导。它佩戴舒适&#xff0c;不易掉落&#xff0c;而且音质出色&#xff0c;让我沉浸于运动的节奏中。市面上开放式耳机种类繁多&#xff0c;我为大家挑选了…