【雕爷学编程】Arduino动手做(147)---QMC5883L三轴罗盘模块2

news2024/11/19 5:45:16

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞不掂的问题,希望能够抛砖引玉。

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百四十七:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271

在这里插入图片描述
在这里插入图片描述
做了一个指南针方位示意图

本实验指南针方位的取值范围为0~11,北点为0,东点为3,南点为6,西点为9。东(duEast)、西(West)、南(zhiSouth)、北dao(North)这四个方向的字母表示,是根据他们的英文单词的首字母来确定的。

在这里插入图片描述
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百四十七:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271

安装库:IDE–工具–管理库–搜索“QMC5883L”–安装 QMC5883LCompass

项目:室内测量方位角度(数值在0-359度之间)

实验开源代码

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

 实验一百四十七:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271

 1、安装库:IDE--工具--管理库--搜索“QMC5883L”--安装QMC5883LCompass

 2、项目:简易测量方位角度(数值在0-359度之间)

 3、实验接线:

 QMC5883L-------------- UNO

 VCC------------------- 5V

 GND------------------- GND

 SCL ------------------- A5

 SDA------------------- A4

 DRDY------------------ N/C

*/



#include <QMC5883LCompass.h>

QMC5883LCompass compass;

void setup() {

 Serial.begin(9600);

 compass.init();

}

void loop() {

 int a;

 // 读取罗盘值

 compass.read();

 // 返回方位角读数

 a = compass.getAzimuth();

 Serial.print("地磁方位角: ");

 Serial.print(a);

 Serial.print("°");

 Serial.println();

 delay(500);

}

实验串口返回情况

在这里插入图片描述
Arduino实验场景图

在这里插入图片描述
实验串口绘图器返回情况

在这里插入图片描述
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

实验一百四十七:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271

项目之六:测试方向

实验开源代码

/*

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)

 实验一百四十七:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271

 项目之六:测试方向

 实验接线:

 QMC5883L-------------- UNO

 VCC------------------- 5V

 GND------------------- GND

 SCL ------------------- A5

 SDA------------------- A4

 DRDY------------------ N/C

*/



#include <QMC5883LCompass.h>

QMC5883LCompass compass;

void setup() {

 Serial.begin(9600);

 compass.init();

}

void loop() {

 compass.read();

 byte a = compass.getAzimuth();

 char myArray[3];

 compass.getDirection(myArray, a);

 Serial.print(myArray[0]);

 Serial.print(myArray[1]);

 Serial.print(myArray[2]);

 Serial.println();

 delay(250);

}


实验串口返回情况

在这里插入图片描述

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百四十七:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
项目之七:三轴XYZ实时数据

实验开源代码

/*
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
 实验一百四十七:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
  项目之七:三轴XYZ实时数据
  实验接线:
  5883L-------------- UNO
  VCC------------------- 5V
  GND------------------- GND
  SCL ------------------- A5
  SDA------------------- A4
  DRDY------------------ N/C
*/

#include <QMC5883LCompass.h>

QMC5883LCompass compass;

void setup() {
  Serial.begin(9600);
  Serial.print("5883L准备就绪");
  compass.init();

  /*
     调用 setSmoothing(STEPS, ADVANCED);

     STEPS = int 平滑结果的步数。有效 1 到 10。
     更高的步骤等于更平滑但更长的处理时间。

     ADVANCED = bool 打开或关闭高级平滑。True 将从每个步骤中删除最大值和最小值,然后正常处理。
     启用此功能将导致更加平滑,但需要更长的处理时间。

  */
  compass.setSmoothing(10, true);
}

void loop() {
  int x, y, z;

  // Read compass values
  compass.read();

  // Return XYZ readings
  x = compass.getX();
  y = compass.getY();
  z = compass.getZ();

  Serial.print("X: ");
  Serial.print(x);
  Serial.print(" Y: ");
  Serial.print(y);
  Serial.print(" Z: ");
  Serial.print(z);
  Serial.println();

  delay(250);
}

实验串口返回情况
在这里插入图片描述

实验串口绘图器返回情况
在这里插入图片描述
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百四十七:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
项目之八:简单的QMC5883L 指南针演示
实验开源代码

/*
 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
   实验一百四十七:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
   项目之八:简单的QMC5883L 指南针演示
   实验接线:
   5883L-------------- UNO
   VCC------------------- 5V
   GND------------------- GND
   SCL ------------------- A5
   SDA------------------- A4
   DRDY------------------ N/C
*/

#include <QMC5883L.h>
#include <Wire.h>

QMC5883L compass;

void setup() {
  Wire.begin();

  compass.init();
  compass.setSamplingRate(50);

  Serial.begin(9600);
  Serial.println("QMC5883L 指南针演示");
  Serial.println("向各个方向转动罗盘来校准....");
}

void loop(){
  int heading = compass.readHeading();
  if (heading == 0) {
    /* Still calibrating, so measure but don't print */
  } else {
    Serial.println(heading);
  }
  delay(250);
}

实验串口返回情况
在这里插入图片描述

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百四十七:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
项目之九:动态四组数据,xyz+方位角a

实验开源代码

/*
 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
   实验一百四十七:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
   项目之九:动态四组数据,xyz+方位角
   实验接线:
   5883L-------------- UNO
   VCC------------------- 5V
   GND------------------- GND
   SCL ------------------- A5
   SDA------------------- A4
   DRDY------------------ N/C
*/

#include <Wire.h>
#include <MechaQMC5883.h>

MechaQMC5883 qmc;

void setup() {
  Wire.begin();
  Serial.begin(9600);
  qmc.init();
  //qmc.setMode(Mode_Continuous,ODR_200Hz,RNG_2G,OSR_256);
}

void loop() {
  int x, y, z;
  int azimuth;
  //float azimuth; //is supporting float too
  qmc.read(&x, &y, &z, &azimuth);
  //azimuth = qmc.azimuth(&y,&x);//you can get custom azimuth
  Serial.print("x: ");
  Serial.print(x);
  Serial.print(" y: ");
  Serial.print(y);
  Serial.print(" z: ");
  Serial.print(z);
  Serial.print(" a: ");
  Serial.print(azimuth);
  Serial.println();
  delay(800);
}

实验串口返回情况

在这里插入图片描述

实验串口绘图器返回情况

在这里插入图片描述

模块实验接线示意图
在这里插入图片描述
磁偏角(magnetic declination)
地磁偏角是指地球上任一处的磁北方向和正北方向之间的夹角。当地磁北向实际偏东时,地磁偏角为正,反之为负。地磁偏角在历史上最早由中国北宋科学家沈括记录在著作《梦溪笔谈》中:“方家以磁石磨针锋,则能指南,然常微偏东,不全南也。”而西方最早的记录则在此之后约400年。在地球上不同的地方,地磁偏角一般也不相同。在同一个地方,地磁偏角随着时间的推移也在不断变化。发生磁暴时和在磁力异常地区,如磁铁矿和高压线附近,地磁偏角将会产生急剧变化。在中国大陆的大部分地区,地磁偏角在-10°~+2°之间。在台湾则是-4°~-3°左右。正北(真北TN):

在这里插入图片描述

方格北(图北GN):以方格北线所测之方位角为方格方位角。
磁北(MN):地磁偏角:当地磁北向实际偏东时,地磁偏角为正,反之为负。
在这里插入图片描述

指北针指的方向是磁北(MN),假定磁偏角为偏东14度(14°E) ,正北(TN)会在磁北(MN)右边14度。xx°E:正北在磁北右边xx度。xx°W:正北在磁北左边xx度。
在这里插入图片描述
磁偏角是根据您当前位置应用的校正
为了从磁北得到真北,它因地而异。
例子:
基督城,东经 23° 35’
惠灵顿 , 22° 14’ EAST
但尼丁,东经 25° 8’
奥克兰,东经 19° 30’

您所在地区的磁偏角可以从​​ http://www.magnetic-declination.com/ 获得

在这里插入图片描述

实际测量几个地方的磁偏角

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百四十七:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
项目之十:根据当前位置来校正磁偏角

实验开源代码

/*
 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
   实验一百四十七:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
   项目之十:根据当前位置来校正磁偏角
   实验接线:
   5883L-------------- UNO
   VCC------------------- 5V
   GND------------------- GND
   SCL ------------------- A5
   SDA------------------- A4
   DRDY------------------ N/C
*/

#include <Arduino.h>
#include <Wire.h>
#include <HMC5883L_Simple.h>

// Create a compass
HMC5883L_Simple Compass;

void setup() {
  Serial.begin(9600);
  Wire.begin();

  // Magnetic Declination is the correction applied according to your present location
  // in order to get True North from Magnetic North, it varies from place to place.
  //
  // The declination for your area can be obtained from http://www.magnetic-declination.com/
  // Take the "Magnetic Declination" line that it gives you in the information,
  //
  // Examples:
  //   Christchurch, 23° 35' EAST
  //   Wellington  , 22° 14' EAST
  //   Dunedin     , 25° 8'  EAST
  //   Auckland    , 19° 30' EAST
  //
  Compass.SetDeclination(-0, 23, 'W');

  //   The device can operate in SINGLE (default) or CONTINUOUS mode
  //   SINGLE simply means that it takes a reading when you request one
  //   CONTINUOUS means that it is always taking readings
  //   for most purposes, SINGLE is what you want.
  Compass.SetSamplingMode(COMPASS_CONTINUOUS);

  //   The scale can be adjusted to one of several levels, you can probably leave it at the default.
  //   Essentially this controls how sensitive the device is.
  //   Options are 088, 130 (default), 190, 250, 400, 470, 560, 810
  //   Specify the option as COMPASS_SCALE_xxx
  //   Lower values are more sensitive, higher values are less sensitive.
  //   The default is probably just fine, it works for me.  If it seems very noisy
  //  (jumping around), incrase the scale to a higher one.
  Compass.SetScale(COMPASS_SCALE_250);

  //   The compass has 3 axes, but two of them must be close to parallel to the earth's surface to read it,
  //   (we do not compensate for tilt, that's a complicated thing) - just like a real compass has a floating
  //   needle you can imagine the digital compass does too.
  //
  //   To allow you to mount the compass in different ways you can specify the orientation:
  //   COMPASS_HORIZONTAL_X_NORTH (default), the compass is oriented horizontally, top - side up. when pointing North the X silkscreen arrow will point North
  //   COMPASS_HORIZONTAL_Y_NORTH, top-side up, Y is the needle,when pointing North the Y silkscreen arrow will point North
  //   COMPASS_VERTICAL_X_EAST,    vertically mounted (tall) looking at the top side, when facing North the X silkscreen arrow will point East
  //   COMPASS_VERTICAL_Y_WEST,    vertically mounted (wide) looking at the top side, when facing North the Y silkscreen arrow will point West
  Compass.SetOrientation(COMPASS_HORIZONTAL_X_NORTH);
}

// Our main program loop.
void loop() {
  float heading = Compass.GetHeadingDegrees();

  Serial.print("Heading: \t");
  Serial.println( heading );
  delay(500);
}

实验串口返回情况
项目之十实验说明:这是第二次无法完成磁偏角的校准
第一次是使用QMC5883L的库,这次是使用HMC5883L的库,而实验采用模块的芯片是国产的DB5883L
这是三种有一定差异的不同产家的芯片,估计是在校准程序上有些不能兼容,其他功能还没有发现不兼容的情况。

在这里插入图片描述

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百四十七:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
项目十一:使用Adafruit库的HMC5883 磁力计测试

实验开源代码

/*
 【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
   实验一百四十七:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
   项目十一:使用Adafruit库的HMC5883 磁力计测试
   实验接线:
   5883L-------------- UNO
   VCC------------------- 5V
   GND------------------- GND
   SCL ------------------- A5
   SDA------------------- A4
   DRDY------------------ N/C
*/

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_HMC5883_U.h>

/* Assign a unique ID to this sensor at the same time */
Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(666666);

void displaySensorDetails(void)
{
  sensor_t sensor;
  mag.getSensor(&sensor);
  Serial.println("------------------------------------");
  Serial.print  ("Sensor:       "); Serial.println(sensor.name);
  Serial.print  ("Driver Ver:   "); Serial.println(sensor.version);
  Serial.print  ("Unique ID:    "); Serial.println(sensor.sensor_id);
  Serial.print  ("Max Value:    "); Serial.print(sensor.max_value); Serial.println(" uT");
  Serial.print  ("Min Value:    "); Serial.print(sensor.min_value); Serial.println(" uT");
  Serial.print  ("Resolution:   "); Serial.print(sensor.resolution); Serial.println(" uT");
  Serial.println("------------------------------------");
  Serial.println("");
  delay(500);
}

void setup(void)
{
  Serial.begin(9600);
  Serial.println("HMC5883 Magnetometer Test"); Serial.println("");

  /* Initialise the sensor */
  if (!mag.begin())
  {
    /* There was a problem detecting the HMC5883 ... check your connections */
    Serial.println("Ooops, no HMC5883 detected ... Check your wiring!");
    while (1);
  }

  /* Display some basic information on this sensor */
  displaySensorDetails();
}

void loop(void)
{
  /* Get a new sensor event */
  sensors_event_t event;
  mag.getEvent(&event);

  /* Display the results (magnetic vector values are in micro-Tesla (uT)) */
  Serial.print("X: "); Serial.print(event.magnetic.x); Serial.print("  ");
  Serial.print("Y: "); Serial.print(event.magnetic.y); Serial.print("  ");
  Serial.print("Z: "); Serial.print(event.magnetic.z); Serial.print("  "); Serial.println("uT");

  // Hold the module so that Z is pointing 'up' and you can measure the heading with x&y
  // Calculate heading when the magnetometer is level, then correct for signs of axis.
  float heading = atan2(event.magnetic.y, event.magnetic.x);

  // Once you have your heading, you must then add your 'Declination Angle', which is the 'Error' of the magnetic field in your location.
  // Find yours here: http://www.magnetic-declination.com/
  // Mine is: -13* 2' W, which is ~13 Degrees, or (which we need) 0.22 radians
  // If you cannot find your Declination, comment out these two lines, your compass will be slightly off.
  float declinationAngle = 0.1;
  heading += declinationAngle;

  // Correct for when signs are reversed.
  if (heading < 0)
    heading += 2 * PI;

  // Check for wrap due to addition of declination.
  if (heading > 2 * PI)
    heading -= 2 * PI;

  // Convert radians to degrees for readability.
  float headingDegrees = heading * 180 / M_PI;

  Serial.print("Heading (degrees): "); Serial.println(headingDegrees);

  delay(500);
}

实验串口返回情况
在这里插入图片描述
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百四十七:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
项目十二:使用简单的代码扫描三轴磁场传感器GY-271的 I2C 地址

实验开源代码

/*
   【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)
   实验一百五十八:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
   项目十二:使用简单的代码扫描三轴磁场传感器GY-271的 I2C 地址
   实验接线:
   5883L-------------- UNO
   VCC------------------- 5V
   GND------------------- GND
   SCL ------------------- A5
   SDA------------------- A4
   DRDY------------------ N/C
*/

#include <Wire.h> //include Wire.h library

void setup()
{
  Wire.begin(); // Wire communication begin
  Serial.begin(9600); // The baudrate of Serial monitor is set in 9600
  while (!Serial); // Waiting for Serial Monitor
  Serial.println("\nI2C Scanner");
}

void loop()
{
  byte error, address; //variable for error and I2C address
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for (address = 1; address < 127; address++ )
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address < 16)
        Serial.print("0");
      Serial.print(address, HEX);
      Serial.println("  !");
      nDevices++;
    }
    else if (error == 4)
    {
      Serial.print("Unknown error at address 0x");
      if (address < 16)
        Serial.print("0");
      Serial.println(address, HEX);
    }
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(5000); // wait 5 seconds for the next I2C scan
}

实验串口返回情况

在这里插入图片描述

【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百四十七:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
项目十三:尝试不使用驱动库来读取XYZ

实验开源代码

/*
   【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)
   实验一百五十八:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
   项目十三:尝试不使用驱动库来读取XYZ
   实验接线:
   5883L-------------- UNO
   VCC------------------- 5V
   GND------------------- GND
   SCL ------------------- A5
   SDA------------------- A4
   DRDY------------------ N/C
*/


#include <Wire.h> //I2C Arduino Library

#define HMC5883L_ADDR 0x0D //0011110b, I2C 7bit address of HMC5883

bool haveHMC5883L = false;

bool detectHMC5883L ()
{
  // read identification registers
  Wire.beginTransmission(HMC5883L_ADDR); //open communication with HMC5883
  Wire.write(10); //select Identification register A
  Wire.endTransmission();
  Wire.requestFrom(HMC5883L_ADDR, 3);
  if(3 == Wire.available()) {
    char a = Wire.read();
    char b = Wire.read();
    char c = Wire.read();
    if(a == 'H' && b == '4' && c == '3')
      return true;
  }

  return false;
}

void setup()
{
  //Initialize Serial and I2C communications
  Serial.begin(9600);
  Serial.println("GY271 TEST");
  Wire.begin();
  // lower I2C clock http://www.gammon.com.au/forum/?id=10896
  TWBR = 78;  // 25 kHz 
  TWSR |= _BV (TWPS0);  // change prescaler  
}

void loop()
{
  bool detect = detectHMC5883L();

  if(!haveHMC5883L) 
  {
    if(detect) 
    {
      haveHMC5883L = true;
      Serial.println("We have HMC5883L, moving on");
      // Put the HMC5883 IC into the correct operating mode
      Wire.beginTransmission(HMC5883L_ADDR); //open communication with HMC5883
      Wire.write(0x02); //select mode register
      Wire.write(0x00); //continuous measurement mode
      Wire.endTransmission();
    }
    else
    {  
      Serial.println("No HMC5883L detected!");
      delay(2000);
      return;
    }
  }
  else
  {
    if(!detect) {
      haveHMC5883L = false;
      Serial.println("Lost connection to HMC5883L!");
      delay(2000);
      return;
    }
  }
  
  int x,y,z; //triple axis data

  //Tell the HMC5883 where to begin reading data
  Wire.beginTransmission(HMC5883L_ADDR);
  Wire.write(0x0D); //select register 3, X MSB register
  Wire.endTransmission();

 //Read data from each axis, 2 registers per axis
  Wire.requestFrom(HMC5883L_ADDR, 6);
  if(6<=Wire.available()){
    x = Wire.read()<<8; //X msb
    x |= Wire.read(); //X lsb
    z = Wire.read()<<8; //Z msb
    z |= Wire.read(); //Z lsb
    y = Wire.read()<<8; //Y msb
    y |= Wire.read(); //Y lsb
  }
  
  //Print out values of each axis
  Serial.print("x: ");
  Serial.print(x);
  Serial.print("  y: ");
  Serial.print(y);
  Serial.print("  z: ");
  Serial.println(z);
  
  delay(250);
}

实验串口返回情况(未能识别国产芯片)

在这里插入图片描述
【Arduino】168种传感器模块系列实验(资料代码+仿真编程+图形编程)
实验一百四十七:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
项目十四:QMC5883LCompass三轴磁力计罗盘传感器

实验开源代码

/*
   【Arduino】168种传感器模块系列实验(资料代码+图形编程+仿真编程)
   实验一百五十八:QMC5883L电子指南针罗盘模块 三轴磁场传感器GY-271
   项目十四:QMC5883LCompass三轴磁力计罗盘传感器
   实验接线:
   5883L-------------- UNO
   VCC------------------- 5V
   GND------------------- GND
   SCL ------------------- A5
   SDA------------------- A4
   DRDY------------------ N/C
*/

#include <QMC5883LCompass.h>
QMC5883LCompass compass;

void setup(void) {
  // start serial port
  Serial.begin(115200);
  Serial.println("\n\n\nQMC5883 磁力计测试");
  Serial.println("");
  
  compass.init(); 
}

void loop() {
int x, y, z, a, b;
  char myArray[3];
  
  compass.read();
  
  x = compass.getX();
  y = compass.getY();
  z = compass.getZ();
  a = compass.getAzimuth();
  b = compass.getBearing(a);
  compass.getDirection(myArray, a);
    
  Serial.print("X: ");
  Serial.print(x);

  Serial.print(" Y: ");
  Serial.print(y);

  Serial.print(" Z: ");
  Serial.print(z);

  Serial.print(" 方位角: ");
  Serial.print(a);

  Serial.print(" 方位: ");
  Serial.print(b);

  Serial.print(" 方向: ");
  Serial.print(myArray[0]);
  Serial.print(myArray[1]);
  Serial.print(myArray[2]);
  Serial.println();
  delay(500);
}

实验串口返回情况

在这里插入图片描述
实验串口绘图器返回情况

在这里插入图片描述

Arduino实验场景图

在这里插入图片描述

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

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

相关文章

基于Python+Django+mysql+html学生成绩管理系统

基于PythonDjangomysqlhtml学生成绩管理系统 一、系统介绍二、功能展示1.用户登陆2.主页3.年级管理4.班级管理5.课程管理6.学生管理7.班级管理8.学生管理 三、其它系统四、获取源码 一、系统介绍 成绩录入测试账号&#xff1a;test 密码&#xff1a;123 在线成绩录入&#xff…

redis -速成

目录 &#xff08;一&#xff09;认识 Redis 1.1数据库分类 1.2 什么是Redis 1.2.1 redis简介 1.2.2 谁在用Redis 1.2.3 怎么学redis 1.2.4 Redis的安装 2 数据类型 2.1 概况 2.2 String类型 2.2.1 常用的命令 2.2.2 非常用命令 2.2.3 举例 2.2.4应用场景&#xf…

面试之双亲委派原理

一面腾讯提问:如果我自定义一个 new Object 类&#xff0c;请问这个类是否会被加载&#xff1f; 回答&#xff1a;不会&#xff0c;因为双亲委派&#xff0c;向上加载。回答的过程中磨磨唧唧。当然最后一面也是没有过。 总之一句话&#xff1a;向上加载&#xff0c;向下委派. …

【Linux操作系统】死锁

文章目录 死锁的概念产生死锁问题的必要条件如何避免死锁 有两个小朋友站在超市的零食区&#xff0c;手上各拿着五毛钱&#xff0c;他们直勾勾的看着眼前的棒棒糖&#xff0c;问了问阿姨&#xff0c;这个棒棒糖要一块钱。所以a对b说&#xff1a;“你把你的五毛钱给我买棒棒糖”…

Spring Cloud Hystrix简单实用

文章目录 一、简介二、快速开始1、pom依赖2、启动类注解3、服务降级配置HystrixCommand4、配置熔断策略5、测试 三、原理分析四、实际使用 一、简介 Hystrix&#xff0c;英文意思是豪猪&#xff0c;全身是刺&#xff0c;刺是一种保护机制。Hystrix也是Netflflix公司的一款组件。…

Controller配置总结与RequestMapping

1.Controller 2.ResquestMapping 就一个父级目录与自己目录的一个关系&#xff01;&#xff01;&#xff01;理清楚就好了&#xff0c;很好理解&#xff01;

MURF20100CTR-ASEMI快恢复对管MURF20100CTR

编辑&#xff1a;ll MURF20100CTR-ASEMI快恢复对管MURF20100CTR 型号&#xff1a;MUR20100CTR 品牌&#xff1a;ASEMI 芯片个数&#xff1a;2 封装&#xff1a;TO-220F 恢复时间&#xff1a;50ns 工作温度&#xff1a;-50C~150C 浪涌电流&#xff1a;200A 正向电流&am…

[JVM] 2. 类加载子系统(1)-- 内存结构、类加载子系统概述

一、内存结构 类加载子系统的职责是&#xff1a;加载class文件到内存中。 完整的内存结构如下&#xff1a; 二、类加载过程 类加载过程总体分为Loading&#xff08;加载&#xff09;、Linking&#xff08;链接&#xff09;、Initialization&#xff08;初始化&#xff09;三…

【力扣每日一题】2023.7.15 四数之和

题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 这题和本月出过的每日一题&#xff1a;两数之和&#xff0c;三数之和类似。 不夸张的说只要把三数之和的代码拿来再套层for循环改改就可以了。 不过我这里还是简单捋一捋思路&#xff0c;题目给一个数组&#xff0c;要求…

玩转数据可视化之R语言ggplot2:(十四)层级布局(一层一层增加你的绘图元素,使绘图更灵活)

【R语言数据科学可视化篇】 🌸个人主页:JOJO数据科学📝个人介绍:统计学top3高校统计学硕士在读💌如果文章对你有帮助,欢迎✌关注、👍点赞、✌收藏、👍订阅专栏✨本文收录于【R语言数据科学】本系列主要介绍R语言在数据科学领域的应用包括: R语言编程基础、R语言可…

代码随想录二刷day53 | 动态规划之子序列 1143.最长公共子序列 1035.不相交的线 53. 最大子序和

day53 1143.最长公共子序列1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组 1035.不相交的线53. 最大子序和1.确定dp数组&#xff08;dp table&#xff09;以及下标的含义2.确定递推公式3.dp数组如…

数据结构_进阶(1):搜索二叉树

1.内容 建议再看这节之前能对C有一定了解 二叉树在前面C的数据结构阶段时有出过&#xff0c;现在我们对二叉树来学习一些更复杂的类型&#xff0c;也为之后C学习的 map 和 set 做铺垫 1. map和set特性需要先铺垫二叉搜索树&#xff0c;而二叉搜索树也是一种树形结构2. 二叉搜…

分布式事务-本地消息表

本地消息表方案核心思路 需要分布式处理的任务通过消息日志的方式来异步执行。消息日志可以存储到本地文本、数据库或消息队列&#xff0c;再通过业务规则自动或人工发起重试。 方案核心具体实现 包括数据模型和核心逻辑 业务规则 定义业务的消息配置如topic 、key、tag …

计算机网络基础-OSI七层模型 和 TCP/IP四层模型的对比

OSI七层模型 和 TCP/IP四层模型的对比 OSI七层模型&#xff1a; 理论上的网络通信模型 记忆&#xff1a; (物、链、网、输、会、示、用) TCP/IP四层模型&#xff1a; 实际上的网络通信标准 (1) 七层网络体系结构各层的主要功能&#xff1a; 应用层&#xff1a; 最上层的&am…

linux X系统 X窗口系统(X Window System)

Xorg是一个开放源代码的跨平台的图形系统&#xff0c;它是UNIX和Linux的主要图形系统&#xff0c;它的前身是XFree86。 Xorg是在桌面环境中提供显示和图形输入设备支持的主要架构。 它支持多种输入设备&#xff0c;如键盘&#xff0c;鼠标&#xff0c;触摸屏&#xff0c;手写板…

河南理工大学高校专区入驻飞桨AI Studio,优质教育资源等你来学!

近日&#xff0c;河南理工大学高校专区在飞桨人工智能学习与实训社区AI Studio上线&#xff0c;双方将携手搭建人工智能教学实训平台专区&#xff0c;汇集优质教学实训资源&#xff0c;校企共同培育复合型 AI 人才&#xff0c;为国家输送高质量人才&#xff0c;促进国家智能化进…

放射医学、影像医学、数字图像技术(采集和处理)PACS源码

PACS是一个涉及放射医学、影像医学、数字图像技术(采集和处理)、计算机与通讯、C/S体系结构的多媒体数据库管理信息系统&#xff0c;涉及软件工程、图形图像的综合及后处理等多种技术&#xff0c;是一个技术含量高、实践性强的高技术复杂系统。 系统概述&#xff1a; 1&#x…

编译原理(双语) 期末复习

在我的博客查看&#xff1a; https://chenhaotian.top/study/compilation-principle-final-review/ 编译原理&#xff08;双语&#xff09; 期末复习 注意&#xff1a;部分资料来自 chouxianyu.github.io&#xff0c;版权归原作者所有。 本文图片较多&#xff0c;加载速度受…

轻松实现文件改名——批量将日语文件名翻译成中文命名

文件改名是在处理大量文件时常见的需求&#xff0c;特别是当文件名用外语表示时&#xff0c;不太方便理解或分类。本教程将介绍如何使用便捷工具&#xff0c;批量将日语文件名翻译成中文命名&#xff0c;以提高文件的可读性和管理效率。 首先&#xff0c;第一步进入文件批量改…

走进分布式系统(分布式系统简介)

走进分布式系统 分布式系统简介分布式系统的架构演变过程初创期发展期成熟期 分布式系统的特性什么是分布式系统特性 分布式系统带来的问题 分布式中间件简介什么是分布式中间件常用的分布式中间件 分布式系统简介 分布式系统的架构演变过程 讲在前面&#xff0c;首先我们要了…