【Wio Terminal】输入/输出

news2024/11/28 8:25:21

输入/输出

  • 一、概述
    • 1、硬件原理图
      • Terminal引脚分布及功能
      • Wio Terminal Grove端口引脚分配
  • 二、使用Wio Terminal上的Grove模拟端口
    • 1、RPI 模拟引脚
    • 2、Grove引脚配置
    • 3、示例
  • 三、使用 Wio Terminal上的Grove数字端口
    • 1、RPI 数字引脚
    • 2、Grove引脚配置
      • 将 Grove I2C 端口用作数字端口
    • 3、示例
    • 4、PWM 输出示例代码(伺服器)
    • 5、UART 串行通信
  • 四、在 Wio Terminal 上使用Grove I2C端口
    • 1、端口配置
    • 2、示例
  • 五、在 Wio Terminal 上使用 SPI
    • 1、端口配置
    • 2、软件配置
  • 六、Grove 端口
    • 1、Wio Terminal 与 Grove - TDS 传感器
      • 库安装
      • 完整代码
    • 2、Wio Terminal 配合 Grove - OLED 显示屏
      • 库安装
      • U8g2初始化
      • 完整代码
    • 3、Wio Terminal 与 Grove - 温度传感器
      • 库安装
      • 完整代码
    • 4、Wio Terminal 与 Grove - GPS 传感器
      • 库安装
      • 完整代码

一、概述

1、硬件原理图

Terminal引脚分布及功能

在这里插入图片描述
Wio Terminal的SAMD51微控制器引出了40个GPIO引脚,这与Raspberry Pi的引脚布局相同。
要使用这些引脚,只需使用上面定义的引脚名称即可!有些引脚具有多功能,因此可以通过不同的方式引用。

For more information, please check variant.h for more information

Wio Terminal Grove端口引脚分配

在这里插入图片描述
正如你所看到的,Wio Terminal上有两个可用的Grove端口。一个是默认的I2C端口,另一个是可配置的数字/模拟引脚,它也可以用于PWM输出。两个Grove端口都可以用作数字端口。

二、使用Wio Terminal上的Grove模拟端口

在这里插入图片描述
本节展示了如何在 Wio Terminal 上使用模拟输入。要在 Wio Terminal 上使用模拟引脚,您必须使用 RPI 引脚。

1、RPI 模拟引脚

树莓派引脚定义为:

  • RPI_A0 -> RPI_A8

2、Grove引脚配置

要使用 Grove 可配置 A/D 端口作为模拟端口,只需按以下方式定义:

void setup() {
    pinMode(A0, INPUT);
}

现在,将 Grove 传感器连接到物理引脚!

3、示例

在此示例中,使用 Grove Loudness传感器进行演示:

void setup() {
    Serial.begin(115200);
    pinMode(A0, INPUT);
}
void loop() {
    int loudness = analogRead(A0);
    Serial.print("Loudness: ");
    Serial.println(loudness);
    delay(50);
}

三、使用 Wio Terminal上的Grove数字端口

在这里插入图片描述
本节展示了如何将 Wio Terminal 上的 Grove 端口用作数字端口。您可以使用此功能轻松玩转 Grove 生态系统!

1、RPI 数字引脚

树莓派引脚定义为:

  • RPI_D0 -> RPI_D8

2、Grove引脚配置

要使用 Grove 可配置 A/D 端口作为数字端口,只需按以下方式定义:

void setup() {
    pinMode(D0, INPUT); //Configure UART TX as Digital port
}

将 Grove I2C 端口用作数字端口

在 Wio Terminal 上,Grove I2C 端口也可以用作数字端口:

void setup() {
    pinMode(PIN_WIRE_SCL, INPUT); //Defined SCL of I2C port as Digital Input

现在,将 Grove 传感器连接到物理 Grove 端口!

注意:要了解更多定义的引脚名称变体,请检查原理图和 variant.h 文件

3、示例

在此示例中,使用 Grove 按钮和 Grove LED 进行演示:

#define BUTTON D0 //Button to Grove UART Port
#define LED PIN_WIRE_SCL //LED to Grove I2C Port

void setup() {
  Serial.begin(115200);
  pinMode(BUTTON, INPUT);
  pinMode(LED, OUTPUT);
}

void loop() {
  int buttonState = digitalRead(BUTTON);
  Serial.print("Button State: ");
  Serial.println(buttonState);

  if (buttonState == HIGH) {
    digitalWrite(LED, HIGH);
  }
  else {
    digitalWrite(LED, LOW);
  }
  delay(50);
}

4、PWM 输出示例代码(伺服器)

在此示例中,使用 Grove 伺服器来演示 PWM 输出:

#include <Servo.h>
Servo myservo;

int pos = 0;

void setup() {
  myservo.attach(D0); //Connect servo to Grove Digital Port
}

void loop() {
  for (pos = 0; pos <= 180; pos += 1) {
    // in steps of 1 degree
    myservo.write(pos);
    delay(15);
  }
  for (pos = 180; pos >= 0; pos -= 1) {
    myservo.write(pos);
    delay(15);
  }
}

注意:要在 Wio Terminal 上使用 Servo 库,请包含适用于 SAMD51 功能的 Adafruit 版本。

5、UART 串行通信

在 Wio Terminal 中的 USB Serial:Serial
扩展的UART接口:Serial1

四、在 Wio Terminal 上使用Grove I2C端口

本节展示了如何在 Wio Terminal 上使用 Grove I2C 端口,你可以简单地使用这个即插即用功能与 Grove 生态系统配合使用!

1、端口配置

要使用 Wio Terminal 上的 Grove I2C 端口,只需将使用 I2C 协议的 Grove 传感器连接到 Wio Terminal 上的物理 I2C 端口即可。

注意:请记得在 Arduino IDE 中包含传感器库。有关如何安装库的更多信息,请参考此链接。

2、示例

在这个例子中,我们使用 Grove LCD 来进行演示。这是从 RGB LCD 库中取出的“HelloWorld”示例。

#include <Wire.h>
#include "rgb_lcd.h"

rgb_lcd lcd;

const int colorR = 255;
const int colorG = 0;
const int colorB = 0;

void setup()
{
    // 设置 LCD 的列数和行数
    lcd.begin(16, 2);
    
    lcd.setRGB(colorR, colorG, colorB);
    
    // 想LCD打印一条信息
    lcd.print("hello, world!");

    delay(1000);
}

void loop() 
{
    // 将光标设置到第1行第0列:
    // (注意:第1行是第2行,因为计数从0开始):
    lcd.setCursor(0, 1);
    // 打印自复位以来的秒数:
    lcd.print(millis()/1000);

    delay(100);
}

五、在 Wio Terminal 上使用 SPI

本节将演示如何在 Wio Terminal 上使用 SPI(Serial Peripheral Interface,串行外设接口)。你可以使用它来控制其他设备!

1、端口配置

在这里插入图片描述
正如你所看到的,物理 SPI 引脚如下:

  • MOSI -> GPIO 19
  • MISO -> GPIO 21
  • SCK -> GPIO 23
  • SS -> GPIO 24

2、软件配置

在 Arduino 中,所有的 SPI 引脚都是预定义的,并且你可以按照以下方式访问它们:

  • MOSI -> PIN_SPI_MOSI
  • MISO -> PIN_SPI_MISO
  • SCK -> PIN_SPI_SCK
  • SS -> PIN_SPI_SS

六、Grove 端口

本节将介绍如何使用 Wio Terminal 与 Grove 生态系统 配合使用。
借助 Grove,您能够使用更简单的连接方式快速构建原型!

1、Wio Terminal 与 Grove - TDS 传感器

使用 Grove - TDS 传感器 与 Wio Terminal 在折线图上显示实时 TDS 读数

库安装

  • 需安装LCD库与Line Charts库

完整代码

将 Grove TDS 传感器连接到 Wio Terminal 的 Grove D/A 引脚,上传代码并检查结果!

#include"seeed_line_chart.h" //include the library
TFT_eSPI tft;

#define max_size 50 //maximum size of data
doubles data; //Initilising a doubles type to store data
TFT_eSprite spr = TFT_eSprite(&tft);  // Sprite 

#define sensorPin A0 //Analog pin

int sensorValue = 0;
float tdsValue = 0;
float Voltage = 0;

void setup() {
    pinMode(sensorPin, INPUT);
    tft.begin();
    tft.setRotation(3);
    spr.createSprite(TFT_HEIGHT,TFT_WIDTH);
}

void loop() {
    spr.fillSprite(TFT_WHITE);

    sensorValue = analogRead(sensorPin);
    Voltage = sensorValue*5/1024.0; //Convert analog reading to Voltage
    tdsValue=(133.42*Voltage*Voltage*Voltage - 255.86*Voltage*Voltage + 857.39*Voltage)*0.5; //Convert voltage value to TDS value

    if (data.size() == max_size) {
        data.pop();//this is used to remove the first read variable
    }
    data.push(tdsValue); //read variables and store in data

    //Settings for the line graph title
    auto header =  text(0, 0)
                .value("TDS Reading")
                .align(center)
                .valign(vcenter)
                .width(tft.width())
                .thickness(3);

    header.height(header.font_height() * 2);
    header.draw(); //Header height is the twice the height of the font

  //Settings for the line graph
    auto content = line_chart(20, header.height()); //(x,y) where the line graph begins
         content
                .height(tft.height() - header.height() * 1.5) //actual height of the line chart
                .width(tft.width() - content.x() * 2) //actual width of the line chart
                .based_on(0.0) //Starting point of y-axis, must be a float
                .show_circle(true) //drawing a cirle at each point, default is on.
                .value(data) //passing through the data to line graph
                .color(TFT_RED) //Setting the color for the line
                .draw();

    spr.pushSprite(0, 0);
    delay(50);
}

2、Wio Terminal 配合 Grove - OLED 显示屏

如果你需要一个第二屏幕与Wio Terminal配合使用,Grove - OLED Display 0.96"将是一个完美的选择。它可以用来显示图形和数据,为Wio Terminal增加更多的交互功能。

库安装

  • 在Arduino IDE中从库管理器安装U8g2库。

U8g2初始化

使用u8g2的软件I2C初始化OLED显示屏,并将SCL用作clock,SDA用作Data:

U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);

使用说明:

  • 调用 u8g2.firstPage()。
  • 开始一个 do-while 循环。
  • 在循环体中:使用常规的绘图命令绘制内容。
  • 只要 u8g2.nextPage() 返回 true,就继续循环。

如需更多信息,请访问 u8g2 的相关资源。

完整代码

将 Grove 0.96" OLED 显示屏连接到 Grove I2C 引脚并检查结果!

#include <U8g2lib.h>

U8G2_SSD1306_128X64_NONAME_1_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE);

const unsigned char WAVE[] PROGMEM = {
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0xF0,0x00,0xFF,0x00,0x0F,0xF0,0x00,
  0xFC,0x03,0xFF,0xC0,0x3F,0xFC,0x00,
  0xFE,0x07,0xFF,0xE0,0x7F,0xFE,0x00,
  0x1F,0xFF,0x81,0xFF,0xF8,0x1F,0xC0,
  0x0F,0xFF,0x00,0xFF,0xF0,0x0F,0xC0,
  0x03,0xFC,0x00,0x3F,0xC0,0x03,0xC0,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0xE0,0x00,0x7E,0x00,0x07,0xE0,0x00,
  0xF8,0x01,0xFF,0x80,0x1F,0xF8,0x00,
  0xFC,0x03,0xFF,0xC0,0x3F,0xFC,0x00,
  0xFF,0x0F,0xFF,0xF0,0xFF,0xFF,0x00,
  0x1F,0xFF,0x81,0xFF,0xF8,0x1F,0xC0,
  0x07,0xFE,0x00,0x7F,0xE0,0x07,0xC0,
  0x01,0xF8,0x00,0x1F,0x80,0x01,0xC0,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0xF0,0x00,0xFF,0x00,0x0F,0xF0,0x00,
  0xF8,0x01,0xFF,0x80,0x1F,0xF8,0x00,
  0xFE,0x07,0xFF,0xE0,0x7F,0xFE,0x00,
  0x3F,0xFF,0xC3,0xFF,0xFC,0x3F,0xC0,
  0x0F,0xFF,0x00,0xFF,0xF0,0x0F,0xC0,
  0x07,0xFE,0x00,0x7F,0xE0,0x07,0xC0,
  0x00,0xF0,0x00,0x0F,0x00,0x00,0xC0,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x80,0x00,0x18,0x00,0x01,0x80,0x00,
  0xF0,0x00,0xFF,0x00,0x0F,0xF0,0x00,
  0xFC,0x03,0xFF,0xC0,0x3F,0xFC,0x00,
  0xFF,0x0F,0xFF,0xF0,0xFF,0xFF,0x00,
  0x1F,0xFF,0x81,0xFF,0xF8,0x1F,0xC0,
  0x0F,0xFF,0x00,0xFF,0xF0,0x0F,0xC0,
  0x03,0xFC,0x00,0x3F,0xC0,0x03,0xC0,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  0x00,0x00,0x00,0x00,0x00,0x00,0x00
};

void setup() {
  u8g2.begin();
}

void loop() {
  u8g2.firstPage();
    do {
      u8g2.setFont(u8g2_font_t0_16b_mr);
      u8g2.drawXBMP(40, 0, 50, 50, WAVE);
      u8g2.setCursor(20, 60);
      u8g2.print("Wio Terminal");
    } while (u8g2.nextPage());
}

3、Wio Terminal 与 Grove - 温度传感器

本节将介绍如何使用 Grove - 温度传感器与 Wio Terminal 配合,以显示实时的周围环境温度读数。

库安装

  • 需安装LCD库与Line Charts库

完整代码

将 Grove 温度传感器连接到 Wio Terminal 的 Grove D/A 引脚,上传代码并检查结果!

#include"seeed_line_chart.h" //include the library
#include <math.h>

TFT_eSPI tft;

#define max_size 50 //maximum size of data
doubles data; //Initilising a doubles type to store data
TFT_eSprite spr = TFT_eSprite(&tft);  // Sprite 

const int B = 4275;               // B value of the thermistor
const int R0 = 100000;            // R0 = 100k
const int pinTempSensor = A0;     // Grove - Temperature Sensor connect to A0

void setup() {
    pinMode(pinTempSensor, INPUT);
    tft.begin();
    tft.setRotation(3);
    spr.createSprite(TFT_HEIGHT,TFT_WIDTH);
}

void loop() {
    spr.fillSprite(TFT_DARKCYAN);

    int a = analogRead(pinTempSensor);
    float R = 1023.0/a-1.0;
    R = R0*R;

    float temperature = 1.0/(log(R/R0)/B+1/298.15)-273.15; // convert to temperature via datasheet

    if (data.size() == max_size) {
        data.pop();//this is used to remove the first read variable
    }
    data.push(temperature); //read variables and store in data

    //Settings for the line graph title
    auto header =  text(0, 0)
                .value("Temperature Reading")
                .align(center)
                .color(TFT_WHITE)
                .valign(vcenter)
                .width(tft.width())
                .thickness(2);

    header.height(header.font_height() * 2);
    header.draw(); //Header height is the twice the height of the font

  //Settings for the line graph
    auto content = line_chart(20, header.height()); //(x,y) where the line graph begins
         content
                .height(tft.height() - header.height() * 1.5) //actual height of the line chart
                .width(tft.width() - content.x() * 2) //actual width of the line chart
                .based_on(0.0) //Starting point of y-axis, must be a float
                .show_circle(true) //drawing a cirle at each point, default is on.
                .y_role_color(TFT_WHITE)
                .x_role_color(TFT_WHITE)
                .value(data) //passing through the data to line graph
                .color(TFT_RED) //Setting the color for the line
                .draw();

    spr.pushSprite(0, 0);
    delay(50);
}

4、Wio Terminal 与 Grove - GPS 传感器

本节将介绍如何使用 Grove - GPS Sensor 与 Wio Terminal 配合,以获取实时的 GPS 信息。GPS 传感器本身输出的是 NMEA 格式的 GPS 数据,我们将使用 TinyGPSPlus 库来解析这些数据,将其转换为可读的信息。

库安装

  • 需安装TinyGPSPlus库

完整代码

将 Grove GPS 传感器连接到 Wio Terminal 的 Grove I2C 引脚(左侧),上传代码并在串行监视器(波特率:9600)中检查结果!

#include <TinyGPS++.h>
#include <wiring_private.h>

static const uint32_t GPSBaud = 9600;

// The TinyGPS++ object
TinyGPSPlus gps;

// The serial connection to the GPS device - Left side Grove connector.
// Left side Grove connector shares pins with I2C1 of 40 pin connector.
static Uart Serial3(&sercom3, PIN_WIRE_SCL, PIN_WIRE_SDA, SERCOM_RX_PAD_1, UART_TX_PAD_0);

void setup()
{
  Serial.begin(115200);

  Serial3.begin(GPSBaud);
  pinPeripheral(PIN_WIRE_SCL, PIO_SERCOM_ALT);
  pinPeripheral(PIN_WIRE_SCL, PIO_SERCOM_ALT);
}
 
void loop()
{
  // This sketch displays information every time a new sentence is correctly encoded.
  while (Serial3.available() > 0)
    if (gps.encode(Serial3.read()))
      displayInfo();
 
  if (millis() > 5000 && gps.charsProcessed() < 10)
  {
    Serial.println(F("No GPS detected: check wiring."));
    while(true);
  }
}

void displayInfo()
{
  Serial.print(F("Location: ")); 
  if (gps.location.isValid())
  {
    Serial.print(gps.location.lat(), 6);
    Serial.print(F(","));
    Serial.print(gps.location.lng(), 6);
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.print(F("  Date/Time: "));
  if (gps.date.isValid())
  {
    Serial.print(gps.date.month());
    Serial.print(F("/"));
    Serial.print(gps.date.day());
    Serial.print(F("/"));
    Serial.print(gps.date.year());
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.print(F(" "));
  if (gps.time.isValid())
  {
    if (gps.time.hour() < 10) Serial.print(F("0"));
    Serial.print(gps.time.hour());
    Serial.print(F(":"));
    if (gps.time.minute() < 10) Serial.print(F("0"));
    Serial.print(gps.time.minute());
    Serial.print(F(":"));
    if (gps.time.second() < 10) Serial.print(F("0"));
    Serial.print(gps.time.second());
    Serial.print(F("."));
    if (gps.time.centisecond() < 10) Serial.print(F("0"));
    Serial.print(gps.time.centisecond());
  }
  else
  {
    Serial.print(F("INVALID"));
  }

  Serial.println();
}

void SERCOM3_0_Handler()
{
  Serial3.IrqHandler();
}
void SERCOM3_1_Handler()
{
  Serial3.IrqHandler();
}
void SERCOM3_2_Handler()
{
  Serial3.IrqHandler();
}
void SERCOM3_3_Handler()
{
  Serial3.IrqHandler();
}

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

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

相关文章

mqtt 协议的概念和理解

一、概述 MQTT&#xff08;Message Queuing Telemetry Transport&#xff0c;消息队列遥测传输协议&#xff09;&#xff0c;是一种基于发布/订阅&#xff08;publish/subscribe&#xff09;模式的”轻量级”通讯协议&#xff0c;该协议构建于TCP/IP协议上&#xff0c;由IBM在1…

前后端分离(delivery-management)部署文档

1. 前端项目:delivery-management 1.1. 前端项目打包 执行命令:npm run build 或者yarn run build,生成dist目录。 构建流程如下图: 1.2. 文件上传 将打包好的前端项目(dist目录),上传到服务器,并拷贝到nginx安装目录html目录下。 执行上传命令(sftp):put -r E:\…

WildCard:一个因太好用而被迫暂停服务的虚拟信用卡平台,魅力何在?

如果你需要使用Wildcard开通GPT4、Midjourney或是Only方式的话&#xff0c;请点击&#xff1a;WildCard使用教程 参考文章链接&#xff1a;WildCard&#xff1a;一个因太好用而被迫暂停服务的虚拟信用卡平台&#xff0c;魅力何在&#xff1f; 1、Wildcard用户数量激增&#x…

模拟电子技术——振荡器基本原理、RC桥式振荡器、矩形波发生电器

文章目录 前言一、振荡器什么是振荡器振荡器的基本电路结构振荡条件起振条件和稳幅原理 二、RC桥式振荡器什么是RC桥式振荡器RC串并联网络的选频特性振荡条件完整频率特性曲线举例 三、矩形波发生电器什么是矩形波发生电路稳态与暂态PWM脉宽调制矩形波发生电路基本组成 总结 前…

单线程传奇Redis,为何引入多线程?

大家都知道 Redis 的速度非常的快&#xff0c;这其中一个关键原因就是它采用了单线程模型&#xff0c;这也是它的一大独特之处。那么问题来了&#xff0c;既然单线程模型已经如此出色&#xff0c;为什么后续版本还要搞上多线程呢&#xff1f; 本文主要分析一下多线程在Redis中的…

【知识整理】PHP研发组代码规范要求

一、目标 统一代码风格、命名规范&#xff0c;增强代码可读性和可维护性&#xff0c;供日常开发工作中时参考&#xff0c;以提高团队协作的开发效率。 二、编程规约 PHP代码规范[PSR-12] 特别注意&#xff1a; 1、业务代码内对 常量、变量(分页值、版本号、向下参数等)、魔法值…

定制红酒:如何将客户的个性化需求融入红酒设计

云仓酒庄洒派深知每个客户都有自己的品味和偏好&#xff0c;因此&#xff0c;他们致力于将客户的个性化需求融入红酒设计中。以下是一些主要的方法和策略&#xff1a; 1. 深入了解客户需求&#xff1a;在开始设计之前&#xff0c;云仓酒庄洒派会与每位客户进行深入的沟通&#…

波奇学Linux:动静态库

创建静态库 Makefile文件 mymath.c文件 mymath.h文件 编译main.c文件 gcc 编译时会把在系统目录中寻找头文件和库文件&#xff0c;文件不在系统目录中用参数 -I 头文件所在文件夹/ -L 库的地址文件夹 -l除去lib和后缀。 拷贝文件到系统目录即可不用参数 库的安装类似于把头文件…

二叉搜索树——迭代实现

———————————————————— 普通的树形结构中数据是杂乱无章的&#xff0c;实际意义不大&#xff0c;要想更好的管理数据&#xff0c;需要让数据有序&#xff0c;二叉搜索树又称二叉排序树&#xff0c;是一种特殊的树形结构。 规定一般的二叉搜索树的左节点小于…

Kettle如何连接SQL Server和问题处理

简介 Kettle&#xff08;也称为 Pentaho Data Integration&#xff09;是一款开源的 ETL&#xff08;Extract, Transform, Load&#xff09;工具&#xff0c;由 Pentaho 开发。ETL 是指从一个数据源&#xff08;通常是数据库&#xff09;中提取数据&#xff0c;进行转换&#…

多元统计分析课程论文-聚类效果评价

数据集来源&#xff1a;Unsupervised Learning on Country Data (kaggle.com) 代码参考&#xff1a;Clustering: PCA| K-Means - DBSCAN - Hierarchical | | Kaggle 基于特征合成降维和主成分分析法降维的国家数据集聚类效果评价 目录 1.特征合成降维 2.PCA降维 3.K-Mean…

Redis哨兵模式的搭建

文章目录 1、原理2、准备2.1、服务器准备2.2、资源准备 3、Redis 主从搭建3.1、Redis 安装3.2、redis.conf 配置3.2.1、Redis 主配置3.2.2、Redis 从配置 3.3、Redis 启动3.4、Redis 状态3.4.1、master 节点信息3.4.2、slave节点信息 4、哨兵配置4.1、sentinel.conf配置4.2、re…

ChatGPT-用ChatGPT指令,自学任何领域的系统知识

1. 指令位置 Github仓库&#xff1a;Mr Ranedeer AI Tutor 但是需要开通chatgtp plus版本&#xff0c;并且打开代码解释器 2 使用 学习内容 开始学习 AI甚至可以给你思考题&#xff0c;给出的答案还能进行评价 配置 通过配置表修改 深度 学习风格 沟通风格 语气风格 推…

1Panel使用GMSSL+Openresty实现国密/RSA单向自适应

本文 首发于 Anyeの小站&#xff0c;转载请取得作者同意。 前言 国密算法是国家商用密码算法的简称。自2012年以来&#xff0c;国家密码管理局以《中华人民共和国密码行业标准》的方式&#xff0c;陆续公布了SM2/SM3/SM4等密码算法标准及其应用规范。其中“SM”代表“商密”&a…

iOS如何一键清除剪贴板中的所有内容

参考:https://www.jb51.net/shouji/746688.html 1.打开“快捷指令”应用&#xff0c;前往“快捷指令中心”&#xff0c;下拉找到“巧用剪贴板”并点击“查看全部”。 2.下拉到底部&#xff0c;点击“清除剪贴板中的所有内容”&#xff0c;然后选择“添加快捷指令”&#xff1a…

sdxl-turbo、playground文生图模型使用案例

1、sdxl-turbo SDXL-Turbo是一种快速生成的文本到图像模型,可以在单个网络评估中从文本提示合成逼真的图像。 参考:https://huggingface.co/stabilityai/sdxl-turbo 对比效果相比PixArt模型差很多,参考https://blog.csdn.net/weixin_42357472/article/details/135520142 …

MySQL数据库基础(八):DML数据操作语言

文章目录 DML数据操作语言 一、DML包括哪些SQL语句 二、数据的增删改&#xff08;重点&#xff09; 1、数据的增加操作 2、数据的修改操作 3、数据的删除操作 DML数据操作语言 一、DML包括哪些SQL语句 insert插入、update更新、delete删除 二、数据的增删改&#xff08…

05.QT坐标系

1. 坐标系原点 坐标系原点就是屏幕/窗口的左上角&#xff0c;X向右增长&#xff0c;Y向下增长。 2.设置控件位置 设置控件位置&#xff0c;就相当于是需要指定控件的坐标&#xff0c;对于该控件来说&#xff0c;其坐标原点是其父窗口/父控件的左上角。 设置方法就是通过控件的…

认识ansible,了解常用的模块

ansible的概念 Ansible是一个基于Python开发的配置管理和应用部署工具&#xff0c;现在也在自动化管理领域大放异彩。它融合了众多老牌运维工具的优点&#xff0c;Pubbet和Saltstack能实现的功能&#xff0c;Ansible基本上都可以实现。 Ansible能批量配置、部署、管理上千台主…

VS code常用插件

1.Auto Close Tag &#xff08;自动闭合HTML/XML标签&#xff09; 2.Auto Rename Tag &#xff08;自动完成另一侧标签的同步修改&#xff09; Beautify &#xff08;格式化 html ,js,css&#xff09; 4.Bracket Pair Colorizer&#xff08;将匹配的括号染成相同的颜色&#xf…