RT-Thread 星火1号学习笔记

在这里插入图片描述

LED 闪烁例程

硬件说明

LED 连接在开发板的某个 GPIO 端口上,通过控制该端口的高低电平来实现 LED 的亮灭。

软件说明

  1. 初始化 GPIO 端口
/* 配置 LED 灯引脚 */
#define PIN_LED_B              GET_PIN(F, 11)      // PF11 :  LED_B        --> LED
#define PIN_LED_R              GET_PIN(F, 12)      // PF12 :  LED_R        --> LED
  1. 设置延时,使 LED 闪烁
/* LED 灯 亮 */
rt_pin_write(PIN_LED_R, PIN_LOW);
LOG_D("led on, count: %d", count);
rt_thread_mdelay(500);
/* LED 灯 灭 */
rt_pin_write(PIN_LED_R, PIN_HIGH);
LOG_D("led off");
rt_thread_mdelay(500);

RGB LED 例程

硬件说明

RGB-LED 属于共阳 LED ,阴极分别与单片机的引脚连接,其中红色 LED 对应 PF12 号引脚,蓝色 LED 对应 PF11 号引脚。单片机对应的引脚输出低电平即可点亮对应的 LED ,输出高电平则会熄灭对应的 LED。

软件说明

  1. 配 置 LED 灯 引 脚
#define PIN_LED_B GET_PIN(F, 11) // PF11 : LED_B --> LED
#define PIN_LED_R GET_PIN(F, 12) // PF12 : LED_R --> LED
  1. RGB-LED 灯变换
/* 控 制 RGB 灯 */
rt_pin_write(PIN_LED_R, _blink_tab[group_current][0]);
rt_pin_write(PIN_LED_B, _blink_tab[group_current][1]);
/* 输 出 LOG 信 息 */
LOG_D("group: %d | red led [%-3.3s] | | blue led [%-3.3s]",group_current,_blink_tab[group_current][0] == LED_ON ? "ON" : "OFF",_blink_tab[group_current][1] == LED_ON ? "ON" : "OFF");
count++;
/* 延 时 一 段 时 间 */
rt_thread_mdelay(500);

按键输入例程

硬件说明

KEY0(LEFT) 引脚连接单片机 PC0(LEFT) 引脚, KEY0(LEFT) 按键按下为低电平,松开为高电平

软件说明

  1. KEY0(LEFT) 对应的单片机引脚定义
#define PIN_KEY0 GET_PIN(C, 0) // PC0: KEY0 --> KEY
  1. 为了实验效果清晰可见,板载 RGB 红色 LED 作为 KEY0(LEFT) 的状态指示灯,设置 RGB 红灯引脚的模式为输出模式,然后设置 PIN_KEY0 引脚为输入模式,最后在 while 循环中通过rt_pin_read(PIN_KEY0) 判断KEY0(LEFT) 的电平状态,并作 50ms 的消抖处理,如果成功判断 KEY0(LEFT) 为低电平状态(即按键按
    下)则打印输出 “KEY0 pressed!” 并且指示灯亮,否则指示灯熄灭
/* 读 取 按 键 KEY0 的 引 脚 状 态 */
if (rt_pin_read(PIN_KEY0) == PIN_LOW)
{rt_thread_mdelay(50);if (rt_pin_read(PIN_KEY0) == PIN_LOW){/* 按 键 已 被 按 下, 输 出 log, 点 亮 LED 灯 */LOG_D("KEY0 pressed!");rt_pin_write(PIN_LED_R, PIN_LOW);}
}
else
{/* 按 键 没 被 按 下, 熄 灭 LED 灯 */rt_pin_write(PIN_LED_R, PIN_HIGH);
}
rt_thread_mdelay(10);
count++;

外部中断控制蜂鸣器例程

硬件说明

在这里插入图片描述

软件说明

  1. 查对应原理图可知,WK_UP、KEY1 按下为低电平,松开为高电平。所以在 main 函数中,WK_UP和 KEY1 按键设置为上拉输入模式,PIN_BEEP 引脚设置为输出模式。
  2. 然后使用 rt_pin_attach_irq 函数分别设置 KEY1 和 WK_UP 按键中断为下降沿触发中断并且绑定回调函数、设置回调函数相应的入参, 使用 rt_pin_irq_enable 函数使能这两个按键中断。
/* 使 能 中 断 */
rt_pin_irq_enable(PIN_KEY1, PIN_IRQ_ENABLE);
rt_pin_irq_enable(PIN_WK_UP, PIN_IRQ_ENABLE);
while (1)
{
}
  1. 在中断回调函数中判断入参,根据不同入参进行相应的操作
/* 中 断 回 调 */
void irq_callback(void *args)
{rt_uint32_t sign = (rt_uint32_t) args;switch (sign){case PIN_WK_UP :rt_pin_write(PIN_BEEP,PIN_HIGH);LOG_D("WK_UP interrupt. beep on.");break;case PIN_KEY1 :rt_pin_write(PIN_BEEP,PIN_LOW);LOG_D("KEY1 interrupt. beep off.");break;default:LOG_E("error sign= %d !", sign);break;}
}

红外遥控例程

硬件说明

在这里插入图片描述

红外发射脚 GPIO_IR_TRANSMEET 接单片机引脚 PB1,红外接收头引脚 GPIO_IR_RECV接单片机引脚 PF8(TIM3_CH4 通道)

软件说明

  1. 选择NEC 解码器,初始化 GPIO 引脚。然后在 while 循环中扫描按键、打印输出接收到的红外数据,当 KEY0按下后将会把最近一次接收到的红外数据通过红外发射头发送出去
/* 按 键 扫 描 */
key = key_scan();
if(key == PIN_KEY0)
{/* 有 按 键 按 下, 蓝 灯 亮 起 */rt_pin_write(PIN_LED_B, PIN_LOW);infrared_data.data.nec.repeat = 0;/* 发 送 红 外 数 据 */infrared_write("nec",&infrared_data);rt_thread_mdelay(200);LOG_I("SEND OK: addr:0x%02X key:0x%02X repeat:%d",infrared_data.data.nec.addr, infrared_data.data.nec.key,infrared_data.data.nec.repeat);
}
else if(infrared_read("nec",&infrared_data) == RT_EOK)
{/* 读 取 到 红 外 数 据, 红 灯 亮 起 */rt_pin_write(PIN_LED_R, PIN_LOW);LOG_I("RECEIVE OK: addr:0x%02X key:0x%02X repeat:%d",infrared_data.data.nec.addr, infrared_data.data.nec.key,infrared_data.data.nec.repeat);
}
rt_thread_mdelay(10);
/* 熄 灭 蓝 灯 */
rt_pin_write(PIN_LED_B, PIN_HIGH);
/* 熄 灭 红 灯 */
rt_pin_write(PIN_LED_R, PIN_HIGH);
count++;
  1. 主要使用了红外软件包的以下三个函数
/* 选 择 解 码 器 */
rt_err_t ir_select_decoder(const char* name);
/* 读 取 红 外 数 据。 */
rt_err_t infrared_read(const char* decoder_name,struct infrared_decoder_data* data);
/* 接 收 红 外 数 据。 */
rt_err_t infrared_write(const char* decoder_name, struct infrared_decoder_data* data
);

RTC 和 RTC 闹钟的使用例程

硬件说明

例程使用的 RTC 设备依赖于 LSE 时钟

软件说明

  1. 在 main 函数中,获取到了 RTC 设备,然后设置一次系统时间,随后获取一次系统时间以便检测时间是否设置成功,最后延时 1s 后再次获取系统时间
/* 设 置 日 期 */
ret = set_date(2018, 12, 3);
if (ret != RT_EOK)
{rt_kprintf("set RTC date failed\n");return ret;
}
/* 设 置 时 间 */
ret = set_time(11, 15, 50);
if (ret != RT_EOK)
{rt_kprintf("set RTC time failed\n");return ret;
}
/* 获 取 时 间 */
now = time(RT_NULL);
rt_kprintf("%s\n", ctime(&now));
/* 延 时 1 秒 */
rt_thread_mdelay(1000);
/* 获 取 时 间 */
now = time(RT_NULL);
rt_kprintf("%s\n", ctime(&now));
  1. 下面代码创建可一个 RTC 闹钟,然后设置 5 秒后唤醒,最后把该函数导入 msh 命令行中
void user_alarm_callback(rt_alarm_t alarm, time_t timestamp)
{rt_kprintf("user alarm callback function.\n");
}
void alarm_sample(void)
{struct rt_alarm_setup setup;struct rt_alarm * alarm = RT_NULL;static time_t now;struct tm p_tm;if (alarm != RT_NULL)return;/* 获 取 当 前 时 间 戳, 并 把 下 5 秒 时 间 设 置 为 闹 钟 时 间 */now = time(NULL) + 5;gmtime_r(&now,&p_tm);setup.flag = RT_ALARM_ONESHOT;setup.wktime.tm_year = p_tm.tm_year;setup.wktime.tm_mon = p_tm.tm_mon;setup.wktime.tm_mday = p_tm.tm_mday;setup.wktime.tm_wday = p_tm.tm_wday;setup.wktime.tm_hour = p_tm.tm_hour;setup.wktime.tm_min = p_tm.tm_min;setup.wktime.tm_sec = p_tm.tm_sec;alarm = rt_alarm_create(user_alarm_callback, &setup);if(RT_NULL != alarm){rt_alarm_start(alarm);}
}
/* export msh cmd */
MSH_CMD_EXPORT(alarm_sample,alarm sample);

LCD 显示例程

硬件说明

通过 fsmc 模拟出驱动时序和单片机进行通讯。使用了 8 根数据线传输数据,一根地址选择线作为芯片的使能信号

软件说明

  1. 在 main 函数中,通过调用已经封装好的 LCD API 函数,首先执行的是清屏操作,将 LCD 全部刷成白色。然后设置画笔的颜色为黑色,背景色为白色。接着显示 RT-Thread 的 LOGO。最后会显示一些信息,包括 16x16 像素,24x24 像素和 32x32 像素的三行英文字符,一条横线和一个同心圆
/* show RT-Thread logo */
lcd_show_image(0, 0, 240, 69, image_rttlogo);/* set the background color and foreground color */
lcd_set_color(WHITE, BLACK);/* show some string on lcd */
lcd_show_string(10, 69, 16, "Hello, RT-Thread!");
lcd_show_string(10, 69 + 16, 24, "RT-Thread");
lcd_show_string(10, 69 + 16 + 24, 32, "RT-Thread");/* draw a line on lcd */
lcd_draw_line(0, 69 + 16 + 24 + 32, 240, 69 + 16 + 24 + 32);/* draw a concentric circles */
lcd_draw_point(120, 194);
for (int i = 0; i < 46; i += 4)
{lcd_draw_circle(120, 194, i);
}

运行效果

在这里插入图片描述

AHT10 温湿度传感器例程

硬件说明

在这里插入图片描述

单片机通过软件 iic I2C3(soft) scl(PE0)、I2C3(soft) sda(PE1) 对传感器 aht10 发送命令、读取数据等

软件说明

  1. 初始化传感器 aht10,传入参数 i2c2 为该传感器挂载的 i2c 总线的名称;初始化若失败,则返回空,程序不会被执行,若成功,则返回传感器设备对象;然后将返回的设备对象分别传入读取湿度与温度的函数
/* 等 待 传 感 器 正 常 工 作 */
rt_thread_mdelay(2000);
/* 初 始 化 aht10 */
dev = aht10_init(i2c_bus_name);
if (dev == RT_NULL)
{LOG_E("The sensor initializes failure");return 0;
}
while (count++ < 100)
{/* 读 取 湿 度 */humidity = aht10_read_humidity(dev);LOG_D("humidity : %d.%d %%", (int)humidity, (int)(humidity * 10) % 10);/* 读 取 温 度 */temperature = aht10_read_temperature(dev);LOG_D("temperature: %d.%d", (int)temperature, (int)(temperature * 10) % 10);rt_thread_mdelay(1000);
}

在这里插入图片描述

WiFi 管理例程

软件说明

初始化信号量,注册回调函数

/* 执行扫描 */rt_sem_init(&scan_done,"scan_done",0,RT_IPC_FLAG_FIFO);rt_wlan_register_event_handler(RT_WLAN_EVT_SCAN_REPORT, wlan_scan_report_hander,&i);rt_wlan_register_event_handler(RT_WLAN_EVT_SCAN_DONE, wlan_scan_done_hander,RT_NULL);if(rt_wlan_scan() == RT_EOK){LOG_D("the scan is started... ");}else{LOG_E("scan failed");}/*等待扫描完毕 */rt_sem_take(&scan_done,RT_WAITING_FOREVER);

然后连接一个测试用的 AP (名字: test_ssid , 密码: 12345678 ),并等待联网成功,打印网络信息;接着在等待 5 秒之后,断开和 AP 的连接;最后,调用接口初始化自动连接的相关配置,开启自动连接功能。在开启自动连接之后,Wlan Manager 会根据存储介质中的历史记录进行 AP连接

/* 热点连接 */LOG_D("start to connect ap ...");rt_sem_init(&net_ready, "net_ready", 0, RT_IPC_FLAG_FIFO);/* 注册 wlan ready 回调函数 */rt_wlan_register_event_handler(RT_WLAN_EVT_READY, wlan_ready_handler, RT_NULL);/* 注册 wlan 断开回调函数 */rt_wlan_register_event_handler(RT_WLAN_EVT_STA_DISCONNECTED, wlan_station_disconnect_handler, RT_NULL);/* 同步连接热点 */result = rt_wlan_connect(WLAN_SSID, WLAN_PASSWORD);if (result == RT_EOK){rt_memset(&info, 0, sizeof(struct rt_wlan_info));/* 获取当前连接热点信息 */rt_wlan_get_info(&info);LOG_D("station information:");print_wlan_information(&info,0);/* 等待成功获取 IP */result = rt_sem_take(&net_ready, NET_READY_TIME_OUT);if (result == RT_EOK){LOG_D("networking ready!");msh_exec("ifconfig", rt_strlen("ifconfig"));}else{LOG_D("wait ip got timeout!");}/* 回收资源 */rt_wlan_unregister_event_handler(RT_WLAN_EVT_READY);rt_sem_detach(&net_ready);}else{LOG_E("The AP(%s) is connect failed!", WLAN_SSID);}

Shell 操作 WiFi

wifi 扫描命令格式

wifi scan

WiFi 连接

wifi join test_ssid 12345678

WiFi 断开

wifi disc

运行效果

在这里插入图片描述

MQTT 协议通信例程

硬件说明

依赖星火 1 号板卡上的 WiFi 模块完成网络通信

软件说明

  1. KEY0(LEFT) 对应的单片机引脚定义
#define PIN_KEY0 GET_PIN(C, 0) // PC0: KEY0 --> KEY
  1. 为了实验效果清晰可见,板载 RGB 红色 LED 作为 KEY0(LEFT) 的状态指示灯,设置 RGB 红灯引脚的模式为输出模式,然后设置 PIN_KEY0 引脚为输入模式,最后在 while 循环中通过rt_pin_read(PIN_KEY0) 判断KEY0(LEFT) 的电平状态,并作 50ms 的消抖处理,如果成功判断 KEY0(LEFT) 为低电平状态(即按键按
    下)则打印输出 “KEY0 pressed!” 并且指示灯亮,否则指示灯熄灭
/* 读 取 按 键 KEY0 的 引 脚 状 态 */
if (rt_pin_read(PIN_KEY0) == PIN_LOW)
{rt_thread_mdelay(50);if (rt_pin_read(PIN_KEY0) == PIN_LOW){/* 按 键 已 被 按 下, 输 出 log, 点 亮 LED 灯 */LOG_D("KEY0 pressed!");rt_pin_write(PIN_LED_R, PIN_LOW);}
}
else
{/* 按 键 没 被 按 下, 熄 灭 LED 灯 */rt_pin_write(PIN_LED_R, PIN_HIGH);
}
rt_thread_mdelay(10);
count++;

运行效果

在这里插入图片描述

HTTP Client 功能实现例程

软件说明

要实现设备通过 GET 请求方式从指定服务器中获取数据,之后通过 POST 请求方式上传一段
数据到指定服务器,并接收服务器响应数据

  1. GET 请求发送, 会根据传入的 URL 发送 get 请求然后返回结果存储在 response 里面
int webclient_get_smpl(const char *uri)
{char *response = RT_NULL;size_t resp_len = 0;int index;if (webclient_request(uri, RT_NULL, RT_NULL, 0, (void **)&response, &resp_len) < 0){rt_kprintf("webclient send get request failed.");return -RT_ERROR;}rt_kprintf("webclient send get request by simplify request interface.\n");rt_kprintf("webclient get response data: \n");for (index = 0; index < rt_strlen(response); index++){rt_kprintf("%c", response[index]);}rt_kprintf("\n");if (response){web_free(response);}return 0;
}
  1. POST 请求发送
int webclient_post_smpl(const char *uri, const char *post_data, size_t data_len)
{char *response = RT_NULL;char *header = RT_NULL;size_t resp_len = 0;int index = 0;webclient_request_header_add(&header, "Content-Length: %d\r\n", strlen(post_data));webclient_request_header_add(&header, "Content-Type: application/octet-stream\r\n");if (webclient_request(uri, header, post_data, data_len, (void **)&response, &resp_len) < 0){rt_kprintf("webclient send post request failed.");web_free(header);return -RT_ERROR;}rt_kprintf("webclient send post request by simplify request interface.\n");rt_kprintf("webclient post response data: \n");for (index = 0; index < resp_len; index++){rt_kprintf("%c", response[index]);}rt_kprintf("\n");if (header){web_free(header);}if (response){web_free(response);}return 0;
}

运行效果

连接成功的回调函数里面启动 http 客户端发送 get 请
求和 post 请求。并且打印返回的结果
在这里插入图片描述

TLS 安全连接例程

硬件说明

mbedTLS 例程需要依赖星火 1 号板卡上的 WiFi 模块完成网络通信

软件说明

  1. KEY0(LEFT) 对应的单片机引脚定义
#define PIN_KEY0 GET_PIN(C, 0) // PC0: KEY0 --> KEY
  1. 为了实验效果清晰可见,板载 RGB 红色 LED 作为 KEY0(LEFT) 的状态指示灯,设置 RGB 红灯引脚的模式为输出模式,然后设置 PIN_KEY0 引脚为输入模式,最后在 while 循环中通过rt_pin_read(PIN_KEY0) 判断KEY0(LEFT) 的电平状态,并作 50ms 的消抖处理,如果成功判断 KEY0(LEFT) 为低电平状态(即按键按
    下)则打印输出 “KEY0 pressed!” 并且指示灯亮,否则指示灯熄灭
/* 读 取 按 键 KEY0 的 引 脚 状 态 */
if (rt_pin_read(PIN_KEY0) == PIN_LOW)
{rt_thread_mdelay(50);if (rt_pin_read(PIN_KEY0) == PIN_LOW){/* 按 键 已 被 按 下, 输 出 log, 点 亮 LED 灯 */LOG_D("KEY0 pressed!");rt_pin_write(PIN_LED_R, PIN_LOW);}
}
else
{/* 按 键 没 被 按 下, 熄 灭 LED 灯 */rt_pin_write(PIN_LED_R, PIN_HIGH);
}
rt_thread_mdelay(10);
count++;

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

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

相关文章

c++调用 c# dll 通过 clr (详细避坑)

项目场景&#xff1a; .NET Framework 4.7.2 需要在纯C项目中调用C# 的DLL C# DLL 在.NET core 或者 .NET 8 中无法使用AOT正常导出DLL 解决方案&#xff1a; 通过 用 C/clr 项目中转 来调用 1.在c# .NET Framework项目中把接口写好&#xff0c; 这里不推荐使用 .NET 8&#…

【动手学深度学习Pytorch】1. 线性回归代码

零实现 导入所需要的包&#xff1a; # %matplotlib inline import random import torch from d2l import torch as d2l import matplotlib.pyplot as plt import matplotlib import os构造人造数据集&#xff1a;假设w[2, -3.4]&#xff0c;b4.2&#xff0c;存在随机噪音&…

论文笔记(五十六)VIPose: Real-time Visual-Inertial 6D Object Pose Tracking

VIPose: Real-time Visual-Inertial 6D Object Pose Tracking 文章概括摘要I. INTRODACTIONII. 相关工作III. APPROACHA. 姿态跟踪工作流程B. VIPose网络 文章概括 引用&#xff1a; inproceedings{ge2021vipose,title{Vipose: Real-time visual-inertial 6d object pose tra…

web——upload-labs——第三关——后缀黑名单绕过

上传一个正常的一句话木马&#xff0c;判断一下验证类型 响应后返回提示不允许上传.asp,.aspx,.php,.jsp后缀文件&#xff01; 且查看网页源代码中并没有前端验证机制&#xff0c;所以可以判断这道题是后端验证 使用burp 提示无法上传.php结尾的文件&#xff0c;但我们的一句…

LeetCode题解:18.四数之和【Python题解超详细】,三数之和 vs. 四数之和

题目描述 给你一个由 n 个整数组成的数组 nums &#xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] &#xff08;若两个四元组元素一一对应&#xff0c;则认为两个四元组重复&#xff09;&#xff1a; …

如何利用SAP低代码平台快速构建企业级应用?

SAP作为全球领先的企业管理软件解决方案提供商&#xff0c;一直致力于为企业提供全面且高效的业务管理工具。随着技术的快速发展&#xff0c;传统的开发方式已经无法满足企业在快速变化的市场环境下的需求。低代码开发平台应运而生&#xff0c;它通过简化应用程序的创建过程&am…

Redis基础篇

文章目录 1.Redis的引入2.单机和分布式3.读写分离4.缓存服务器5.微服务 1.Redis的引入 我们的这个redis就是对于这个内存数据进行存储的&#xff0c;和我们的这个变量的这个性质是一样的&#xff0c;但是我们的这个redis主要是应用于这个分布式的这个系统上面的&#xff0c;如…

C++11(四)---可变参数模板

文章目录 可变参数模板 可变参数模板 参数包代表多个类型和参数 // Args是一个模板参数包&#xff0c;args是一个函数形参参数包 // 声明一个参数包Args...args&#xff0c;这个参数包中可以包含0到任意个模板参数。 template <class ...Args> void ShowList(Args... arg…

基于Springboot+Vue的中国蛇类识别系统 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…

大数据新视界 -- 大数据大厂之 Impala 性能飞跃:分区修剪优化的应用案例(下)(22 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

ES6标准-Promise对象

目录 Promise对象的含义 Promise对象的特点 Promise对象的缺点 Promise对象的基本用法 Promise对象的简单例子 Promise新建后就会立即执行 Promise对象回调函数的参数 Promise参数不会中断运行 Promise对象的then方法 Promise对象的catch()方法 Promise状态为resolv…

【目标检测】【Ultralytics-YOLO系列】Windows11下YOLOV5人脸目标检测

【目标检测】【Ultralytics-YOLO系列】Windows11下YOLOV5人脸目标检测 文章目录 【目标检测】【Ultralytics-YOLO系列】Windows11下YOLOV5人脸目标检测前言YOLOV5模型运行环境搭建YOLOV5模型运行数据集准备YOLOV5运行模型训练模型验证模型推理 总结 前言 Ultralytics YOLO 是一…

使用Axios函数库进行网络请求的使用指南

目录 前言1. 什么是Axios2. Axios的引入方式2.1 通过CDN直接引入2.2 在模块化项目中引入 3. 使用Axios发送请求3.1 GET请求3.2 POST请求 4. Axios请求方式别名5. 使用Axios创建实例5.1 创建Axios实例5.2 使用实例发送请求 6. 使用async/await简化异步请求6.1 获取所有文章数据6…

windows工具 -- 使用rustdesk和云服务器自建远程桌面服务, 手机, PC, Mac, Linux远程桌面 (简洁明了)

目的 向日葵最先放弃了, todesk某些功能需要收费, 不想用了想要 自己搭建远程桌面 自己使用希望可以电脑 控制手机分辨率高一些 原理理解 ubuntu云服务器配置 够买好自己的云服务器, 安装 Ubuntu操作系统 点击下载 hbbr 和 hbbs 两个 deb文件: https://github.com/rustdesk/…

MySQL-关联查询和子查询

目录 一、笛卡尔积 二、表连接 1、内部连接 1.1 等值连接 1.2 非等值连接 2、外部链接 2.1 左外连接-LEFT JOIN 2.2 右外连接-RIGHT JOIN 2.3 全关联-FULL JOIN/UNION 三、子查询 1、嵌套子查询 2、相关子查询 3、insert和select语句添加数据 4、update和select语…

AWTK-WIDGET-WEB-VIEW 实现笔记 (1) - 难点

webview 提供了一个跨平台的 webview 库&#xff0c;其接口简单&#xff0c;提供的例子也直观易懂。但是把它集成到 AWTK 里&#xff0c;还是遇到一些难题&#xff0c;这里记录一下&#xff0c;供有需要的朋友参考。 1. 作为 AWTK 控件 webview 提供的例子都是独立的程序&…

类与对象;

目录 一、认识类&#xff1b; 1、类的引入&#xff1b; 2、类的定义&#xff1b; 类的两种定义方式&#xff1a; 3、类的访问限定符及封装&#xff1b; 4、类的作用域&#xff1b; 5、类的实例化&#xff1b; 6、类对象模型&#xff1b; 计算类对象的大小&#xff1b; …

Ubuntu22.04LTS 部署前后端分离项目

一、安装mysql8.0 1. 安装mysql8.0 # 更新安装包管理工具 sudo apt-get update # 安装 mysql数据库&#xff0c;过程中的选项选择 y sudo apt-get install mysql-server # 启动mysql命令如下 &#xff08;停止mysql的命令为&#xff1a;sudo service mysql stop&#xff0…

使用 Ant Design Vue 自定渲染函数customRender实现单元格合并功能rowSpan

使用 Ant Design Vue 自定渲染函数customRender实现单元格合并功能rowSpan 背景 在使用Ant Design Vue 开发数据表格时&#xff0c;我们常常会遇到需要合并单元格的需求。 比如&#xff0c;某些字段的值可能会在多行中重复出现&#xff0c;而我们希望将这些重复的单元格合并为…

27.<Spring博客系统③(实现用户退出登录接口+发布博客+删除/编辑博客)>

PS&#xff1a;关于打印日志 1.建议在关键节点打印日志。 ①请求入口。 ②结果响应 2.在可能发生错误的节点打印日志 3.日志不是越多越好。因为打日志也会消耗性能。 日志也可以配置去除重复日志。 一、用户退出功能 判断用户退出。我们只需要在前端将token删掉就可以了。 由于…