ESP32(MicroPython) 网页控制五自由度机械臂
ESP32(MicroPython) 网页控制五自由度机械臂
本程序通过网页控制五自由度机械臂,驱动方案改用PCA9685。
代码如下
#导入Pin模块
from machine import Pin
import time
from machine import SoftI2C
from servo import Servos
import network
import socket#定义LED控制对象
led1=Pin(15,Pin.OUT,Pin.PULL_DOWN)
i2c=SoftI2C(sda=Pin(26),scl=Pin(27),freq=10000)
servos=Servos(i2c,address=0x40)#连接的WIFI账号和密码
ssid = " "
password = " "#舵机默认角度
servos.position(0,90)
servos.position(1,90)
servos.position(2,90)
servos.position(3,90)
servos.position(4,90)#WIFI连接
def wifi_connect():wlan=network.WLAN(network.STA_IF) #STA模式wlan.active(True) #激活if not wlan.isconnected():print("conneting to network...")wlan.connect(ssid,password) #输入 WIFI 账号密码while not wlan.isconnected():led1.value(1)time.sleep_ms(300)led1.value(0)time.sleep_ms(300)led1.value(0)return Falseelse:led1.value(0)print("network information:", wlan.ifconfig())return Truea0=90
a1=90
a2=90
a3=90
a4=90
#网页数据
def web_page():global a0global a1global a2global a3global a4html = """<html>
<head><meta name="viewport" content="width=device-width, initial-scale=1"><style>.button{display: inline-block; background-color: #971080; border: none; border-radius: 4px; color: white; padding: 8px 15px; text-decoration: none; font-size: 20px; margin: 2px; cursor: pointer;}a:link {text-decoration:none;}a:visited {text-decoration:none;}a:hover {text-decoration:none;}a:active {text-decoration:none;} html {font-family: Arial;display: inline-block;margin: 0px auto;text-align: center;}h2 { font-size: 1.5rem; }p { font-size: 1.5rem; }.units { font-size: 1rem; }.dht-labels{font-size: 1rem;vertical-align:middle;padding-bottom: 7px;}</style>
</head>
<body><h2>ESP32 Servo Control</h2><p><a href="/?d0">Servo0: <strong>""" + str(a0) + """</strong></a></p><p><a href="/?b00"><button class="button">0</button></a><a href="/?b01"><button class="button">10</button></a><a href="/?b02"><button class="button">20</button></a><a href="/?b03"><button class="button">30</button></a><a href="/?b04"><button class="button">40</button></a><a href="/?b05"><button class="button">50</button></a><a href="/?b06"><button class="button">60</button></a><a href="/?b07"><button class="button">70</button></a><a href="/?b08"><button class="button">80</button></a><a href="/?b09"><button class="button">90</button></a><a href="/?b0a"><button class="button">100</button></a><a href="/?b0b"><button class="button">110</button></a><a href="/?b0c"><button class="button">120</button></a><a href="/?b0d"><button class="button">130</button></a><a href="/?b0e"><button class="button">140</button></a><a href="/?b0f"><button class="button">150</button></a><a href="/?b0g"><button class="button">160</button></a><a href="/?b0h"><button class="button">170</button></a><a href="/?b0i"><button class="button">180</button></a></p><p><a href="/?d1">Servo1: <strong>""" + str(a1) + """</strong></a></p><p><a href="/?b10"><button class="button">0</button></a><a href="/?b11"><button class="button">10</button></a><a href="/?b12"><button class="button">20</button></a><a href="/?b13"><button class="button">30</button></a><a href="/?b14"><button class="button">40</button></a><a href="/?b15"><button class="button">50</button></a><a href="/?b16"><button class="button">60</button></a><a href="/?b17"><button class="button">70</button></a><a href="/?b18"><button class="button">80</button></a><a href="/?b19"><button class="button">90</button></a><a href="/?b1a"><button class="button">100</button></a><a href="/?b1b"><button class="button">110</button></a><a href="/?b1c"><button class="button">120</button></a><a href="/?b1d"><button class="button">130</button></a><a href="/?b1e"><button class="button">140</button></a><a href="/?b1f"><button class="button">150</button></a><a href="/?b1g"><button class="button">160</button></a><a href="/?b1h"><button class="button">170</button></a><a href="/?b1i"><button class="button">180</button></a></p><p><a href="/?d2">Servo2: <strong>""" + str(a2) + """</strong></a></p><p><a href="/?b10"><button class="button">0</button></a><a href="/?b21"><button class="button">10</button></a><a href="/?b22"><button class="button">20</button></a><a href="/?b23"><button class="button">30</button></a><a href="/?b24"><button class="button">40</button></a><a href="/?b25"><button class="button">50</button></a><a href="/?b26"><button class="button">60</button></a><a href="/?b27"><button class="button">70</button></a><a href="/?b28"><button class="button">80</button></a><a href="/?b29"><button class="button">90</button></a><a href="/?b2a"><button class="button">100</button></a><a href="/?b2b"><button class="button">110</button></a><a href="/?b2c"><button class="button">120</button></a><a href="/?b2d"><button class="button">130</button></a><a href="/?b2e"><button class="button">140</button></a><a href="/?b2f"><button class="button">150</button></a><a href="/?b2g"><button class="button">160</button></a><a href="/?b2h"><button class="button">170</button></a><a href="/?b2i"><button class="button">180</button></a></p><p><a href="/?d3">Servo3: <strong>""" + str(a3) + """</strong></a></p><p><a href="/?b30"><button class="button">0</button></a><a href="/?b31"><button class="button">10</button></a><a href="/?b32"><button class="button">20</button></a><a href="/?b33"><button class="button">30</button></a><a href="/?b34"><button class="button">40</button></a><a href="/?b35"><button class="button">50</button></a><a href="/?b36"><button class="button">60</button></a><a href="/?b37"><button class="button">70</button></a><a href="/?b38"><button class="button">80</button></a><a href="/?b39"><button class="button">90</button></a><a href="/?b3a"><button class="button">100</button></a><a href="/?b3b"><button class="button">110</button></a><a href="/?b3c"><button class="button">120</button></a><a href="/?b3d"><button class="button">130</button></a><a href="/?b3e"><button class="button">140</button></a><a href="/?b3f"><button class="button">150</button></a><a href="/?b3g"><button class="button">160</button></a><a href="/?b3h"><button class="button">170</button></a><a href="/?b3i"><button class="button">180</button></a></p><p><a href="/?d4">Servo4: <strong>""" + str(a4) + """</strong></a></p><p><a href="/?b30"><button class="button">0</button></a><a href="/?b41"><button class="button">10</button></a><a href="/?b42"><button class="button">20</button></a><a href="/?b43"><button class="button">30</button></a><a href="/?b44"><button class="button">40</button></a><a href="/?b45"><button class="button">50</button></a><a href="/?b46"><button class="button">60</button></a><a href="/?b47"><button class="button">70</button></a><a href="/?b48"><button class="button">80</button></a><a href="/?b49"><button class="button">90</button></a><a href="/?b4a"><button class="button">100</button></a><a href="/?b4b"><button class="button">110</button></a><a href="/?b4c"><button class="button">120</button></a><a href="/?b4d"><button class="button">130</button></a><a href="/?b4e"><button class="button">140</button></a><a href="/?b4f"><button class="button">150</button></a><a href="/?b4g"><button class="button">160</button></a><a href="/?b4h"><button class="button">170</button></a><a href="/?b4i"><button class="button">180</button></a></p>
</body>
</html>"""return html#程序入口
if __name__=="__main__":wifi_connect()#SOCK_STREAM表示的是TCP协议,SOCK_DGRAM表示的是UDP协议my_socket=socket.socket(socket.AF_INET, socket.SOCK_STREAM) #创建socket连接# 将socket对象绑定ip地址和端口号my_socket.bind(('', 80))# 相当于电话的开机 括号里的参数表示可以同时接收5个请求my_socket.listen(5)while True:try: # 进入监听状态,等待别人链接过来,有两个返回值,#一个是对方的socket对象,一个是对方的ip以及端口client, addr = my_socket.accept()print('Got a connection from %s' % str(addr))# recv表示接收,括号里是最大接收字节request = client.recv(1024)request = str(request)print('Content = %s' % request)b00 = request.find('/?b00')b01 = request.find('/?b01')b02 = request.find('/?b02')b03 = request.find('/?b03')b04 = request.find('/?b04')b05 = request.find('/?b05')b06 = request.find('/?b06')b07 = request.find('/?b07')b08 = request.find('/?b08')b09 = request.find('/?b09')b0a = request.find('/?b0a')b0b = request.find('/?b0b')b0c = request.find('/?b0c')b0d = request.find('/?b0d')b0e = request.find('/?b0e')b0f = request.find('/?b0f')b0g = request.find('/?b0g')b0h = request.find('/?b0h')b0i = request.find('/?b0i')b10 = request.find('/?b10')b11 = request.find('/?b11')b12 = request.find('/?b12')b13 = request.find('/?b13')b14 = request.find('/?b14')b15 = request.find('/?b15')b16 = request.find('/?b16')b17 = request.find('/?b17')b18 = request.find('/?b18')b19 = request.find('/?b19')b1a = request.find('/?b1a')b1b = request.find('/?b1b')b1c = request.find('/?b1c')b1d = request.find('/?b1d')b1e = request.find('/?b1e')b1f = request.find('/?b1f')b1g = request.find('/?b1g')b1h = request.find('/?b1h')b1i = request.find('/?b1i')b20 = request.find('/?b10')b21 = request.find('/?b21')b22 = request.find('/?b22')b23 = request.find('/?b23')b24 = request.find('/?b24')b25 = request.find('/?b25')b26 = request.find('/?b26')b27 = request.find('/?b27')b28 = request.find('/?b28')b29 = request.find('/?b29')b2a = request.find('/?b2a')b2b = request.find('/?b2b')b2c = request.find('/?b2c')b2d = request.find('/?b2d')b2e = request.find('/?b2e')b2f = request.find('/?b2f')b2g = request.find('/?b2g')b2h = request.find('/?b2h')b2i = request.find('/?b2i')b30 = request.find('/?b30')b31 = request.find('/?b31')b32 = request.find('/?b32')b33 = request.find('/?b33')b34 = request.find('/?b34')b35 = request.find('/?b35')b36 = request.find('/?b36')b37 = request.find('/?b37')b38 = request.find('/?b38')b39 = request.find('/?b39')b3a = request.find('/?b3a')b3b = request.find('/?b3b')b3c = request.find('/?b3c')b3d = request.find('/?b3d')b3e = request.find('/?b3e')b3f = request.find('/?b3f')b3g = request.find('/?b3g')b3h = request.find('/?b3h')b3i = request.find('/?b3i')b40 = request.find('/?b40')b41 = request.find('/?b41')b42 = request.find('/?b42')b43 = request.find('/?b43')b44 = request.find('/?b44')b45 = request.find('/?b45')b46 = request.find('/?b46')b47 = request.find('/?b47')b48 = request.find('/?b48')b49 = request.find('/?b49')b4a = request.find('/?b4a')b4b = request.find('/?b4b')b4c = request.find('/?b4c')b4d = request.find('/?b4d')b4e = request.find('/?b4e')b4f = request.find('/?b4f')b4g = request.find('/?b4g')b4h = request.find('/?b4h')b4i = request.find('/?b4i')if b00 == 6:servos.position(0,0)a0=0if b11 == 6:servos.position(0,10)a0=10if b02 == 6:servos.position(0,20)a0=20if b03 == 6:servos.position(0,30)a0=30if b04 == 6:servos.position(0,40)a0=40if b05 == 6:servos.position(0,50)a0=50if b06 == 6:servos.position(0,60)a0=60if b07 == 6:servos.position(0,70)a0=70if b08 == 6:servos.position(0,80)a0=80if b09 == 6:servos.position(0,90)a0=90if b0a == 6:servos.position(0,100)a0=100if b0b == 6:servos.position(0,110)a0=110if b0c == 6:servos.position(0,120)a0=120if b0d == 6:servos.position(0,130)a0=130if b0e == 6:servos.position(0,140)a0=140if b0f == 6:servos.position(0,150)a0=150if b0g == 6:servos.position(0,160)a0=160if b0h == 6:servos.position(0,170)a0=170if b0i == 6:servos.position(0,180)a0=180if b10 == 6:servos.position(1,0)a1=0if b11 == 6:servos.position(1,10)a1=10if b12 == 6:servos.position(1,20)a1=20if b13 == 6:servos.position(1,30)a1=30if b14 == 6:servos.position(1,40)a1=40if b15 == 6:servos.position(1,50)a1=50if b16 == 6:servos.position(1,60)a1=60if b17 == 6:servos.position(1,70)a1=70if b18 == 6:servos.position(1,80)a1=80if b19 == 6:servos.position(1,90)a1=90if b1a == 6:servos.position(1,100)a1=100if b1b == 6:servos.position(1,110)a1=110if b1c == 6:servos.position(1,120)a1=120if b1d == 6:servos.position(1,130)a1=130if b1e == 6:servos.position(1,140)a1=140if b1f == 6:servos.position(1,150)a1=150if b1g == 6:servos.position(1,160)a1=160if b1h == 6:servos.position(1,170)a1=170if b1i == 6:servos.position(1,180)a1=180if b20 == 6:servos.position(2,0)a2=0if b21 == 6:servos.position(2,10)a2=10if b22 == 6:servos.position(2,20)a2=20if b23 == 6:servos.position(2,30)a2=30if b24 == 6:servos.position(2,40)a2=40if b25 == 6:servos.position(2,50)a2=50if b26 == 6:servos.position(2,60)a2=60if b27 == 6:servos.position(2,70)a2=70if b28 == 6:servos.position(2,80)a2=80if b29 == 6:servos.position(2,90)a2=90if b2a == 6:servos.position(2,100)a2=100if b2b == 6:servos.position(2,110)a2=110if b2c == 6:servos.position(2,120)a2=120if b2d == 6:servos.position(2,130)a2=130if b2e == 6:servos.position(2,140)a2=140if b2f == 6:servos.position(2,150)a2=150if b2g == 6:servos.position(2,160)a2=160if b2h == 6:servos.position(2,170)a2=170if b2i == 6:servos.position(2,180)a2=180if b30 == 6:servos.position(3,0)a3=0if b31 == 6:servos.position(3,10)a3=10if b32 == 6:servos.position(3,20)a3=20if b33 == 6:servos.position(3,30)a3=30if b34 == 6:servos.position(3,40)a3=40if b35 == 6:servos.position(3,50)a3=50if b36 == 6:servos.position(3,60)a3=60if b37 == 6:servos.position(3,70)a3=70if b38 == 6:servos.position(3,80)a3=80if b39 == 6:servos.position(3,90)a3=90if b3a == 6:servos.position(3,100)a3=100if b3b == 6:servos.position(3,110)a3=110if b3c == 6:servos.position(3,120)a3=120if b3d == 6:servos.position(3,130)a3=130if b3e == 6:servos.position(3,140)a3=140if b3f == 6:servos.position(3,150)a3=150if b3g == 6:servos.position(3,160)a3=160if b3h == 6:servos.position(3,170)a3=170if b3i == 6:servos.position(3,180)a3=180if b40 == 6:servos.position(4,0)a4=0if b41 == 6:servos.position(4,10)a4=10if b42 == 6:servos.position(4,20)a4=20if b43 == 6:servos.position(4,30)a4=30if b44 == 6:servos.position(4,40)a4=40if b45 == 6:servos.position(4,50)a4=50if b46 == 6:servos.position(4,60)a4=60if b47 == 6:servos.position(4,70)a4=70if b48 == 6:servos.position(4,80)a4=80if b49 == 6:servos.position(4,90)a4=90if b4a == 6:servos.position(4,100)a4=100if b4b == 6:servos.position(4,110)a4=110if b4c == 6:servos.position(4,120)a4=120if b4d == 6:servos.position(4,130)a4=130if b4e == 6:servos.position(4,140)a4=140if b4f == 6:servos.position(4,150)a4=150if b4g == 6:servos.position(4,160)a4=160if b4h == 6:servos.position(4,170)a4=170if b4i == 6:servos.position(4,180)a4=180 response = web_page()client.send('HTTP/1.1 200 OK\n')client.send('Content-Type: text/html\n')client.send('Connection: close\n\n')client.sendall(response)client.close()except:pass
相关文章:
ESP32(MicroPython) 网页控制五自由度机械臂
ESP32(MicroPython) 网页控制五自由度机械臂 本程序通过网页控制五自由度机械臂,驱动方案改用PCA9685。 代码如下 #导入Pin模块 from machine import Pin import time from machine import SoftI2C from servo import Servos import networ…...
前端笔记_OAuth规则机制下实现个人站点接入qq三方登录
文章目录 ⭐前言⭐qq三方登录流程💖qq互联中心创建网页应用💖配置回调地址redirect_uri💖流程分析 ⭐思路分解⭐技术选型实现💖技术选型:💖实现 ⭐结束 ⭐前言 大家好,我是yma16,本…...
huggingface新作品:快速和简便的训练模型
AutoTrain Advanced是一个用于训练和部署最先进的机器学习模型的工具。它旨在提供更快速、更简便的方式来进行模型训练和部署。 安装 您可以通过PIP安装AutoTrain-Advanced的Python包。请注意,为了使AutoTrain Advanced正常工作,您将需要python > 3.…...
利用鸿鹄优化共享储能的SCADA 系统功能,赋能用户数据自助分析
摘要 本文主要介绍了共享储能的 SCADA 系统大数据架构,以及如何利用鸿鹄来更好的优化 SCADA 系统功能,如何为用户进行数据自助分析赋能。 1、共享储能介绍 说到共享储能,可能不少朋友比较陌生,下面我们简单介绍一下共享储能的价值…...
noSQL语句练习
Redis练习题 string list hash结构中,每个至少完成5个命令,包含插入 修改 删除 查询,list 和hash还需要增加遍历的操作命令 1、 string类型数据的命令操作: (1) 设置键值: 127.0.0.1:63…...
Spring:Bean生命周期
Bean 生命周期生命周期 Bean 生命周期是 bean 对象从创建到销毁的整个过程。 简单的 Bean 生命周期的过程: 1.实例化(调用构造方法对 bean 进行实例化) 2.依赖注入(调用 set 方法对 bean 进行赋值) 3.初始化(手动配置 xml 文件中 bean 标签的 init-method 属性值,来指…...
Vue自定义指令
需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍。 需求2:定义一个v-fbind指令,和v-bind功能类似,但可以让其所绑定的input元素默认获取焦点。 自定义指令函数式v-big: &l…...
SpringBoot+JWT实现单点登录解决方案
一、什么是单点登录? 单点登录是一种统一认证和授权机制,指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的系统,不需要重新登录验证。 单点登录一般用于互相授信的系统,实现单一位置登录,其他信任的…...
中国国债发行数据集(2002-2023)
国债是由国家发行的债券,由于国债的发行主体是国家,所以它具有最高的信用度,被公认为是最安全的投资工具。国债按照交易市场的不同分为三类,即银行间市场国债、交易所市场国债和柜台市场国债;按照交易方式的不同分为三…...
曲师大2023大一新生排位赛-C.String题解
C.String 题目描述 众所周知,许师哥精通字符串。 一天,许师哥意外的获得了一个字符串,但他发现这个字符串并不是一个回文串,因此他非常生气。于是他决定从这个字符串中删除若干个字符使得 剩余的字符串为一个回文串。 回想回文串…...
Linux Ubuntu安装RabbitMQ服务
文章目录 前言1.安装erlang 语言2.安装rabbitMQ3. 内网穿透3.1 安装cpolar内网穿透(支持一键自动安装脚本)3.2 创建HTTP隧道 4. 公网远程连接5.固定公网TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 RabbitMQ是一个在 AMQP(高级消息队列协议)基…...
什么是测试用例?如何设计?
在学习或者实际的测试工作中经常都会提到“测试用例”这个词,没错,测试用例是测试工作的核心,不管要做的是什么样的测试,在真正动手执行测试之前,我们都需要先根据软件需求来设计测试用例,之后再依据设计好…...
Maven —— 项目管理工具
前言 在这篇文章中,荔枝会介绍如何在项目工程中借助Maven的力量来开发,主要涉及Maven的下载安装、环境变量的配置、IDEA中的Maven的路径配置和信息修改以及通过Maven来快速构建项目。希望能对需要配置的小伙伴们有帮助哈哈哈哈~~~ 文章目录 前言 一、初…...
Ubuntu 命令行编辑文件后如何保存退出
在 Ubuntu 命令行中编辑文件后,可以使用以下步骤保存并退出: 按下键盘上的 Ctrl 键和 X 键组合,以退出编辑模式。如果文件已更改,你将看到提示,询问是否保存更改。按下 Y 键来确认保存更改,或按下 N 键取消…...
AHB协议理解
从小父亲就教育我,做一个对社会有用的人! 目录 Chapter1 AHB Block Diagram Ginput signal lnput signals Output Signal Chapter3 Transfers AHB接口Overview Chapter6 Data Buses HWDATA HRDATA Chapter1 Introduction AHB: Advanced High-performanc…...
【UE5 多人联机教程】01-创建主界面
目录 工程地址 步骤 参考链接 工程地址 GitHub - UE4-Maple/C_MP_Lobby: 多人大厅教程项目 步骤 1. 先新建一个工程 2. 将下载的工程中的Plugins目录拷贝到自己新建的工程下 3. 打开工程,新建一个游戏实例 这里命名为“GI_Main” 在项目设置中设置游戏实例类为…...
HarmonyOS学习路之方舟开发框架—学习ArkTS语言(基本语法 五)
Styles装饰器:定义组件重用样式 如果每个组件的样式都需要单独设置,在开发过程中会出现大量代码在进行重复样式设置,虽然可以复制粘贴,但为了代码简洁性和后续方便维护,我们推出了可以提炼公共样式进行复用的装饰器St…...
React(3)
1.案例选项卡 import React, { Component } from reactexport default class App extends Component {state{tabList:[{id:1,text:"电影"},{id:2,text:"影院"},{id:3,text:"我的"}]}render() {return (<div><ul>{this.state.tabList…...
LangChain大型语言模型(LLM)应用开发(三):Chains
LangChain是一个基于大语言模型(如ChatGPT)用于构建端到端语言模型应用的 Python 框架。它提供了一套工具、组件和接口,可简化创建由大型语言模型 (LLM) 和聊天模型提供支持的应用程序的过程。LangChain 可以轻松管理与语言模型的交互&#x…...
FPGA——点亮led灯
文章目录 一、实验环境二、实验任务三、实验过程3.1 编写verliog程序3.2 引脚配置 四、仿真4.1 仿真代码4.2仿真结果 五、实验结果六、总结 一、实验环境 quartus18.1 vscode Cyclone IV开发板 二、实验任务 每间隔1S实现led灯的亮灭,实现流水灯的效果。 三、实…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容
基于 UniApp + WebSocket实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
毫米波雷达基础理论(3D+4D)
3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文: 一文入门汽车毫米波雷达基本原理 :https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...
绕过 Xcode?使用 Appuploader和主流工具实现 iOS 上架自动化
iOS 应用的发布流程一直是开发链路中最“苹果味”的环节:强依赖 Xcode、必须使用 macOS、各种证书和描述文件配置……对很多跨平台开发者来说,这一套流程并不友好。 特别是当你的项目主要在 Windows 或 Linux 下开发(例如 Flutter、React Na…...
