使用Python从阿里云物联网平台获取STM32温度数据
在物联网(IoT)应用中,设备数据的采集与监控至关重要。本文将详细介绍如何使用Python从阿里云物联网平台获取STM32设备的温度数据。我们将从已有的Java代码出发,逐步将其转换为Python,并处理在过程中遇到的问题,最终实现一个稳定且高效的Python脚本。

前言
在物联网应用中,设备数据的实时监控是不可或缺的一部分。阿里云物联网平台提供了丰富的API接口,方便开发者获取和管理设备数据。本文将通过将Java程序转写为Python,实现从阿里云物联网平台获取STM32设备的温度数据,并确保代码的稳定性和可维护性。
环境准备
在开始编码之前,需要确保以下环境和依赖已准备好:
-
Python 3.x:确保已安装Python 3.x版本。可以通过以下命令检查版本:
python --version -
安装阿里云Python SDK:
使用
pip安装阿里云的Python SDK:pip install aliyun-python-sdk-core -
获取阿里云认证信息:
您需要拥有阿里云的
Access Key ID和Access Key Secret,用于认证API请求。 -
设备信息:
ProductKeyDeviceNameIotInstanceId
请确保这些信息已正确配置,并且设备已成功连接到阿里云物联网平台。
原始Java代码解析
本文最初的Java程序用于从阿里云物联网平台获取设备属性状态。主要步骤包括:
- 初始化阿里云客户端:使用
DefaultAcsClient,通过accessKeyId和secret进行认证。 - 发送设备属性查询请求:使用
QueryDevicePropertyStatusRequest构造请求,并发送给阿里云。 - 处理响应:解析JSON响应,提取传感器数据并打印。
以下是关键的Java代码片段:
// 初始化客户端
IClientProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, secret);
client = new DefaultAcsClient(profile);// 构造查询设备属性请求
QueryDevicePropertyStatusRequest request = new QueryDevicePropertyStatusRequest();
request.setRegionId(regionId);
request.setIotInstanceId(iotid);
request.setDeviceName(deviceName);
request.setProductKey(deviceProductkey);// 发送请求并获取响应
QueryDevicePropertyStatusResponse response = client.getAcsResponse(request);// 解析JSON响应并提取数据
String string = JSON.toJSONString(response);
JsonObject jsonObject = (JsonObject) parser.parse(string);
JsonObject data = (JsonObject) jsonObject.get("data");
JsonArray list = (JsonArray) data.get("list");
System.out.println("传感器数据:" + list.get(0).getAsJsonObject().get("value"));
Python代码转换与优化
将上述Java代码转换为Python之后,初步实现了设备数据的获取。然而,在实际运行中遇到了IndexError,这是因为响应中的数据列表为空。本文将逐步优化代码,确保其稳定性和准确性。
初始Python代码
初步的Python代码如下:
import time
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
from aliyunsdkcore.acs_exception.exceptions import ClientException# ====================== 配置信息 ======================
ACCESS_KEY_ID = "YOUR_ACCESS_KEY_ID" # 请替换为您的Access Key ID
SECRET = "YOUR_ACCESS_KEY_SECRET" # 请替换为您的Access Key Secret
REGION_ID = "cn-shanghai"DEVICE_PRODUCTKEY = "hfuyHEEc31U"
DEVICE_NAME = "STM32_tem_hum_1215"IOT_INSTANCE_ID = "iot-06z00f0h5dpyp1f"
# =======================================================def get_device_property(client):"""查询设备属性状态并打印第一个传感器的数据值"""# 创建请求对象request = CommonRequest()request.set_accept_format('json')request.set_domain('iot.cn-shanghai.aliyuncs.com') # 根据您的地域可能需要调整request.set_method('POST')request.set_version('2018-01-20')request.set_action_name('QueryDevicePropertyStatus')# 设置请求参数request.add_query_param('IotInstanceId', IOT_INSTANCE_ID)request.add_query_param('DeviceName', DEVICE_NAME)request.add_query_param('ProductKey', DEVICE_PRODUCTKEY)try:# 发送请求并获取响应response = client.do_action_with_exception(request)# 响应内容是字节,需要解码成字符串response_str = response.decode('utf-8')# 解析JSON响应response_json = json.loads(response_str)# 打印整个响应(用于调试,实际使用时可以移除)print("完整响应:", json.dumps(response_json, indent=4, ensure_ascii=False))# 提取传感器数据data = response_json.get('data', {})properties = data.get('list', [])if properties:# 假设您要获取列表中的第一个属性值first_property = properties[0]value = first_property.get('Value')print(f"传感器数据:{value}")else:print("未获取到传感器数据。")print(f"Data 内容: {data}")except ClientException as e:print(f"请求失败:{e}")def main():# 初始化AcsClientclient = AcsClient(ACCESS_KEY_ID, SECRET, REGION_ID)# 无限循环,每秒查询一次while True:get_device_property(client)time.sleep(1) # 暂停1秒if __name__ == "__main__":main()
处理空列表错误
运行上述代码时,可能会遇到以下错误:
Traceback (most recent call last):File "c:\aliyuniot\main.py", line 71, in <module>main()File "c:\aliyuniot\main.py", line 67, in mainget_device_property(client)File "c:\aliyuniot\main.py", line 52, in get_device_propertyfirst_property = properties[0]
IndexError: list index out of range
这个错误表明在尝试访问properties[0]时,列表为空,导致IndexError。分析可能的原因:
- JSON键名大小写不匹配:确保JSON响应中的键名与代码中一致。
- API响应中确实没有数据:可能是请求参数配置错误,或设备未上报数据。
- 认证或请求参数错误:验证
AccessKeyId、Secret、IotInstanceId、DeviceName、ProductKey是否正确。
为解决上述问题,我们对代码进行了如下修改:
- 将JSON键名改为小写,确保与响应一致。
- 添加调试信息,打印完整的API响应。
- 添加对空列表的检查。
修改后的代码如下:
import time
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
from aliyunsdkcore.acs_exception.exceptions import ClientException# ====================== 配置信息 ======================
ACCESS_KEY_ID = "YOUR_ACCESS_KEY_ID" # 请替换为您的Access Key ID
SECRET = "YOUR_ACCESS_KEY_SECRET" # 请替换为您的Access Key Secret
REGION_ID = "cn-shanghai"DEVICE_PRODUCTKEY = "hfuyHEEc31U"
DEVICE_NAME = "STM32_tem_hum_1215"IOT_INSTANCE_ID = "iot-06z00f0h5dpyp1f"
# =======================================================def get_device_property(client):"""查询设备属性状态并打印第一个传感器的数据值"""# 创建请求对象request = CommonRequest()request.set_accept_format('json')request.set_domain('iot.cn-shanghai.aliyuncs.com') # 根据您的地域可能需要调整request.set_method('POST')request.set_version('2018-01-20')request.set_action_name('QueryDevicePropertyStatus')# 设置请求参数request.add_query_param('IotInstanceId', IOT_INSTANCE_ID)request.add_query_param('DeviceName', DEVICE_NAME)request.add_query_param('ProductKey', DEVICE_PRODUCTKEY)try:# 发送请求并获取响应response = client.do_action_with_exception(request)# 响应内容是字节,需要解码成字符串response_str = response.decode('utf-8')# 解析JSON响应response_json = json.loads(response_str)# 打印整个响应(用于调试,实际使用时可以移除)print("完整响应:", json.dumps(response_json, indent=4, ensure_ascii=False))# 提取传感器数据data = response_json.get('data', {})properties = data.get('list', [])if properties:# 假设您要获取列表中的第一个属性值first_property = properties[0]value = first_property.get('Value')print(f"传感器数据:{value}")else:print("未获取到传感器数据。")print(f"Data 内容: {data}")except ClientException as e:print(f"请求失败:{e}")except json.JSONDecodeError as e:print(f"JSON 解析失败:{e}")except Exception as e:print(f"发生未预期的错误:{e}")def main():# 初始化AcsClientclient = AcsClient(ACCESS_KEY_ID, SECRET, REGION_ID)# 无限循环,每秒查询一次while True:get_device_property(client)time.sleep(1) # 暂停1秒if __name__ == "__main__":main()
提取STM32温度数据
根据用户提供的完整JSON响应结构,PropertyStatusInfo是一个包含多个属性的列表。我们需要遍历该列表,找到Name为“STM32温度”的条目,并提取其Value。
修改后的代码如下:
import time
import json
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
from aliyunsdkcore.acs_exception.exceptions import ClientException# ====================== 配置信息 ======================
ACCESS_KEY_ID = "YOUR_ACCESS_KEY_ID" # 请替换为您的Access Key ID
SECRET = "YOUR_ACCESS_KEY_SECRET" # 请替换为您的Access Key Secret
REGION_ID = "cn-shanghai"DEVICE_PRODUCTKEY = "hfuyHEEc31U"
DEVICE_NAME = "STM32_tem_hum_1215"IOT_INSTANCE_ID = "iot-06z00f0h5dpyp1f"
# =======================================================def get_stm32_temperature(client):"""查询设备属性状态并打印STM32温度的值"""# 创建请求对象request = CommonRequest()request.set_accept_format('json')request.set_domain('iot.cn-shanghai.aliyuncs.com') # 根据您的地域可能需要调整request.set_method('POST')request.set_version('2018-01-20')request.set_action_name('QueryDevicePropertyStatus')# 设置请求参数request.add_query_param('IotInstanceId', IOT_INSTANCE_ID)request.add_query_param('DeviceName', DEVICE_NAME)request.add_query_param('ProductKey', DEVICE_PRODUCTKEY)try:# 发送请求并获取响应response = client.do_action_with_exception(request)# 响应内容是字节,需要解码成字符串response_str = response.decode('utf-8')# 解析JSON响应response_json = json.loads(response_str)# 打印整个响应(用于调试,实际使用时可以移除)print("完整响应:", json.dumps(response_json, indent=4, ensure_ascii=False))# 提取传感器数据data = response_json.get('Data', {})list_data = data.get('List', {})property_status_info = list_data.get('PropertyStatusInfo', [])if not property_status_info:print("未获取到 PropertyStatusInfo 数据。")print(f"Data 内容: {data}")return# 寻找名称为 "STM32温度" 的属性stm32_temp_value = Nonefor prop in property_status_info:if prop.get('Name') == "STM32温度":stm32_temp_value = prop.get('Value')breakif stm32_temp_value is not None:print(f"STM32温度:{stm32_temp_value}")else:print("未找到名称为 'STM32温度' 的属性。")except ClientException as e:print(f"请求失败:{e}")except json.JSONDecodeError as e:print(f"JSON 解析失败:{e}")except Exception as e:print(f"发生未预期的错误:{e}")def main():# 初始化AcsClientclient = AcsClient(ACCESS_KEY_ID, SECRET, REGION_ID)# 无限循环,每秒查询一次while True:get_stm32_temperature(client)time.sleep(1) # 暂停1秒if __name__ == "__main__":main()
进一步优化
为了提高代码的健壮性和可维护性,我们进行了以下优化:
- 使用
logging模块替代print:方便管理日志级别和格式。 - 环境变量管理敏感信息:避免将
Access Key ID和Secret硬编码在脚本中。 - 优雅地终止脚本:捕获键盘中断信号,使脚本可以通过
Ctrl+C优雅地退出。
优化后的代码如下:
import time
import json
import os
import logging
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
from aliyunsdkcore.acs_exception.exceptions import ClientException# ====================== 配置信息 ======================
ACCESS_KEY_ID = os.getenv('ALIYUN_ACCESS_KEY_ID') # 从环境变量获取
SECRET = os.getenv('ALIYUN_SECRET') # 从环境变量获取
REGION_ID = "cn-shanghai"DEVICE_PRODUCTKEY = "hfuyHEEc31U"
DEVICE_NAME = "STM32_tem_hum_1215"IOT_INSTANCE_ID = "iot-06z00f0h5dpyp1f"
# =======================================================# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')def get_stm32_temperature(client):"""查询设备属性状态并打印STM32温度的值"""# 创建请求对象request = CommonRequest()request.set_accept_format('json')request.set_domain('iot.cn-shanghai.aliyuncs.com') # 根据您的地域可能需要调整request.set_method('POST')request.set_version('2018-01-20')request.set_action_name('QueryDevicePropertyStatus')# 设置请求参数request.add_query_param('IotInstanceId', IOT_INSTANCE_ID)request.add_query_param('DeviceName', DEVICE_NAME)request.add_query_param('ProductKey', DEVICE_PRODUCTKEY)try:# 发送请求并获取响应response = client.do_action_with_exception(request)# 响应内容是字节,需要解码成字符串response_str = response.decode('utf-8')# 解析JSON响应response_json = json.loads(response_str)# 打印整个响应(用于调试,实际使用时可以移除)logging.debug("完整响应: %s", json.dumps(response_json, indent=4, ensure_ascii=False))# 提取传感器数据data = response_json.get('Data', {})list_data = data.get('List', {})property_status_info = list_data.get('PropertyStatusInfo', [])if not property_status_info:logging.warning("未获取到 PropertyStatusInfo 数据。")logging.debug("Data 内容: %s", data)return# 寻找名称为 "STM32温度" 的属性stm32_temp_value = Nonefor prop in property_status_info:if prop.get('Name') == "STM32温度":stm32_temp_value = prop.get('Value')breakif stm32_temp_value is not None:logging.info(f"STM32温度:{stm32_temp_value}")else:logging.warning("未找到名称为 'STM32温度' 的属性。")except ClientException as e:logging.error(f"请求失败:{e}")except json.JSONDecodeError as e:logging.error(f"JSON 解析失败:{e}")except Exception as e:logging.error(f"发生未预期的错误:{e}")def main():# 检查环境变量是否设置if not ACCESS_KEY_ID or not SECRET:logging.error("未设置环境变量 ALIYUN_ACCESS_KEY_ID 和/或 ALIYUN_SECRET。请设置后重试。")return# 初始化AcsClientclient = AcsClient(ACCESS_KEY_ID, SECRET, REGION_ID)try:# 无限循环,每秒查询一次while True:get_stm32_temperature(client)time.sleep(1) # 暂停1秒except KeyboardInterrupt:logging.info("脚本已手动终止。")if __name__ == "__main__":main()
完整优化后的Python代码
结合上述所有优化,以下是最终的Python脚本,用于从阿里云物联网平台获取STM32温度数据。
import time
import json
import os
import logging
from aliyunsdkcore.client import AcsClient
from aliyunsdkcore.request import CommonRequest
from aliyunsdkcore.acs_exception.exceptions import ClientException# ====================== 配置信息 ======================
ACCESS_KEY_ID = os.getenv('ALIYUN_ACCESS_KEY_ID') # 从环境变量获取
SECRET = os.getenv('ALIYUN_SECRET') # 从环境变量获取
REGION_ID = "cn-shanghai"DEVICE_PRODUCTKEY = "hfuyHEEc31U"
DEVICE_NAME = "STM32_tem_hum_1215"IOT_INSTANCE_ID = "iot-06z00f0h5dpyp1f"
# =======================================================# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')def get_stm32_temperature(client):"""查询设备属性状态并打印STM32温度的值"""# 创建请求对象request = CommonRequest()request.set_accept_format('json')request.set_domain('iot.cn-shanghai.aliyuncs.com') # 根据您的地域可能需要调整request.set_method('POST')request.set_version('2018-01-20')request.set_action_name('QueryDevicePropertyStatus')# 设置请求参数request.add_query_param('IotInstanceId', IOT_INSTANCE_ID)request.add_query_param('DeviceName', DEVICE_NAME)request.add_query_param('ProductKey', DEVICE_PRODUCTKEY)try:# 发送请求并获取响应response = client.do_action_with_exception(request)# 响应内容是字节,需要解码成字符串response_str = response.decode('utf-8')# 解析JSON响应response_json = json.loads(response_str)# 打印整个响应(用于调试,实际使用时可以移除)logging.debug("完整响应: %s", json.dumps(response_json, indent=4, ensure_ascii=False))# 提取传感器数据data = response_json.get('Data', {})list_data = data.get('List', {})property_status_info = list_data.get('PropertyStatusInfo', [])if not property_status_info:logging.warning("未获取到 PropertyStatusInfo 数据。")logging.debug("Data 内容: %s", data)return# 寻找名称为 "STM32温度" 的属性stm32_temp_value = Nonefor prop in property_status_info:if prop.get('Name') == "STM32温度":stm32_temp_value = prop.get('Value')breakif stm32_temp_value is not None:logging.info(f"STM32温度:{stm32_temp_value}")else:logging.warning("未找到名称为 'STM32温度' 的属性。")except ClientException as e:logging.error(f"请求失败:{e}")except json.JSONDecodeError as e:logging.error(f"JSON 解析失败:{e}")except Exception as e:logging.error(f"发生未预期的错误:{e}")def main():# 检查环境变量是否设置if not ACCESS_KEY_ID or not SECRET:logging.error("未设置环境变量 ALIYUN_ACCESS_KEY_ID 和/或 ALIYUN_SECRET。请设置后重试。")return# 初始化AcsClientclient = AcsClient(ACCESS_KEY_ID, SECRET, REGION_ID)try:# 无限循环,每秒查询一次while True:get_stm32_temperature(client)time.sleep(1) # 暂停1秒except KeyboardInterrupt:logging.info("脚本已手动终止。")if __name__ == "__main__":main()
运行与测试
在运行脚本之前,请确保完成以下步骤:
-
设置环境变量:
为了增强安全性,不将
Access Key ID和Secret硬编码在脚本中。请通过环境变量设置这些信息。-
在Linux或macOS上:
export ALIYUN_ACCESS_KEY_ID="您的Access Key ID" export ALIYUN_SECRET="您的Access Key Secret" -
在Windows上:
set ALIYUN_ACCESS_KEY_ID=您的Access Key ID set ALIYUN_SECRET=您的Access Key Secret
-
-
安装必要的Python库:
确保已安装
aliyun-python-sdk-core:pip install aliyun-python-sdk-core -
运行脚本:
通过命令行运行Python脚本:
python main.py -
检查输出:
如果设备正确上报数据,您将看到类似以下的输出:
2023-10-01 12:00:00,000 - INFO - STM32温度:36若发生错误或未找到相关属性,您将看到相应的警告或错误信息。
总结与注意事项
本文详细介绍了如何使用Python从阿里云物联网平台获取STM32设备的温度数据,包括从Java代码的转换、错误处理、日志记录、安全管理等多个方面。以下是一些关键的注意事项:
-
安全性:
- 保护认证信息:避免将
Access Key ID和Secret硬编码在代码中,建议使用环境变量或安全的配置管理工具。 - 权限管理:确保阿里云账号具备必要的权限,避免过度授权。
- 保护认证信息:避免将
-
错误处理:
- 捕获异常:通过
try-except块捕获并处理可能的异常,如请求失败、JSON解析错误等。 - 日志记录:使用
logging模块记录信息、警告和错误,方便后续调试和维护。
- 捕获异常:通过
-
代码优化:
- 模块化:将功能模块化,便于维护和扩展。
- 配置管理:将配置信息集中管理,便于修改和统一管理。
-
性能与稳定性:
- 合理的查询间隔:当前设置为每秒查询一次,根据实际需求调整查询频率,避免过度请求导致API限制或费用增加。
- 优雅终止:通过捕获
KeyboardInterrupt信号,实现脚本的优雅终止,确保资源的正确释放。
-
调试与测试:
- 打印完整响应:在调试阶段,打印完整的API响应,了解数据结构,便于提取所需信息。
- 测试设备连接:确保设备已正确连接至阿里云物联网平台,并能正常上报数据。
通过本文的指导,您可以轻松地使用Python从阿里云物联网平台获取STM32设备的温度数据,并在此基础上扩展更多功能,如数据存储、实时监控、报警系统等。如有任何疑问或需要进一步的帮助,欢迎在评论区留言讨论!
免责声明:本文中的Access Key ID和Secret已经被替换为占位符YOUR_ACCESS_KEY_ID和YOUR_ACCESS_KEY_SECRET。请勿在实际代码中使用本文示例中的敏感信息。务必确保您的认证信息安全,避免泄露。
相关文章:
使用Python从阿里云物联网平台获取STM32温度数据
在物联网(IoT)应用中,设备数据的采集与监控至关重要。本文将详细介绍如何使用Python从阿里云物联网平台获取STM32设备的温度数据。我们将从已有的Java代码出发,逐步将其转换为Python,并处理在过程中遇到的问题…...
Spring Boot 声明式事务
Spring Boot中的声明式事务管理主要通过Transactional注解来实现。以下是Transactional注解的一些关键用法和特性: 1. 启用事务管理 在Spring Boot应用中使用Transactional注解之前,需要在启动类或者配置类上添加EnableTransactionManagement注解来启用事…...
websocket 局域网 webrtc 一对一 多对多 视频通话 的示例
基本介绍 WebRTC(Web Real-Time Communications)是一项实时通讯技术,它允许网络应用或者站点,在不借助中间媒介的情况下,建立浏览器之间点对点(Peer-to-Peer)的连接,实现视频流和&am…...
uniapp-微信小程序调用摄像头
1.uniapp中的index.vue代码 <template><view class"content"><view class"container"><!-- 摄像头组件 --><camera id"camera" device-position"front" flash"off" binderror"onCameraErr…...
鸿蒙学习笔记:用户登录界面
文章目录 1. 提出任务2. 完成任务2.1 创建鸿蒙项目2.2 准备图片资源2.3 编写首页代码2.4 启动应用 3. 实战小结 1. 提出任务 本次任务聚焦于运用 ArkUI 打造用户登录界面。需呈现特定元素:一张图片增添视觉感,两个分别用于账号与密码的文本输入框&#…...
无人机航测系统技术特点!
一、无人机航测系统的设计逻辑 无人机航测系统的设计逻辑主要围绕实现高效、准确、安全的航空摄影测量展开。其设计目标是通过无人机搭载相机和传感器,利用先进的飞行控制系统和数据处理技术,实现对地表信息的全方位、高精度获取。 需求分析࿱…...
《算法ZUC》题目
判断题 ZUC算法LFSR部分产生的二元序列具有很低的线性复杂度。 A.正确 B.错误 正确答案A 单项选择题 ZUC算法驱动部分LFSR的抽头位置不包括( )。 A.s15 B.s10 C.s7 D.s0 正确答案C 单项选择题 ZUC算法比特重组BR层主要使用了软件实现友好的…...
配置flutter 解决andriod studio报错 no device selected
flutter配置好后 明明下载好了模拟器 但是在andriod studio 找不到设备 显示no devices 这个时候需要我们配置一下flutter关联的android sdk的路径和文件夹 就可以解决了 flutter config --android-sdk 自己android studio的路径 这样配置就可以解决了~...
docker搭建Redis集群及哨兵(windows10环境,OSS Cluster)
一、基本概念 Redis:即 "Remote DIctionary Server" ,翻译为“远程字典服务器”。从字面意义上讲,它指的是一个远程的字典服务,意味着它是一个可以远程访问的服务,主要用于存储键值对(key-value pairs&…...
信息化基础知识——数字政府(山东省大数据职称考试)
大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 数字政府 大数…...
信息安全实训室网络攻防靶场实战核心平台解决方案
一、引言 网络安全靶场,作为一种融合了虚拟与现实环境的综合性平台,专为基础设施、应用程序及物理系统等目标设计,旨在向系统用户提供全方位的安全服务,涵盖教学、研究、训练及测试等多个维度。随着网络空间对抗态势的日益复杂化…...
Nginx主要知识点总结
1下载nginx 到nginx官网nginx: download下载nginx,然后解压压缩包 然后双击nginx.exe就可以启动nginx 2启动nginx 然后在浏览器的网址处输入localhost,进入如下页面说明nginx启动成功 3了解nginx的配置文件 4熟悉nginx的基本配置和常用操作 Nginx 常…...
PySide6程序框架设计
pyside6有一个优点自动适配高分辨ui pyqt5需要自己写这部分逻辑 1、主程序代码 DINGSHI01Main.py # -*- coding: utf-8 -*- import sys,time,copy from PySide6.QtWidgets import QWidget,QApplication from PySide6.QtCore import Qt from PySide6 import QtCore, QtGui, Q…...
「九」HarmonyOS 5 端云一体化实战项目——「M.U.」应用云侧开发云数据库
1 立意背景 M. 代表 “我”,U. 代表 “你”,这是一款用于记录情侣从相识、相知、相恋、见家长、订婚直至结婚等各个阶段美好记忆留存的应用程序。它旨在为情侣们提供一个专属的空间,让他们能够将一路走来的点点滴滴,如初次相遇时…...
记录:virt-manager配置Ubuntu arm虚拟机
virt-manager(Virtual Machine Manager)是一个图形用户界面应用程序,通过libvirt管理虚拟机(即作为libvirt的图形前端) 因为要在Linux arm环境做测试,记录下virt-manager配置arm虚拟机的过程 先在VMWare中…...
clickhouse-介绍、安装、数据类型、sql
1、介绍 ClickHouse是俄罗斯的Yandex于2016年开源的列式存储数据库(DBMS),使用C语言编写,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。 OLAP(On-Line A…...
【shell】常用100个shell命令使用讲解
【shell】常用100个shell命令使用讲解 【一】文件操作命令【二】搜索命令【三】目录操作命令【四】权限操作命令【五】网络操作命令【六】进程和系统控制命令【七】文本操作命令【八】压缩与解压命令【九】磁盘使用管理命令【十】包管理命令【十一】进程管理命令【十二】环境变…...
Git-分支(branch)常用命令
分支 我们在做项目开发的时候,无论是软件项目还是其他机械工程项目,我们为了提高效率以及合理的节省时间等等原因,现在都不再是线性进行,而是将一个项目抽离出诸进行线,每一条线在git中我们就叫做分支,bran…...
谈谈es6 Map 函数
发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 Map 是 ES6 中引入的一种新的数据结构,它类似于对象(Object),但与对象相比&#…...
微信小程序:实现节点进度条的效果;正在完成的节点有动态循环效果;横向,纵向排列
参考说明 微信小程序实现流程进度功能 - 知乎 上面的为一个节点进度条的例子,但并不完整,根据上述代码,进行修改完善,实现其效果 横向效果 代码 wxml <view classorder_process><view classprocess_wrap wx:for&quo…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
JavaScript 中的 ES|QL:利用 Apache Arrow 工具
作者:来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗?了解下一期 Elasticsearch Engineer 培训的时间吧! Elasticsearch 拥有众多新功能,助你为自己…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
