光伏发电系统模拟及其发电预测开源python工具pvlib
1. 太阳辐照量模拟
pysolar是一个用于计算太阳位置和辐照量的Python库。它是基于python语言编写的,可以方便地在各种python项目中使用。pysolar主要用于计算太阳的位置、太阳高度角、太阳方位角、日出和日落时间等信息。这些信息可以用于太阳能电池板和太阳能集热器等应用的设计和优化。
Pysolar模拟始自2007年以来得太阳,根据Bretagnon’s VSOP 87理论计算太阳的位置。pysolar包含了许多太阳几何和辐射计算方法的实现,例如:太阳方位角(指的是罗盘方位,相对于物理的北而言)和海拔高度角的计算、地球磁场和大气层对太阳辐射的影响等。它还提供了一些实用的功能,例如:在给定经纬度和时间的情况下,可以计算出太阳高度角、方位角、日出和日落时间等信息。

Pysolar的参考框架如上图所示。地平线定义为海拔高度为零。当太阳在地平线上时,高度为正。方位角向北定义为零。正方位定义为北部以东的估计值;负估计或大于180的估计位于北部以西。在北半球,如果我们从(海拔、方位)的角度来看,太阳在(0,90)左右升起,在中午左右到达(70,180),在(0,270)左右落下。
pysolar非常容易使用,可以使用pip命令来安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pysolar
pip install pysolar
安装完成后,可以在Python脚本中使用pysolar.solar模块进行计算。以下是一个使用pysolar计算太阳高度角和方位角的示例代码:
from pysolar.solar import get_altitude, get_azimuth
import datetime
import pytz# 设置经纬度和时区
lat = 39.9
lon = 116.4
tz = pytz.timezone('Asia/Shanghai')# 获取当前时间和太阳高度角、方位角
dt = datetime.datetime.now(tz)
altitude = get_altitude(lat, lon, dt)
azimuth = get_azimuth(lat, lon, dt)# 输出结果
print("当前时间: ", dt)
print("太阳高度角: ", altitude)
print("太阳方位角: ", azimuth)
2. 光伏发电系统模拟
典型的太阳能光伏发电系统由太阳能电池阵列(组件)、电缆、电力电子变换器(逆变器)、储能装置(蓄电池)、负载即用户等构成,如下所示。其中,太阳能电池阵列和储能装置为电源系统,控制器和电力电子变换器为控制保护系统,负载为系统终端。

pvlib-python是一个Python库,用于光伏系统性能建模和分析。它提供了光伏系统设计和性能评估所需的工具,包括太阳辐照度计算、光伏组件和系统性能模拟、光伏系统建模、阴影分析等等。pvlib是一个开源项目,由Solar Energy Technologies Office(SETO)资助开发。
pvlib的主要特点包括:
- 多种太阳辐照度模型,可以计算全天的太阳辐照度、太阳位置、天空散射辐射等信息。
- 多种光伏模型,包括标准模型、光谱模型和机器学习模型。
- 多种组件模型,包括单晶硅、多晶硅、CdTe等各种类型的光伏组件模型。
- 多种系统模型,包括集中式光伏电站、分布式光伏电站等。
- 多种工具和功能,如阴影分析、功率曲线绘制等。
pvlib的使用非常广泛,在学术界和工业界都有很多应用。它提供了方便快捷的工具,可以帮助工程师和科学家更好地理解和优化光伏系统的性能。
安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pvlib
2.1. 光伏发电系统模拟实现过程

2.2. 主要模块介绍
2.2.1. PVSystem
PVSystem是一个表示光伏系统的模块(类),它可以用来计算光伏系统的电量输出。PVSystem包括一些属性,例如组件、逆变器、阵列等,这些属性可以用来描述光伏系统的各个组成部分。
在PVSystem类中,有一些方法可以用来计算光伏系统的电量输出。例如,可以使用PVSystem.get_irradiance()方法计算光伏系统的辐照度,使用PVSystem.sapm()方法计算光伏系统的电池板电压和电流,使用PVSystem.snlinverter()方法计算光伏系统的逆变器输出功率等。
PVSystem类还可以与其他pvlib模块结合使用,例如Location、ModelChain等模块。使用PVSystem可以方便地模拟光伏系统的性能表现,为光伏系统的设计和优化提供有力的支持。
2.2.2. ModelChain
ModelChain是pvlib中的一个类,用于将多个组件(比如光伏组件、逆变器、阵列)组合起来,并计算其整个系统的性能。
ModelChain的构建是基于PVSystem的实例,即需要先定义一个PVSystem对象,然后将其传递给ModelChain类的构造函数,用于指定模拟的光伏系统。
ModelChain提供了一个run_model()方法,该方法接受一个时间序列作为输入,并计算在该时间段内系统的性能。具体而言,ModelChain会将该时间段拆分成多个时间步骤,并对每个时间步骤执行以下步骤:
使用Location对象和时间计算大气辐射(如GHI、DNI、DHI),使用PVSystem对象计算总辐照度(POA)
- 使用PVSystem对象计算太阳能电池板的输出功率
- 使用PVSystem对象计算逆变器的输入功率和输出功率
- 使用PVSystem对象计算电池组的输入功率和输出功率
返回结果,包括各个组件的性能参数,如辐射度、电池板输出功率、逆变器输入功率和输出功率等。
通过ModelChain,可以方便地对光伏系统进行建模和仿真,并分析各个组件的性能,以及整个系统的性能表现。
PVLib库中的ModelChain可以集成天气预测数据。在ModelChain中,可以使用一系列模块来计算光伏电池组的电量输出,其中包括天气预测模块。具体来说,可以使用GFS和NAM模块将天气数据引入ModelChain中,然后使用其他模块计算电量输出。
GFS是全球预报系统,它可以提供全球的天气预测数据。而NAM是北美预报模型,它提供了更细致的天气预测数据,针对北美地区。这些模块可以将气象数据导入ModelChain中,以进行更准确的光伏电量预测。
需要注意的是,使用天气预测数据进行光伏电量预测需要对天气数据的准确性有一定的了解和评估。此外,不同的天气预测模块和数据源可能会导致不同的预测结果。因此,需要根据具体情况进行选择和评估。
2.2.3. Bifacial modeling
在pvlib中,Bifacial modeling(双面组件建模)指的是在模拟光伏发电时考虑双面组件在正面和背面同时受到太阳辐射的情况。
pvlib中的Bifacial模型主要包括两个模块:BifacialGroundDiffuse和BifacialAOI。BifacialGroundDiffuse模块用于计算反射地面散射辐射的分布,可以为双面组件建模计算分布在组件背面的反射辐射量。BifacialAOI模块则用于计算太阳角度对双面组件背面散射光的影响,包括反射、折射和透射的效果。
通过使用Bifacial modeling,可以更准确地模拟双面组件的发电能力,并帮助预测背面反射的光线,以提高系统的发电量。
2.2.4. Forecasting
pvlib中的Forecasting模块提供了天气预报数据的获取和处理功能。它包括以下功能:
获取天气预报数据:可以通过指定时间范围和地理位置,获取各种天气变量的预报数据,如温度、风速、云量等。
处理天气预报数据:可以将获取到的天气预报数据处理成pvlib中常用的数据结构,如时间序列数据和DataFrame数据。
预测光伏发电量:可以基于获取到的天气预报数据,预测未来光伏发电量的变化趋势。
在使用Forecasting模块之前,需要先安装好相关的天气预报数据源,如NOAA等。同时,需要注意的是,天气预报数据存在一定的不确定性,因此预测结果可能会存在一定的误差。
2.3. 示例
2.3.1. 生成晴朗天空GHI和POA辐照度的示例
以哈尔滨地区为例,输入维度、经度,太阳板阵列仰角25,方位角180,则夏至、冬至辐照度计算过程如下。

from pvlib import location
from pvlib import irradiance
import pandas as pd
from matplotlib import pyplot as plttz='Asia/Shanghai'
# 哈尔滨地区纬度、经度
lat, lon = 45.739, 120.683# 创建本地对象,存储维度、经度、时区
site = location.Location(lat, lon, tz=tz)# 计算晴天的GHI并将其转换到阵列的平面
# 定义函数,获取某个地方的辐照度(理论标准辐照度)
def get_irradiance(site_location, date, tilt, surface_azimuth):# 创建一天间隔10分钟的时间序列times = pd.date_range(date, freq='10min', periods=6*24,tz=site_location.tz)#使用默认的内部模型生成晴天数据#get_ clearsky方法返回具有GHI、DNI和DHI值的数据表clearsky = site_location.get_clearsky(times)# 获取太阳方位角和天空顶点以传递到函数solar_position = site_location.get_solarposition(times=times)# 使用get_total_iradiance函数将GHI转换为POAPOA_irradiance = irradiance.get_total_irradiance(surface_tilt=tilt,surface_azimuth=surface_azimuth,dni=clearsky['dni'],ghi=clearsky['ghi'],dhi=clearsky['dhi'],solar_zenith=solar_position['apparent_zenith'],solar_azimuth=solar_position['azimuth'])return pd.DataFrame({'GHI': clearsky['ghi'],'POA': POA_irradiance['poa_global']})#获取夏至和冬至的辐照度数据,假设倾斜25度,和朝南的阵列
summer_irradiance = get_irradiance(site, '06-21-2022', 25, 180)
winter_irradiance = get_irradiance(site, '12-22-2022', 25, 180)# 转换时间序列为小时:分钟,方便绘图
summer_irradiance.index = summer_irradiance.index.strftime("%H:%M")
winter_irradiance.index = winter_irradiance.index.strftime("%H:%M")plt.rcParams['figure.figsize']= 12,4
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False
plt.rcParams.update({"font.size":11})
# 画夏季和冬季的 GHI POA
fig, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
summer_irradiance['GHI'].plot(ax=ax1, label='GHI')
summer_irradiance['POA'].plot(ax=ax1, label='POA')
winter_irradiance['GHI'].plot(ax=ax2, label='GHI')
winter_irradiance['POA'].plot(ax=ax2, label='POA')
ax1.set_xlabel('日时间序列 (夏季)')
ax2.set_xlabel('日时间序列 (冬季)')
ax1.set_ylabel('辐照度 ($W/m^2$)')
ax1.legend()
ax2.legend()
plt.show()

2.3.2. 一个简单的ModelChain示例
官方文档中的一个完整的示例,拿到了一组光伏模块和逆变器数据,并虚拟了温度数据,通过模型计算,得到了在该位置上的运算结果。
ModelChain有三个组成部分:
- PVSystem对象,表示模块和逆变器的集合
- Location对象,表示地球上的位置
- 指定PV建模过程中每个步骤要使用的模型的属性值。
import pandas as pd
import numpy as np
import pvlibfrom pvlib.pvsystem import PVSystem, FixedMount
from pvlib.location import Location
from pvlib.modelchain import ModelChain
from pvlib.temperature import TEMPERATURE_MODEL_PARAMETERS# sapm,Sandia Array Performance Model,一种用于预测温度的模型,对应有不同的参数可以选择
temperature_model_parameters = TEMPERATURE_MODEL_PARAMETERS['sapm']['open_rack_glass_glass']
# 从SAM网站上获取SandiaMod光伏模块的配置
sandia_modules = pvlib.pvsystem.retrieve_sam('SandiaMod')
# 从SAM网站上获取cec逆变器的配置
cec_inverters = pvlib.pvsystem.retrieve_sam('cecinverter')
# 选择一个光伏模块及一个逆变器的数据
sandia_module = sandia_modules['Canadian_Solar_CS5P_220M___2009_']
cec_inverter = cec_inverters['ABB__MICRO_0_25_I_OUTD_US_208__208V_']# 设置位置信息
location = Location(latitude=32.2, longitude=-110.9)
# 实例化一个PVSystem对象
system = PVSystem(surface_tilt=20, surface_azimuth=200,module_parameters=sandia_module,inverter_parameters=cec_inverter,temperature_model_parameters=temperature_model_parameters)
# 实例化一个ModelChain对象
mc = ModelChain(system, location)
# 虚拟一些天气数据
weather = pd.DataFrame([[1050, 1000, 100, 30, 5]],columns=['ghi', 'dni', 'dhi', 'temp_air', 'wind_speed'],index=[pd.Timestamp('20170401 1200', tz='US/Arizona')])
# 运行模型
mc.run_model(weather)
# 获取相关结果
print(mc.results.aoi) # 入射角
print(mc.results.cell_temperature) # 电池温度
print(mc.results.dc) # 直流电功率
print(mc.results.ac) # 交流电功率
2.4. 关键术语
2.4.1. 辐射基本专业术语
DNI: Direct Normal Irradiance 阳光从太阳盘面直接照射到与光路正交的表面,称作直接辐射简写为 DNI。
DHI: Diffuse Horizontal Irradiance 在大气中散射的直接到达地面的阳光称为散射辐射。散射辐射的标准测量在水平面上进行,这个测量叫做散射水平辐射,或者简化为“散射”简写为 DHI。
GHI:Global Horizontal Irradiance 太阳的 DHI和 DNI到达水平表面称为总水平辐射,通常简称为总辐射,简写为 GHI。
Solar Zenith Angle: 太阳天顶角 (与太阳高度角之和为90度,互余关系)解释为一束光线从太阳到达地面一点形成的光线与此点垂直于地面的直线夹角;所以在日出和日落时天顶角为 90度(太阳高度角为0),没有直射辐射到达水平面。
三个辐射参数之间的关系:
GHI = DHI + (cosθ x DNI)
- θ = Solar Zenith Angle(太阳天顶角)
- 0°is vertical
- 90°is horizontal
气团:气团是指气象要素(主要指温度和湿度)水平分布比较均匀并具有一定垂直稳定度的较大空气团。在同一气团中,各地气象要素的重点分布几乎相同,天气现象也大致一样。气团的水平范围可达几千公里,垂直高度可达几公里到十几公里,常常从地面伸展到对流层顶。
气团的分类方法主要有三种,一种是按气团的热力性质不同,划分为冷气团和暖气团;第二种是按气团的湿度特征的差异,划分为干气团和湿气团,第三种是按气团的发源地,常分为北冰洋气团、极地气团,热带气团、赤道气团。
2.4.2. GHI 和 POA
GHI 和 POA 都是太阳辐射的度量单位,但它们有不同的含义:
- GHI(Global Horizontal Irradiance):全水平辐照度,是指垂直于地球表面的平面上所接收到的来自太阳的辐射总量,包括直射辐射和散射辐射,单位通常是 W/m²。
- POA(Plane of Array Irradiance):组件平面辐照度,是指垂直于光伏组件表面的平面上所接收到的来自太阳的辐射总量,也包括直射辐射和散射辐射,单位通常是 W/m²。
通俗地说,GHI 是地面上接收到的总辐射量,而 POA 是太阳能电池板上接收到的总辐射量。因此,POA 是在考虑组件倾角、方向和阴影遮挡等因素的基础上计算的,而 GHI 不考虑这些因素。
3. 光伏发电预测方案
对于光伏发电预测,可以利用pvlib进行建模和预测。下面给出一个基本的预测方案:
-
获取天气预报数据
可以从气象局获取当地未来几天的天气预报数据,包括气温、风速、湿度、降水等信息。 -
计算理论太阳辐照度
根据地理位置、日期、时间、太阳高度角等信息,利用pvlib中的函数计算出理论太阳辐照度。 -
计算实际POA
根据天气预报中的气温、风速、湿度等信息,结合理论太阳辐照度,利用pvlib中的函数计算出实际的POA。 -
建立光伏发电量预测模型
利用历史数据和当前实际POA值,建立光伏发电量预测模型,可以选择不同的模型,如物理模型或者基于机器学习的模型。在pvlib中,可以使用ModelChain进行建模和预测。 -
进行光伏发电量预测
利用模型对未来几天的光伏发电量进行预测,得到预测结果。
参考:
芳樽里的歌. 从pvlib入门光伏发电系统. CSDN博客. 2022.04
https://github.com/pvlib/pvlib-python
https://pvlib-python.readthedocs.io/en/stable/user_guide/pvsystem.html
https://github.com/pingswept/pysolar
https://pysolar.readthedocs.io/en/latest/#source-code-repository
相关文章:
光伏发电系统模拟及其发电预测开源python工具pvlib
1. 太阳辐照量模拟 pysolar是一个用于计算太阳位置和辐照量的Python库。它是基于python语言编写的,可以方便地在各种python项目中使用。pysolar主要用于计算太阳的位置、太阳高度角、太阳方位角、日出和日落时间等信息。这些信息可以用于太阳能电池板和太阳能集热器…...
精彩回顾 | 2023工赋Meetup—上海站
2023工赋Meetup—上海站 2023年4月2日下午,在上海数字长宁体验馆举办的“价值驱动的数字化转型技术专场”Meetup圆满落幕,本次活动由工赋开发者社区主办,上海市工业互联网协会指导,长宁区东虹桥发展办公室和积梦智能联合主办。 …...
[oeasy]python0132_[专业选修]utf-8_unicode_transformation_format_8_编码方式
utf-8 回忆上次内容 上次再次输出了大红心♥ 找到了红心对应的编码黑红梅方都对应有编码 原来的编码叫做 ascii️ \u这种新的编码方式叫unicode包括了 中日韩字符集等 各书写系统的字符集 但是有个问题 拜这个字在字节中应该是b"\x62\xdc"两个字节 该如何理解b&qu…...
DNS 的解析过程以及相关问题
文章目录DNS解析过程DNS 为什么用 UDP简单说下怎么实现 DNS 劫持谈谈你对域名缓存的了解DNS解析过程 浏览器首先看看自己浏览器缓存有没有对应的IP记录,同时还要查询一下主机本地文件里面有没有对应的记录,如果有记录就没必要进行后面的步骤了。 浏览器…...
个人情况-单词练习
目录 前言原文兴趣爱好特长专业习惯理想志向情境常用单词性别家庭成员正面性格前言 加油 原文 1.come from… 来自…… I come from Shanghai. 我来自上海/我是上海人。 2.born[bɔrn]adj.出生的 be born into + 家庭 出身……的家庭 George was born into a poor fami…...
python天狗吃月 青少年编程电子学会python编程等级考试一级真题解析2022年9月
目录 python天狗吃月 一、题目要求 编程实现 二、解题思路 1、图形分析...
JAVA做语言国际化
项目场景: 问题描述 提示:这里描述项目中遇到的问题: 例如:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据 APP 中接收数据代码: Overridepublic void run() {bytes mmInStream.read(buff…...
面试题 16.19. 水域大小
题目链接 面试题 16.19. 水域大小 mid 题目描述 你有一个用于表示一片土地的整数矩阵 land,该矩阵中每个点的值代表对应地点的海拔高度。若值为 0 则表示水域。由垂直、水平或对角连接的水域为池塘。 池塘的大小是指相连接的水域的个数。 编写一个方法来计算矩阵…...
在vscode中切换分支,显示已经删除的远程分支
运行命令:修剪远程分支 git remote prune origin 然后远程的已经删除的分支就不见了。...
森林督查违法图斑内业报告高效制作实践技术
Python已成为最热门的编程语言之一,与arcpy、geopandas等行业软件包相结合,能极大程度地减轻森林督查违法图斑内业报告制作的工作量,显著提升工作效率。为了提升广大从业人员在森林违法图斑内业报告制作等方面的技能,内容主要包括…...
华为OD机试-日志限流-2022Q4 A卷-Py/Java/JS
某软件系统会在运行过程中持续产生日志,系统每天运行N单位时间,运行期间每单位时间产生的日志条数保行在数组 records中。records[i]表示第i单位时间内产生日志条数。 由于系统磁盘空间限制,每天可记录保存的日志总数上限为total条。 如果一天…...
ChatGPT能胜任高级程序员吗?
与开发人员信任的其他软件开发工具不同,AI工具在训练、构建、托管和使用方式等方面都存在一些独特的风险。 自2022年底ChatGPT发布以来,互联网上便充斥着对其几乎相同比例的支持和怀疑的论调。不管你是否喜欢它,AI正在逐步进入你的开发组织。…...
effective c++ item 25-29
item25:自定义swap函数 namespace std{template<typename T>void swap(T& a, T& b){T temp(a); // T要满足拷贝构造和拷贝赋值a b;b temp; } }1、Pimpl 2、自定义swap item26:尽可能延后变量的定义 case 1: temp j; for(int i 0; i < n; …...
MasterCAM实体旋转命令相关几个问题:曲线相交于边缘等
MasterCAM版本:2022 目的:通过旋转画杯子边缘主体 内外环直径分别是:56、60mm 命令:实体 - 旋转 问题: 一、处理实体期间错误parasolid(r) kernel 界面错误PK 错误代码:942-曲线相交于边缘 对应参数&a…...
p标签需要设置宽高吗?不用
Dusk: # 引用补丁,开头必须以 -javaagent: 开头,后面跟着补丁的绝对路径(可根据你实际的位置进行修改),注意路径一定要填写正确,且不能包含中文,否则会导致 IDEA 无法启动-javaagent:D:/ja-netfilter/ja-ne…...
Andorid 事件分发机制案例实操与解析
文章目录为什么要理解Android事件分发机制?滑动冲突类问题我们以什么开始?代码如下:activity xml 代码:Activity代码:item_user.xml代码修改后代码如下:Activity xmlactivity代码item_gift.xml问题出现了An…...
Git 版本控制/项目迭代
一、Git的作用/为什么要进行版本控制? 什么是项目迭代? 搞开发的时候我们不是一次性就做好平台的所有功能,而是先上线一个功能差不多的版本让用户用着,然后不断迭代、修改,上线新的版本,所以一个项目就会…...
智慧农业大数据项目建设方案
智慧农业大数据项目建设方案 目录 项目概述.................................... 6...
【数据结构专栏】动态扩容顺序栈详解
💌 博客内容:顺序栈的原理详解 😀 作 者:陈大大陈 🚀 个人简介:一个正在努力学技术的准前段,专注基础和实战分享 ,欢迎私信! 💖 欢迎大家:这…...
Linux命令·ifconfig
许多windows非常熟悉ipconfig命令行工具,它被用来获取网络接口配置信息并对此进行修改。Linux系统拥有一个类似的工具,也就是ifconfig(interfaces config)。通常需要以root身份登录或使用sudo以便在Linux机器上使用ifconfig工具。依赖于ifconfig命令中使…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
