M5ATOMS3基础01按键

news2024/11/24 20:59:02

init+input+output

Linux环境Arduino IDE中配置ATOM S3

示例

官方示例代码:

/*
*******************************************************************************
* Copyright (c) 2022 by M5Stack
*                  Equipped with M5AtomS3 sample source code
*                          配套  M5AtomS3 示例源代码
* Visit for more information: https://docs.m5stack.com/en/core/AtomS3
* 获取更多资料请访问: https://docs.m5stack.com/zh_CN/core/AtomS3
*
* Describe: Button example.  按键示例
* Date: 2022/12/18
*******************************************************************************
Press button to display the corresponding output on the screen and
USBserial. 按下按键,在屏幕和串口上显示相应输出
*/
#include <M5AtomS3.h>
/* After M5AtomS3 is started or reset
  the program in the setUp () function will be run, and this part will only be
  run once. 在 M5AtomS3
  启动或者复位后,即会开始执行setup()函数中的程序,该部分只会执行一次。 */
void setup() {
    M5.begin(true, true, false, false);  // Init M5AtomS3.  初始化 M5AtomS3
    M5.Lcd.println("Hello ROS1/2 Robot");
}

/* After the program in setup() runs, it runs the program in loop()
The loop() function is an infinite loop in which the program runs repeatedly
在setup()函数中的程序执行完后,会接着执行loop()函数中的程序
loop()函数是一个死循环,其中的程序会不断的重复运行 */
void loop() {
    M5.update();  // Read the press state of the key.  读取按键 A, B, C 的状态
    if (M5.Btn.wasReleased() || M5.Btn.pressedFor(1000)) {
        USBSerial.print('ROS');
        M5.Lcd.print("ROS");
    }
}

解析

注释是中英双语的,博客中不在重复。

#include <具体硬件版本>

M5.begin

功能:初始化

源码:

void M5AtomS3::begin(bool LCDEnable, bool USBSerialEnable, bool I2CEnable,
                     bool LEDEnable) {
    if (I2CEnable) {
        Wire1.begin(38, 39, 100000UL);
    }

    if (USBSerialEnable) {
        USBSerial.begin(115200);
        USBSerial.flush();
        delay(1200);
        USBSerial.println("M5AtomS3 initializing...OK");
    }

    Btn.begin();

    if (LCDEnable) {
        Lcd.begin();
        Lcd.clear();
        Lcd.setCursor(1, 2);
    }

    if (LEDEnable) {
        dis.begin();
    }
}

分别为LCD,Serial,I2C,LED。

示例代码为:

M5.begin(true, true, false, false);

含义使用LCD和串口。

M5.Lcd

功能:输出模块

源码参考官网或者文末

可以使用案例很多

M5.Lcd.fillScreen(RED); 

M5.Btn

功能:输入模块 

学习方法类似如上输出模块。

M5.update

功能:获取atoms3更新状态,如按键

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

void loop() {
  M5.update();    //需添加M5.update()才能读取到按键的状态,细节请见System
  if (M5.Btn.isPressed()) {    //如果按键按下
    Serial.println("Button is pressed.");
  }
  delay(20);
}


Atom S3

#ifndef Pins_Arduino_h
#define Pins_Arduino_h

#include <stdint.h>
#include "soc/soc_caps.h"

#define USB_VID 0x303a
#define USB_PID 0x1001

#define EXTERNAL_NUM_INTERRUPTS 46
#define NUM_DIGITAL_PINS        48
#define NUM_ANALOG_INPUTS       20

// Some boards have too low voltage on this pin (board design bug)
// Use different pin with 3V and connect with 48
// and change this setup for the chosen pin (for example 38)
static const uint8_t LED_BUILTIN = SOC_GPIO_PIN_COUNT + 48;
#define BUILTIN_LED    LED_BUILTIN  // backward compatibility
#define LED_BUILTIN    LED_BUILTIN
#define RGB_BUILTIN    LED_BUILTIN
#define RGB_BRIGHTNESS 64

#define analogInputToDigitalPin(p) \
    (((p) < 20) ? (analogChannelToDigitalPin(p)) : -1)
#define digitalPinToInterrupt(p) (((p) < 48) ? (p) : -1)
#define digitalPinHasPWM(p)      (p < 46)

static const uint8_t TX = 43;
static const uint8_t RX = 44;

static const uint8_t TXD2 = 1;
static const uint8_t RXD2 = 2;

static const uint8_t SDA = 38;
static const uint8_t SCL = 39;

static const uint8_t SS   = 15;
static const uint8_t MOSI = 21;
static const uint8_t MISO = -1;
static const uint8_t SCK  = 17;

static const uint8_t G0  = 0;
static const uint8_t G1  = 1;
static const uint8_t G2  = 2;
static const uint8_t G3  = 3;
static const uint8_t G4  = 4;
static const uint8_t G5  = 5;
static const uint8_t G6  = 6;
static const uint8_t G7  = 7;
static const uint8_t G8  = 8;
static const uint8_t G36 = 36;
static const uint8_t G37 = 37;
static const uint8_t G38 = 38;
static const uint8_t G39 = 39;
static const uint8_t G40 = 40;
static const uint8_t G42 = 42;

static const uint8_t ADC1 = 7;
static const uint8_t ADC2 = 8;

#endif /* Pins_Arduino_h */

LCD

begin()

功能:

初始化以供使用

函数原型:

void begin()

注意:
1.如果您不想使用M5.begin() 初始化LCD,请在使用显示器之前调用此功能

使用示例:

#include <M5Stack.h>

void setup() {
  M5.Lcd.begin();  //初始化 M5Stack
}

void loop() {
}

sleep()

功能:

将显示切换到节能模式

函数原型:

void sleep()

使用示例:

#include <M5Stack.h>

void setup() {
  M5.Lcd.begin();  //初始化 M5Stack
  M5.Lcd.sleep();    //切换至休眠模式
}

void loop() {
}

clear()

功能:

清空显示屏所显示的内容

函数原型:

void clear()

使用示例:

#include <M5Stack.h>

void setup() {
  M5.Lcd.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.fillScreen(RED);
  delay(1000);
  M5.Lcd.clear();    //清空显示屏所显示的内容
}

void loop() {
}

wakeup()

功能:

从节能模式恢复显示

函数原型:

void wakeup()

使用示例:

#include <M5Stack.h>

void setup() {
  M5.Lcd.begin();  //初始化 M5Stack
  M5.Lcd.wakeup();    //从节能模式恢复显示
}

void loop() {
}

hight()

功能:

返回屏幕高度

函数原型:

void hight()

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();   //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.print(M5.Lcd.height());    //在屏幕上显示屏幕的高度
}

void loop() {
}

width()

功能:

返回屏幕宽度

函数原型:

void width()

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();   //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.print(M5.Lcd.width());    //在屏幕上显示屏幕的宽度
}

void loop() {
}

getCursorX()

功能:

获取字符末尾处的x坐标

函数原型:

int16_t getCursorX()

注意:
不适用于drawNumber()

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.print("Hello");
  int X = M5.Lcd.getCursorX();
  M5.Lcd.print(X);
}

void loop(){
}

getCursorY()

功能:

获取字符末尾处的y坐标

函数原型:

int16_t getCursorY()

注意:
不适用于drawNumber()

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.print("Hello");
  int X = M5.Lcd.getCursorY();
  M5.Lcd.print(Y);
}

void loop(){
}

getRotation()

功能:

返回屏幕旋转方向

函数原型:

uint8_t getRotation()

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.print(M5.Lcd.getRotation());    //在屏幕上输出屏幕的旋转方向
}

void loop(){
}

getTextDatum()

功能:

返回文字对齐方式( 为上方列表中对齐方式的编号 )

函数原型:

textdatum_t getRotation()

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.setTextDatum(MC_DATUM);    //设置文字的对齐方式
  M5.Lcd.drawString("hello", 160, 120, 2);    //在(160,120)处以2号字体打印字符串hello
  M5.Lcd.print(M5.Lcd.getTextDatum());    //屏幕打印获取到的文字对齐方式
}

void loop(){
}

setCursor()

功能:

设置文本光标在(x,y)处

函数原型:

void setCursor(int16_t x, int16_t y)

参数类型类型
xint16_tx坐标(像素)
yint16_ty坐标(像素)

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();             //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.setCursor(0, 30);
  M5.Lcd.printf("Hello M5");
}

void loop() {}

setRotation()

功能:

旋转屏幕

函数原型:

void setRotation(uint8_t m)

参数类型描述
muint8_t旋转角度 ( * 90°)

注意:
1.旋转角度为90°的倍数
2.0至3顺时针旋转,4至7逆时针旋转(默认为1)
3.需要在显示前设置

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();             //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.setRotation(2);  //将屏幕顺时针旋转180度(2*90)
  M5.Lcd.fillEllipse(160, 100, 60, 100, YELLOW);    //在(160,100)处创建一个长轴,短轴分别为60,100黄色椭圆
  delay(1000);
  M5.Lcd.setRotation(1);  //将屏幕恢复为默认显示状态
  M5.Lcd.fillEllipse(160, 100, 60, 100, GREEN);
}

void loop() {}

setBrightness()

功能:

设置屏幕亮度

函数原型:

void setBrightness(uint16_t voltage)

参数类型描述
brightnessuint16_t亮度 (0: Off - 255:Full)

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();
  M5.Power.begin();
  M5.Lcd.fillScreen(RED);
}
void loop() {
  M5.update();
  for(int i=0; i<255;i++){
    M5.Lcd.setBrightness(i);  //每隔10ms设置一次屏幕亮度
    delay(10);
  }
  for(int i=255; i>0;i--){
    M5.Lcd.setBrightness(i);
    delay(10);
  }
}

alphaBlend()

功能:

设置透明度,混合前景和背景色.

函数原型:

uint16_t alphaBlend(uint8_t alpha, uint16_t fgc, uint16_t bgc)

参数描述类型
alphauint8_t透明度
fgcuint16_t前景色
bgcuint16_t背景色

使用示例:

#include <M5Stack.h>

void setup() {
  M5.Lcd.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.fillScreen(M5.Lcd.alphaBlend(128, 0X00FF00, 0XFF0000));
  //设置前景、背景色分别为0X00FF00,0XFF0000 透明度为128,并填充至整个屏幕
}

void loop() {
}

loadFont()

功能:

从VLW文件加载字体

函数原型:

void loadFont(String fontName, bool flash)

参数类型说明
fontNameString字体名称
flashbool文件来源

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.loadFont("filename", SD);
}

void loop() {
}

unloadFont()

功能:

卸载字体

函数原型:

void unloadFont()

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.unloadFont();
}

void loop() {
}

fontsLoaded()

功能:

返回是否加载自己的字体

函数原型:

uint16_t fontsLoaded()

返回值:

返回显示字体的编码的16进制值

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.print(M5.Lcd.fontsLoaded());
}

void loop() {
}

fillScreen()

功能:

以指定的颜色填充整个屏幕

函数原型:

void fillScreen(uint32_t color)

参数类型描述
coloruint32_t颜色值

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.fillScreen(RED);    //在屏幕上填充红色
}

void loop(){
}

invertDisplay()

功能:

以负/正方式反转屏幕颜色

函数原型:

void invertDisplay(boolean i)

参数类型说明
iboolean反转时为 true

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.fillScreen(RED);    //在屏幕上填充红色
}

void loop() {
  M5.Lcd.invertDisplay(1);    //开启反转
  delay(1000);
  M5.Lcd.invertDisplay(0);    //关闭反转
}

color565()

功能:

更改为函数中使用的颜色代码(RGB 565)

函数原型:

color565(uint8_t red, uint8_t green, uint8_t blue)

参数类型描述
reduint8_t
greenuint8_t绿
blueuint8_t

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  uint16_t colorvalue = 0;
  colorvalue = color565(255, 255, 255);
  M5.Lcd.fillEllipse(160, 100, 60, 100, colorvalue);
}

void loop() {}

Text

print()

功能:

在屏幕当前位置打印字符串

函数原型:

size_t print()

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.print("this is a print text function");
}

void loop() {
}

textWidth()

功能:

返回文本所占像素宽度

函数原型:

int16_t textWidth(const String& string)

参数类型描述
stringconst String&字符串

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();   //初始化 M5Stack
  M5.Power.begin();
  String text = "hello  ";
  M5.Lcd.print(text);
  M5.Lcd.print(M5.Lcd.textWidth(text));    //在屏幕上打印字符串数组text所占像素宽度
}

void loop() {}

setTextSize()

功能:

设置显示文字的大小

函数原型:

void setTextSize(uint8_t s)

参数类型描述
suint8_t文字的大小 (1~7)

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.setTextSize(4);    //设置字体大小为4
  M5.Lcd.print("Hello M5Stack");
}

void loop() {
}

setTextColor()

功能:

设置显示文本的前景颜色和背景颜色

函数原型:

void setTextColor(uint16_t color)

void setTextColor(uint16_t color, uint16_t backgroundcolor)

参数类型描述
coloruint16_t文本的前景颜色
backgroundcoloruint16_t文本的背景颜色

注意:
1.如果函数的 backgroundcolor 值没给出,则使用当前的背景颜色
2.若不设置文字的颜色,默认为白色

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin(); //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.setTextColor(RED,BLACK);    //设置文本的前、背景色分别为红色和黑色
  //M5.Lcd.setTextColor(RED);
}

void loop(){
}

setTextWrap()

功能:

设置自动换行功能

函数原型:

void setTextWrap(boolean wrapX, boolean wrapY)

参数类型描述
wrapXbooleanX 方向(默认开启)
wrapYbooleanY 方向

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();   //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.setTextWrap(true, true);    //开启x、y轴自动换行
    M5.Lcd.print("hello M5Stack hello M5Stack hello M5Stack hello M5Stack hello M5Stack hello M5Stack hello M5Stack hello M5Stack");
}

void loop() {}

setTextPadding()

功能:

填充指定空白宽度(可帮助擦除旧的文本和数字)

函数原型:

void setTextPadding(uint16_t x_width)

参数类型描述
x_widthuint16_t空白区域宽度

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();
  M5.Power.begin();
}

void loop() {
  M5.Lcd.drawString("Orbitron 32", 160, 60, 2);
  delay(2000);
  M5.Lcd.setTextPadding(M5.Lcd.width() - 20);
  M5.Lcd.drawString("Orbitron 32 with padding", 160, 60, 2);
  delay(2000);
}

setTextDatum()

功能:

设置文本对齐方式

函数原型:

void setTextDatum(uint8_t datum)

参数类型描述
TL_DATUM (0)uint8_t左上角对齐(默认)
TC_DATUM (1)uint8_t居中向上对齐
TR_DATUM (2)uint8_t右上角对齐
ML_DATUM (3)uint8_t中部左对齐
MC_DATUM (4)uint8_t中心对齐
MR_DATUM (5)uint8_t中部右对齐
BL_DATUM (6)uint8_t左下角对齐
BC_DATUM (7)uint8_t居中底部对齐
BR_DATUM (8)uint8_t右下角对齐
L_BASELINE (9)uint8_t左字符基线
C_BASELINE (10)uint8_t中字符基线
R_BASELINE (11)uint8_t右字符基线

注意:
不适用于print()

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.setTextDatum(MC_DATUM);    //设置文本对齐方式为中心对齐
  M5.Lcd.drawString("hello", 160, 120, 2);    //在(160,120)处以2号字体打印字符串hello
}

void loop(){
}

Draw

drawFastHLine()

功能:

在(X,Y)处划一条长度为w的color色水平线条

函数原型:

void drawFastHLine(int32_t x, int32_t y, int32_t w, uint32_t color)

参数类型功能
xint32_t坐标 X
yint32_t坐标 Y
wint32_t宽度(像素)
coloruint32_t线条颜色

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.drawFastHLine(3, 100, 255, GREEN);    //在(3,100)处划一条长度为255的绿色水平线条
}

void loop() {
}

drawFastVLine()

功能:

在(X,Y)处划一条长度为w的color色 垂直线条

函数原型:

void drawFastVLine(int32_t x, int32_t y, int32_t w, uint32_t color)

参数类型功能
xint32_t坐标 X
yint32_t坐标 Y
wint32_t宽度(像素)
coloruint32_t线条颜色(可选)

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.drawFastVLine(100, 0, 255, TFT_GREEN);    //在(100,0)处划一条长度为255的绿色垂直线条
}

void loop(){
}

drawString()

功能:

在(x,y)处显示字符串

函数原型:

int16_t drawString(const char *string, int32_t poX, int32_t poY, uint8_t font)

参数类型描述
stringconst char *一个字符串
poXint32_tX坐标
poYint32_tY坐标
fontuint8_t字体

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.drawString("Hello M5", 160, 100, 2);    //在(160,100)处以2号字体显示字符串Hello M5
}

void loop(){
}

drawNumber()

功能:

在(x,y)处显示整数

函数原型:

void drawNumber(long long_num, int32_t poX, int32_t poY)

参数类型描述
long_numlong数字
poXint32_tX坐标
poYint32_tY坐标

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.drawNumber(99, 55, 100);    //在(99,55)处显示整数100
}

void loop(){
}

drawChar()

功能:

在(X,Y)处以字体font显示字符

函数原型:

int16_t drawChar(int16_t uniCode, int32_t x, uint16_t y, uint8_t font)

参数类型描述
uniCodeint16_t字符
xint32_tX坐标
yuint16_tY坐标
fontuint8_t字体

使用示例:

#include <M5Stack.h>
void setup() {
  M5.begin(); //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.drawChar('A', 160, 120, 2);    //在(160,120)处以字体2显示字符A
}
void loop(){
}

drawFloat()

功能:

在(X,Y)处显示小数点后dp位的浮点数floatNumber

函数原型:

int16_t drawFloat(float floatNumber, uint8_t dp, int32_t poX, int32_t poY)

参数类型描述
floatNumberfloat所显示的小数
dpuint8_t小数位数
poXint32_t在x处显示
poYint32_t在y处显示

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();   //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.drawFloat(3.1415928,7,100,100);    //在(100,100)处显示小数点后7位的浮点数3.1415928
}

void loop() {}

drawPixel()

功能:

在(x,y)处画点

函数原型:

void drawPixel(int32_t x, int32_t y, uint32_t color)

参数:

参数描述类型
xint32_tX坐标
yint32_tY坐标
coloruint32_t颜色

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.drawPixel(22,22,RED);    //在(22,22)处画一个红色的像素点
}

void loop() {}

drawLine()

功能:

从点(x0,y0)到点(x1,y1)以指定颜色(color)绘制直线

函数原型:

void drawLine(int32_t x0, int32_t y0, int32_t x1, int32_t y1, uint32_t color)

参数类型描述
x*int32_tX坐标
y*int32_tY坐标
coloruint32_t颜色

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.drawLine(200, 0, 200,2000,GREEN);    //从点(200,0)到点(200,200)以绿色绘制直线
}

void loop(){
}

drawRect()

功能:

在(x,y)处以指定颜色绘制宽高分别为width和height的矩形线框

函数原型:

void drawRect(int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color)

参数类型描述
x*int32_tX坐标
y*int32_tY坐标
wint32_t矩形框的宽(单位: 像素)
hint32_t矩形框的高(单位: 像素)
coloruint32_t颜色值

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.drawRect(180, 12, 122, 10, BLUE);    //在(180,12)处以蓝色绘制宽高分别为122和10的矩形线框
}

void loop(){
}

fillRect()

功能:

在(x,y)处以指定颜色绘制宽高分别为width和height的填充矩形

函数原型:

void fillRect(int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color)

参数类型描述
x*int32_tX坐标
y*int32_tY坐标
wint32_t矩形框的宽(单位: 像素)
hint32_t矩形框的高(单位: 像素)
coloruint32_t颜色值

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.fillRect(150, 120, 122, 10, BLUE);    //在(150,120)处绘制一个长122、宽为10的蓝色填充矩形
}

void loop(){
}

drawRoundRect()

功能:

在(x,y)处绘制宽高分别为width、height的圆角矩形线框,圆角半径为radius,颜色为color

函数原型:

void drawRoundRect(int32_t x, int32_t y, int32_t w, int32_t h, int32_t r, uint32_t color)

参数类型描述
xint32_t矩形左上角的x坐标
yint32_t矩形左上角的Y坐标
wint32_t矩形(像素)
hint32_t矩形的高度
rint32_t转角半径f
coloruint32_t方线的颜色

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();   //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.drawRoundRect(55,55,30,50,10,GREEN);    //在(55,55)处绘制宽高分别为30、50的圆角半径为10,颜色为绿色的圆角矩形线框

void loop() {}

fillRoundRect()

功能:

在(x,y)处绘制宽高分别为width、height的圆角矩形线框,圆角半径为radius,颜色为color

函数原型:

void fillRoundRect(int32_t x, int32_t y, int32_t w, int32_t h, int32_t r, uint32_t color)

参数类型描述
xint32_t矩形左上角的x坐标
yint32_t矩形左上角的Y坐标
wint32_t矩形宽度(像素)
hint32_t矩形的高度(像素)
rint32_t转角半径f
coloruint32_t方线的颜色

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();   //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.fillRoundRect(55, 55, 30, 50, 10, GREEN);//在(55,55)处绘制宽高分别为30、50的圆角半径为10,颜色为绿色的圆角矩形  
}

void loop() {}

drawCircle()

功能:

在(x,y)处绘制半径为r的color色圆线框

函数原型:

void drawCircle(int32_t x0, int32_t y0, int32_t r, uint32_t color)

参数:

参数描述类型
x0int32_t圆中心X坐标
y0int32_t圆中心Y坐标
rint32_t圆的半径
coloruint32_t圆的颜色

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();   //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.drawCircle(100, 100, 50, RED);   //在(x,y)处绘制半径为50的红色圆线圈
}

void loop() {}

fillCircle()

功能:

在(x,y)处绘制半径为r的color色填充圆

函数原型:

void drawCircle(int32_t x0, int32_t y0, int32_t r, uint32_t color)

参数:

参数描述类型
x0int32_t圆中心X坐标
y0int32_t圆中心Y坐标
rint32_t圆的半径
coloruint32_t圆的颜色

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();   //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.fillCircle(100, 100, 50, RED); //在(x,y)处绘制半径为50的填充红色圆
}

void loop() {}

drawEllipse()

功能:

在(x,y)处绘制宽度、高度分别为rx,ry的椭圆线框

函数原型:

void fillEllipse(int16_t x0, int16_t y0, int32_t rx, int32_t ry, uint16_t color)

参数:

参数类型描述
x0int16_t椭圆的中心X坐标
y0int16_t椭圆的中心Y坐标
rxint32_t椭圆的宽度(像素)
ryint32_t椭圆的高度(像素)
coloruint16_t椭圆的颜色

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();   //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.drawEllipse(160, 100, 60, 100, YELLOW);//在(160,100)处绘制颜色为黄色的宽度、高度分别为60,100的椭圆轮廓线
}

void loop() {}

fillEllipse()

功能:

在(x,y)处绘制宽度、高度分别为rx,ry的填充椭圆

函数原型:

void fillEllipse(int16_t x0, int16_t y0, int32_t rx, int32_t ry, uint16_t color)

参数:

参数类型描述
x0int16_t椭圆的中心X坐标
y0int16_t椭圆的中心Y坐标
rxint32_t椭圆的宽度(像素)
ryint32_t椭圆的高度(像素)
coloruint16_t椭圆的颜色

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.fillEllipse(160, 100, 60, 100, YELLOW);    //在(160,100)处绘制颜色为黄色的宽度、高度分别为60,100的填充黄色椭圆
}

void loop() {}

drawTriangle()

功能:

以(x1, y1) (x2, y2) (x3, y3)为顶点绘制三角形线框

函数原型:

void drawTriangle(int32_t x0, int32_t y0, int32_t x1, int32_t y1, int32_t x2, int32_t y2, uint32_t color)

参数描述类型
x*int32_t顶点X*的x坐标
y*int32_t顶点Y*的x坐标
coloruint32_t三角形的颜色

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();   //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.drawTriangle(30, 30, 180, 100, 80, 150, YELLOW); //以 (30,30) (180,100) (80,150)为顶点绘制黄色三角形线框
}

void loop() {}

drawTriangle()

功能:

以(x1, y1) (x2, y2) (x3, y3)为顶点绘制填充三角形

函数原型:

void drawTriangle(int32_t x0, int32_t y0, int32_t x1, int32_t y1, int32_t x2, int32_t y2, uint32_t color)

参数描述类型
x*int32_t顶点X*的x坐标
y*int32_t顶点Y*的x坐标
coloruint32_t三角形的颜色

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();   //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.drawTriangle(30, 30, 180, 100, 80, 150, YELLOW); //以 (30,30) (180,100) (80,150)为顶点绘制填充黄色三角形
}

void loop() {}

drawXBitmap()

功能:

绘制位图

函数原型:

void drawXBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t color)

参数类型描述
xint16_t坐标 X
yint16_t坐标 Y
bitmapconst uint8_t所示图像
wint16_t宽度(像素)
hint16_t高度(像素)
coloruint16_t颜色

使用示例:

见例程 sketch:M5Stack->Advanced->Display->drawXBitmap

drawBitmap()

功能:

绘制位图

函数原型:

drawBitmap(int16_t x0, int16_t y0, int16_t w, int16_t h, const uint16_t *data)

drawBitmap(int16_t x0, int16_t y0, int16_t w, int16_t h, uint16_t *data)

drawBitmap(int16_t x0, int16_t y0, int16_t w, int16_t h, const uint16_t *data, uint16_t transparent)

drawBitmap(int16_t x0, int16_t y0, int16_t w, int16_t h, const uint8_t *data)

drawBitmap(int16_t x0, int16_t y0, int16_t w, int16_t h, uint8_t *data)

参数类型描述
x0uint16_t坐标 X
y0uint16_t坐标 Y
wint16_t宽度 (像素)
hint16_t高度 (像素)
datauint16_t* / uint8_t*图像数量
transparentuint16_t透明色码

注意:
1.颜色代码由总共16位表示:红色5位,绿色6位,顶部蓝色5位

使用示例:

见例程 sketch:M5Stack->games->Tetris

drawBmpFile()

功能:

从文件中读取位图并绘制它

函数原型:

drawBmpFile(fs::FS &fs, const char *path, uint16_t x, uint16_t y)

参数类型描述
fsfs::FS文件流
pathconst char *文件路径(SD 、SPIFFS)
xint16_t坐标 X
yint16_t坐标 Y

注意:
1.根据大小和位数可能无法扩展
2.需要提前预装 Arduino ESP32 filesystem uploader

使用示例:

#include "FS.h"
//#include "SPIFFS.h"
#include <M5Stack.h>
void setup(){
    M5.begin(true, false, false, false);
  M5.Power.begin();
  M5.Lcd.drawBmpFile(SD, "/p2.bmp",0,0);
  //M5.Lcd.drawBmpFile(SPIFFS, "/p2.bmp", 0, 0);
}

我们提供一个可以用来转换jpg图像->.c文件的脚本, 可以使用它来转换一些图片, 并使用上面的API将图像绘制到屏幕上 bin2code.py

drawJpg()

功能:

从内存中读取 JPEG 格式的图片数据并绘制它

函数原型:

void drawJpg(const uint8_t *jpg_data, size_t jpg_len, uint16_t x,uint16_t y, uint16_t maxWidth, uint16_t maxHeight,uint16_t offX, uint16_t offY, jpeg_div_t scale) {

参数类型描述
jpg_datauint8_t *数据顶部
jpg_lensize_t数据长度
xuint16_t坐标 X
yuint16_t坐标 Y
maxWidthuint16_t最大宽度 (像素)
maxHeightuint16_t最大高度 (像素)
offXuint16_t抵消 X (像素)
offYuint16_t抵消 Y (像素)
scalejpeg_div_t规模

规格 (jpeg_div_t):

定义功能
JPEG_DIV_NONEno care.
JPEG_DIV_21/2
JPEG_DIV_41/4
JPEG_DIV_81/8
JPEG_DIV_MAXMAX

注意:
1.根据大小,位数和格式(渐进等),可能无法扩展
2. tetris_img下载

使用示例:

#include <M5Stack.h>
extern uint8_t tetris_img[];    //引用存储图像的数组,需要提前和 xxx.ino放在同一文件夹中

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.drawJpg(tetris_img, 34215);    //从内存中读取名为tetris_img的jpeg文件
}
void loop(){
}

drawJpgFile()

功能:

从文件流中读取JPEG数据并绘制它

函数原型:

void drawJpgFiledrawJpgFile(fs::FS &fs, const char *path, uint16_t x,uint16_t y,uint16_t maxWidth, uint16_t maxHeight, uint16_t offX,uint16_t offY, jpeg_div_t scale)

参数类型描述
fsfs::FS文件流
pathconst char *文件路径
xuint16_t坐标 X
yuint16_t坐标 Y
maxWidthuint16_tMax Width (像素)
maxHeightuint16_tMax Height (像素)
offXuint16_t抵消X (像素)
offYuint16_t抵消Y (像素)
scalejpeg_div_t规模

规模(jpeg_div_t):

定义功能
JPEG_DIV_NONEno care.
JPEG_DIV_21/2
JPEG_DIV_41/4
JPEG_DIV_81/8
JPEG_DIV_MAXMAX

注意:
1.根据尺寸和格式(渐进等),可能无法扩展

progressBar()

功能:

显示显示进度的栏

函数原型:

void progressBar(int x, int y, int w, int h, uint8_t val)

参数类型描述
xint坐标 X
yint坐标 Y
wint宽度 (像素)
hint高度(像素)
valuint8_t进度(0-100%)

注意:
1.进度条将用蓝色显示

使用示例:

#include <M5Stack.h>

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.progressBar(0, 0, 240, 20, 20);    //在(0,0)处显示宽高分别为240,20进度为20%的进度条
}

void loop() {
}

qrcode()

功能:

创建一个二维码

函数原型:

void qrcode(const char *string, uint16_t x, uint16_t y, uint8_t width, uint8_t version)

void qrcode(const String &string, uint16_t x, uint16_t y, uint8_t width, uint8_t version)

参数类型描述
valstring / String&要嵌入QR的字符串
xuint16_t坐标 X
yuint16_t坐标 Y
widthuint8_t宽度 (像素)
versionuint8_t二维码版本

注意:
1.请根据字符数量选择合适的二维码版本

使用示例:

#include <M5Stack.h>

void setup() {
  M5.Lcd.begin();   //初始化 M5Stack
  M5.Power.begin();
  M5.Lcd.qrcode("http://www.m5stack.com", 50, 10, 220, 6);
}

void loop() {
}

Sprite

setColorDepth()

功能:

设置色深

函数原型:

void* TFT_eSprite::setColorDepth(int8_t b)

使用示例:

#include <M5Stack.h>
TFT_eSprite img = TFT_eSprite(&M5.Lcd);

void setup() {
    M5.begin();        // Init M5Stack.  初始化M5Stack
    M5.Power.begin();  // Init power.  初始化电源模块
    img.setColorDepth(8); // Set color depth.  设置色深
    img.setTextSize(2);
    img.createSprite(320, 240);  //Create a 320x240 canvas. 创建一块320x240的画布
}

void loop() {}

应在创建画布前设置相应的色深

createSprite()

功能:

创建一个指定宽高的画布

函数原型:

void createSprite(int16_t w, int16_t h, uint8_t frames)

参数类型描述
xint16_tX坐标
yint16_tY坐标
framesuint8_t色深[1~2,可选]

使用示例:

#include <M5Stack.h>

TFT_eSprite img = TFT_eSprite(&M5.Lcd);

void setup() {
    M5.begin();  //初始化 M5Stack
    M5.Power.begin();
    img.setColorDepth(8);  // Set the color depth to 8 bits. 设置颜色深度为8位
    img.createSprite(320, 240);  //Create a 320x240 canvas. 创建一块320x240的画布
    img.fillSprite(RED);         //Fill the canvas with red. 在画布上全部填充红色
    img.pushSprite(0,0);  // Push the canvas to the screen at (0,0). 把画布推送到屏幕(0,0)处
}

void loop() {}

fillSprite()

功能:

将Sprite填充指定颜色

函数原型:

void fillSprite(uint32_t color)

参数类型描述
colorint32_tfilled color

使用示例:

#include <M5Stack.h>

TFT_eSprite img = TFT_eSprite(&M5.Lcd);

void setup() {
    M5.begin();  //初始化 M5Stack
    M5.Power.begin();
    img.setColorDepth(8);  // Set the color depth to 8 bits. 设置颜色深度为8位
    img.createSprite(320, 240);  //Create a 320x240 canvas. 创建一块320x240的画布
    img.fillSprite(RED);         //Fill the canvas with red. 在画布上全部填充红色
    img.pushSprite(0,0);  // Push the canvas to the screen at (0,0). 把画布推送到屏幕(0,0)处
}

void loop() {}
}

void loop() {}

pushSprite()

功能:

推送画布到指定坐标,并设置穿透色

函数原型:

void pushSprite(int32_t x, int32_t y, uint16_t transparent)

参数类型描述
xint32_tX坐标
yint32_tY坐标
transparentint16_t穿透色(可选)

使用示例:

#include <M5Stack.h>
TFT_eSprite img = TFT_eSprite(&M5.Lcd);

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  img.createSprite(320, 240);    //创建一块320x240的画布
  img.fillSprite(RED);    //在画布上全部填充红色
  img.fillCircle(100,100,20,GREEN);
  img.pushSprite(0, 0, GREEN);    //把画布推送到屏幕(0,0)处并设置绿色为穿透色
}

void loop() {}

height()

功能:

返回Sprite的高度

使用示例:

#include <M5Stack.h>
TFT_eSprite img = TFT_eSprite(&M5.Lcd);

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  img.createSprite(320, 240);    //创建一块320x240的画布
  img.fillSprite(RED);    //在画布上全部填充红色
  img.pushSprite(0, 0, WHITE);    //把画布推送到屏幕(0,0)处并设置白色为穿透色
  M5.Lcd.print(img.height());    //屏幕打印画布的高度
}

void loop() {}

deleteSprite()

功能:

从内存中删除画布

使用示例:

#include <M5Stack.h>
TFT_eSprite img = TFT_eSprite(&M5.Lcd);

void setup() {
  M5.begin();  //初始化 M5Stack
  M5.Power.begin();
  img.deleteSprite();    //从内存中删除画布
}

void loop() {}

注意:
LCD. img.均继承于此文件 In_eSPI.h , 且用法类似


Btn

read()

功能:

读取按键状态: 0,松开; 1,按下

函数原型:

uint8_t read()

使用示例:

#include <M5Atom.h>

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

void loop() {
  Serial.println(M5.Btn.read());    //在Arduino打开串口监视器,波特率设置115200即可看到读取到的按键状态
    delay(20);
}

lastChange()

函数原型:

uint32_t lastChange()

功能:

返回最后一次状态发生变化的时间

注意:
1.返回的时间是从 Atom初始化的那一刻开始计时,单位为毫秒

使用示例:

#include <M5Atom.h>

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

void loop() {
  M5.update();
  Serial.printf("The last change at %d ms /n",M5.Btn.lastChange());    //串口输出按键状态最后一次发生变化的时间
}

Press

isPressed()

功能:

返回按键按下状态: 如果按键按下,返回 true; 否则返回 false

函数原型:

uint8_t isPressed()

使用示例:

#include <M5Atom.h>

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

void loop() {
  M5.update();    //需添加 M5.update()才能读取到按键的状态,细节请见 System
  if (M5.Btn.isPressed()) {    //如果按键按下
    Serial.println("Button is pressed.");
  }
  delay(20);
}

pressedFor()

功能:

返回按键按下状态: 如果按键按下超过指定时间后,返回 true; 否则返回 false

函数原型:

uint8_t pressedFor(uint32_t ms)

参数类型描述
msuint32_t按键按下时间 (毫秒)

使用示例:

#include <M5Atom.h>

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

void loop() {
  M5.update();
  if (M5.Btn.pressedFor(2000)) {    //如果按键按下超过2秒
    Serial.println("Button A was pressed for more than 2 seconds.");
    delay(1000);
  }
}

wasPressed()

功能:

返回按键按下状态: 如果按键按下,只会返回一次 true,否则返回 false

函数原型:

uint8_t wasPressed()

使用示例:

#include <M5Atom.h>

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

void loop() {
  M5.update();
  if (M5.Btn.wasPressed()) {    //如果按键按下
    Serial.println("Button is pressed.");
  }
  delay(20);
}

Released

isReleased()

功能:

返回按键释放状态: 如果按键释放,返回 true; 否则返回 false

函数原型:

uint8_t isPressed()

使用示例:

#include <M5Atom.h>

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

void loop() {
  M5.update();    //需添加M5.update()才能读取到按键的状态,细节请见System
  if (M5.Btn.isReleased()) {    //如果按键释放
    Serial.println("Button is released.");
  }
  delay(20);
}

releasedFor()

功能:

返回按键释放状态: 如果按键释放超过指定时间后,返回 true; 否则返回 false

函数原型:

uint8_t pressedFor(uint32_t ms)

参数类型描述
msuint32_t按键释放时间 (毫秒)

使用示例:

#include <M5Atom.h>

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

void loop() {
  M5.update();
  if (M5.Btn.releasedFor(2000)) {    //如果按键释放超过2秒
    Serial.println("Button A was released for more than 2 seconds.");
    delay(1000);
  }
}

wasReleased()

功能:

返回按键释放状态: 如果按键释放,只会返回一次 true,否则返回 false

函数原型:

uint8_t wasReleased()

使用示例:

#include <M5Atom.h>

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

void loop() {
  M5.update();
  if (M5.Btn.wasReleased()) {    //如果按键释放
    Serial.println("Button is Released.");
  }
  delay(20);
}

wasReleasefor()

函数原型:

uint8_t wasReleasefor(uint32_t ms)

功能:

返回按键释放状态: 如果按键按下,在超过指定时间后释放,只会返回一次 true,否则返回 false

参数类型描述
msuint32_t按键按下时间 (毫秒)

使用示例:

#include <M5Atom.h>

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

void loop() {
  M5.update();
  if (M5.Btn.wasReleasefor(3000)) {    //如果按键按下3s之后释放
      Serial.println("clear screen");
  }
}

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

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

相关文章

Redis过期策略和内存淘汰策略

过期策略 过期策略是指Redis设置过期时间且key已经到达过期时间时删除该key&#xff0c;一般有定期删除和惰性删除&#xff1b; 定期删除是指每隔固定时间扫描key&#xff0c;对已经过期的key做清除操作&#xff1b; 定期删除时并不会实际对key做全量扫描&#xff0c;而是随机…

数字时代下CIO们如何做到业务增长和安全“双手抓”

7月22日&#xff0c;由福建信息主管(CIO)网主办的品牌企业业务增长与CIO进化之道暨福建CIO网20周年&#xff08;厦门&#xff09;产业数字化供需见面会在厦门顺利举办。 作为国内云原生安全领导厂商&#xff0c;安全狗也收到邀请出席此次活动。 厦门服云信息科技有限公司&…

Python实战案例:轻松采集微博评论,揭示网络舆论热点!

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 开发环境: python 3.8: 解释器 pycharm: 代码编辑器 模块使用: requests: 发送请求 parsel: 解析数据 jieba pandas stylecloud 第三方模块安装&#xff1a; win R 输入cmd 输入安装命令 pip install 模块名 (如果你…

Android平台如何实现第三方模块编码后(H.264/H.265/AAC/PCMA/PCMU)数据实时预览播放

技术诉求 我们在做GB28181设备对接模块和RTMP直播推送模块的时候&#xff0c;遇到这样的技术需求&#xff0c;设备&#xff08;如执法记录仪&#xff09;侧除了采集传统的摄像头外&#xff0c;还需要对接比如大疆等第三方数据源&#xff0c;确保按照GB28181规范和RTMP协议规范…

使用百度地图SDK计算距离

说明&#xff1a;通过百度地图提供的SDK&#xff0c;可以计算出两个地点之间的距离&#xff0c;另外还有行驶路线等等。本文介绍如果使用百度地图SDK&#xff0c;并用java代码实现。 申请 首先需要登录百度地图的官网&#xff0c;申请开发者认证&#xff0c;个人认证一般都很…

装饰模式-扩展系统功能

买了新车后&#xff0c;不少人会对车进行装饰&#xff0c;比如给车贴膜&#xff0c;喷上骚粉的漆等。某天&#xff0c;小李和小张都买了辆车&#xff0c;小李想给车贴膜&#xff0c;小张想给车先喷漆然后再贴膜。现在中的做法是&#xff0c;把车开到改装店&#xff0c;如果要喷…

统一观测丨使用 Prometheus 监控 Cassandra 数据库最佳实践

作者&#xff1a;元格 本篇内容主要包括四部分&#xff1a;Cassandra 概览介绍、常见关键指标解读、常见告警规则解读、如何通过 Prometheus 建立相应监控体系。 Cassandra 简介 Cassandra 是什么&#xff1f; Apache Cassandra 是一个开源、分布式、去中心化、弹性可伸缩、…

day44-Spring_AOP

0目录 1.2.3 1.Spring_AOP 实体类&#xff1a; Mapper接口&#xff1a; Service和实现类&#xff1a; 测试1&#xff1a; 运行后&#xff1a; 测试2&#xff1a;无此型号时 测试3&#xff1a;库存不足时 解决方案1&#xff1a;事务声明管理器 测试&#xff1a…

【从零开始学习JAVA | 第三十篇】方法引用

前言&#xff1a; 方法引用作为一个重要的知识点&#xff0c;虽然他使用起来很复杂&#xff0c;而且会降低代码的可读性&#xff0c;但是如果用好了方法引用&#xff0c;我们也会获得不错的效率&#xff0c;因此我们在今天将为大家讲解什么是方法引用。 方法引用&#xff1a;…

J-Flash合并多个bin文件

文章目录 1. 前言2. 下载 J-Flash 工具3. 合并3个bin文件3.1 Booloader.bin3.2 APP1.bin3.3 APP2.bin3.4 保存 → 导出合并bin文件3.5 未用到的区域会被填充为 FF 4. 欢迎纠正~ 1. 前言 下面介绍用J-Flash工具合并多个bin文件的方法 2. 下载 J-Flash 工具 在下载Jink驱动的…

excel 生成sql技巧

"update 表名 set 字段名"&A2&" where 字段名"&B2&";"

最小栈,设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

题记&#xff1a; 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶…

交换机和终端设备的基本配置

1 IOS访问 1.1 操作系统 所有终端设备和网络设备都需要有操作系统 (OS)。如图所示&#xff0c;操作系统中直接与计算机硬件交互的部分称为内核。与应用程序和用户连接的部分则称为外壳。用户可以使用命令行界面 (CLI) 或图形用户界面 (GUI) 与外壳交互。 使用 CLI 时&#xf…

欧姆龙以太网模块连接MCGS步骤

你是否曾经遇到过这样的问题&#xff1a;在监控PLC数据时&#xff0c;触摸屏无法与PLC通讯&#xff0c;或者PLC的通讯口被占用了&#xff1f;今天&#xff0c;我要向大家介绍一款神奇的设备——捷米特JM-ETH-CP转以太网模块&#xff0c;它能够即插即用&#xff0c;不占用PLC通讯…

被吹爆的Wi-Fi 6,究竟强在哪?

被吹爆的Wi-Fi 6&#xff0c;究竟强在哪&#xff1f; 伴随IoT技术的成熟及发展&#xff0c;Wi-Fi标准也在不断迭代升级&#xff0c;然而就实际情况来说&#xff0c;依旧有不少人仍在使用旧标准&#xff0c;比如Wi-Fi 4、Wi-Fi 5。其实WiFi的每一次升级除了速率更高&#xff0c;…

SpringCloud+Nacos集成Seata-1.7.0分布式事务

Seata是一个比较成熟的分布式事务工具&#xff0c;非常好用&#xff0c;主流的的一套&#xff0c;网上大多都是1.4版本&#xff0c;以及不完整了&#xff0c;鄙人也是找了好久才找到有个1.7版本的详细教程&#xff08;放在最后面了&#xff0c;毕竟是别人的技术&#xff0c;这里…

打造高效便捷的采购管理平台,提升企业采购效率

随着企业规模的扩大和供应链的日益复杂&#xff0c;传统的手工采购管理方式已经不能满足企业的需求。采购管理平台的出现为企业提供了一个集中、高效、便捷的采购管理工具。本文将重点探讨采购管理平台的意义与作用&#xff0c;并介绍如何打造一个高效便捷的采购管理平台。 一、…

【干货分享】如何恢复SOLIDWORKS 零件、装配体和工程图模板?

当我们卸载了SOLIDWORKS或者是购买了一台新笔记本电脑或是丢失了一直在使用的模板时&#xff0c;我们可以通过打开过去的零件、装配体和工程图文件来恢复 SOLIDWORKS 模板。 ▷ 零件模板 打开包含所需自定义属性的上一个部件。 保存零件的副本以避免对原始文件进行意外更改。…

机器学习深度学习——线性回归的从零开始实现

虽然现在的深度学习框架几乎可以自动化实现下面的工作&#xff0c;但从零开始实现可以更了解工作原理&#xff0c;方便我们自定义模型、自定义层或自定义损失函数。 import random import torch from d2l import torch as d2l线性回归的从零开始实现 生成数据集读取数据集初始…

【技术】国标GB28181视频监控平台EasyGBS视无法播放,抓包返回ICMP

视频流媒体安防监控国标GB28181平台EasyGBS视频能力丰富&#xff0c;部署灵活&#xff0c;既能作为业务平台使用&#xff0c;也能作为安防监控视频能力层被业务管理平台调用。国标GB28181视频EasyGBS平台可提供流媒体接入、处理、转发等服务&#xff0c;支持内网、公网的安防视…