给DJITello加个航模遥控器吧~

原创 云深之无迹 2023-01-24 13:24

我在很久以前写过一个几乎重合的帖子,但是我觉得当时的我太年轻了,很多东西没有写明白,而一年后我决定重新搞一下这个东西。

FlySky+A8S(SBUS接收机)+ESP8266控制大疆Tello无人机.准备

红红火火的DJI官网

怎么说呢,EDU版本有个ESP32的扩展模块,现在下载的SDK文档里面没有这部分内容了。

我不妨大胆的想想这个问题,DJI确实是做出来了牛逼的东西,但是面向用户的话,用户不太行,玩不转。(本身产品也是毛病星星点点的,有些也不能克服)

最后DJI索性,玩尼玛,桌子都给你掀了:

乌鸦哥真帅啊

。。。我土狗了,原来在后面有这部分内容,上面是我辛苦写的,就不删除了

搞错了

害,有个教育群是有些人希望推出教育产品的无刷版本,对的,现在TT的最大问题就是续航和动力问题,其它的都很棒。

害,无所谓啦~想以前我还差点变成大疆的KOL,妈的,我自己不争气,不搞视频,写文章谁看啊!(鄙人技术垃圾也是个问题,hhhhh,都可以补足了)

对的,机会就悄悄的溜走了

DJI的无人机,除了手机应用以外,还有一个是蓝牙的手柄,害,我也买了,用不明白了。。。

所以最大的问题就是作为一个小航模,没有一个航模遥控器来控制。

TT在拆下扩展模块的时候,使用的WIFI链路+UDP控制,在加扩展模块下,控制的样子和上面大同小异,不过是扩展和飞机之间通讯是串口:

官方有张图,很漂亮

那这个项目就是使用普通RC接收机+遥控器来完成TT。

其实实现起来很简单,就两个代码而已,但是我觉得没有意思。要搞明白写咋写出来的。

你要问我为什么不自己写,那抱歉,我是个菜狗

FlySky的接收机要用一个串口,ESP8266的控制需要用一个串口,必须要用的两个串口,但是通讯程序需要调试,所以还需要一个串口,iBUS还支持信息遥测,所以还可以用一个串口。

而且还要ESP8266要网络支持,所以可以找到这一款硬件,串口+ESP8266的合体。

网上可以买到的就是这个了,但有点贵。。。

其实就单纯的控制来讲,其实一个ESP8266+RC就可以了~

WeMOS Mega

而且上面通过拨码开关,来开启各个芯片之间的连接

如果有板子的,我也给出Pin图

那有人想要原理图,我也有,牛逼不?从俄罗斯搞得~

还不夸我

ESP8266有两个串口

2 个 UART 接⼝的数据传输均由硬件实现。数据传输速度可达 115200*40 (4.5 Mbps)。UART0 可以⽤做通信接⼝,⽀持流控。由于 UART1 ⽬前只有数据传输功能,所以⼀般⽤作打印 log。

这个是编码开关的连接方式

Tello 公开了一个接收命令的 UDP 端口和另一个公开统计信息的端口。ESP8266 模块会先连接到 Tello 建立的WIFI,并发送command消息以稳定通信。

一个通道(遥控器通道)用作起飞和降落的开关。起飞后,使用rc指令连续控制无人机,同时发送所有 4 个通道(左/右、前/后、上/下和偏航)。

这些在源码中都会有体现。

ATmega2560 和 ESP8266 模块之间的通信是通过其中一个串行端口进行的。我选择使用基于文本的通信,只是为了更容易在两个模块之间来回发送数据和调试消息。

这就是我们的控制方式了

我们就要这些说明,不要挑战卡

我是没有接触过网络编程的,这个需要补一个UDP编程。

https://arduino-esp8266.readthedocs.io/en/latest/esp8266wifi/udp-examples.html

这里推荐自带的教程

创建一个WiFiUDP对象。然后指定一个端口来监听传入的数据包。最后,我们需要为传入的数据包设置缓冲区并定义回复消息。

推荐这个开源的调试软件

8266中,UDP只有12个函数

函数用法在这里:

uint8_t begin(uint16_t p)uint8_t begin(IPAddress a, uint16_t p)

启动监听某个端口,或者来自某地址发送给某端口的数据;

void stop()

停止监听,释放资源;

int beginPacket()

准备发送数据包(仅在运行parsePacket()方法且返回值大于0时可用);

int beginPacket(IPAddress ip, uint16_t port)

准备发送数据包,参数分别为目标IP和目标端口号;

size_t write(uint8_t)size_t write(const uint8_t *buffer, size_t size)

复制数据到发送缓存(同一数据包发送缓存最大1460字节);

int endPacket()

发送数据;

int parsePacket()

获取接收数据信息,如果有数据包可用,则返回队首数据包长度,否则返回0;

int read()

读取首字节数据(仅在运行parsePacket()方法且返回值大于0时可用);

int read(unsigned char* buffer, size_t len)int read(char* buffer, size_t len)

读取数据(仅在运行parsePacket()方法且返回值大于0时可用);

int peek()

读取首字节数据,但并不从接收缓存中删除它(仅在运行parsePacket()方法且返回值大于0时可用);

void flush()

清空当前接收缓存(仅在运行parsePacket()方法且返回值大于0时可用);

IPAddress remoteIP()

返回远端地址(仅在运行parsePacket()方法且返回值大于0时可用);

uint16_t remotePort()

返回远端端口号(仅在运行parsePacket()方法且返回值大于0时可用);

因为频繁的使用到串口,这里也说一下串口的使用,ESP8266的串口可以使用特殊优化过的库:

https://github.com/plerup/espsoftwareserial
实现了中断服务例程的最佳实践。在接收中断中,不是一次阻塞整个字节—使 CPU 的任何近实时行为无效——只记录电平变化和时间戳。比较耗时的相位检测和字节组装在主代码中完成。
除了高比特率,取决于其他正在进行的活动,特别是中断,此软件串行适配器支持全双工接收和发送。SoftwareSerial::enableIntTx(false)在高比特率 (115200bps) 下,可以通过函数调用以阻塞并发全双工接收为代价来改进发送比特时序。
与相应的 AVR 库具有相同的功能,但可以同时激活多个实例。支持高达 115200 波特的速度。除了与 AVR SoftwareSerial 类兼容的构造函数和不带参数的更新构造函数外,该begin() 函数还可以处理引脚分配和逻辑反转。它还具有用于字节缓冲区和 ISR 位缓冲区的可选输入缓冲区容量参数。这样,它就可以更好地替代 ESP MCU 上的硬件串行 API。请注意,由于 ESP 总是有其他活动正在进行,因此中断时序会有些不准确。当以高波特率传输大量数据时,这可能会导致不可避免但很少的位错误。该库支持 ESP8266、ESP32、ESP32-S2 和 ESP32-C3 设备。

如果你的硬件串口不够用的话,可以考虑使用IO来模拟UART:

传统的SoftwareSerial 库具有以下已知限制:

1.它不能同时发送和接收数据。
2.如果使用多个软件串口,一次只能接收一个数据。
在Arduino 1.0的之前,内置的库是上面这个库,但是对中断支持不好,甚至说就是没有支持,后面有大佬重写了SoftSerial:
它引入了中断驱动的接收——对本机 SoftwareSerial 所需的轮询进行了显着改进。
如果没有中断,程序设计将受到相当大的限制,因为它必须以非常短的时间间隔连续轮询串行端口,这使得它几乎不可能。
例如,使用 SoftwareSerial 来接收 GPS 数据并将其解析为可用的形式。当 NMEA 字符到达时,程序正忙于跟上它们,而无暇实际花时间将它们组装成有意义的东西。这就是 AFSoftSerial(和NewSoftSerial的)中断架构的天赐之物。使用中断驱动的 RX,程序在处理先前接收到的数据时会在后台填充其缓冲区。
http://arduiniana.org/NewSoftSerial/NewSoftSerial12.zip

这个是库的直接下载位置,可以去读源码

具体的API就不罗列了:

https://blog.csdn.net/poisonchry/article/details/116503393

这篇写的很好了

我们这里还缺一个RC的知识铺垫:

用于 Flysky/Turnigy RC iBUS 协议的 Arduino 库 - 使用硬件 UART 的伺服(接收)和传感器/遥测(发送)。
iBUS 协议是 Flysky 开发的一种半双工协议,用于使用一条数字线控制多个舵机和电机。每个伺服通道接收到的值在 1000(十六进制 eE8)和 2000(十六进制 7D0)之间,具有中性子微调设置,这与大多数伺服的脉冲宽度(以微秒为单位)相对应。该协议还可以连接传感器,将遥测信息发送回 RC 收发器。

TR的遥控器还挺丑的

官网上面早就没有了AFHDS2的协议内容,不过互联网是有记忆的:

这个是2代的协议

逻辑分析仪的数据

AFHDS 一代协议(FlySky),至于一代的协议在这里。

官方又放出了富斯AFHDS3 ibus 协议通道数据格式如下:
3.3V UART 115200 bauds, 8 bits, 2 stop bits with no parity serial link

可以读一下

整个通讯链路的话就是这样

我们需要两份代码,一份处理RC,一份负责遥测以及将RC通道的信息解码到UDP使用WIFI发射出去。

我们先看RC部分:

https://github.com/bmellink/IBusBM

使用这个库来解码

该代码用于与 RC 接收器通信,并将数据从通道数据发送到 ESP8266。它不断地从接收器读取 RC 通道;然后将其序列化为具有格式的字符串:

>channelNumber:value

这个是序列化的代码

最后通过ESP8266串口发送。它还从串口读取消息。它们可以是调试或数据消息。两种类型的数据消息是电池电量和温度水平。它们都作为遥测传感器发送回 RC 接收器。

我们建立RC和信息遥测两个对象,以及使用了Mega的4个串口

就打印信息,可以波特率不高,信息回调也打开了

可以遥测的数据

在前面调试的时候开一个串口,将解码出来的数据打印出去,获得的是第几个通道的值是多少。

SerialEvent()函数。函数将在loop()中自动被内部调用。在我们写的代码中如果串口有任何数据(只要不是换行符),那么就将数据加到一个缓存字符串中。在收到换行符时就返回缓存字符串。发送后将会将字符串清空为null。

这个有点回调的感觉,但是又感觉不是:

三串口是信息回调串口:然后一直读到换行,如果里面有


接下来的代码用于使用 UDP API 通过端口 8889 向 Tello 发送消息。它基本上使用 4 个命令:command- 稳定通信。takeoff- 起飞。它由频道 5 上的 RC 发射器开关控制。land- 着陆。它也由通道 5 开关控制。rc- 发送每个方向的控制。

硬件的连接,和IP+控制端口+信息端口

打印的信息用类来包装

应该写的够详细了吧

连接WIFI到Tello,并且发送控制命令。

模块有三种模式:

1:STA 模式:ESP8266模块通过路由器连接互联网,手机或电脑通过互联网实现对设备的远程控制。

2:AP 模式:ESP8266模块作为热点,实现手机或电脑直接与模块通信,实现局域网无线控制。

3:STA+AP 模式:两种模式的共存模式,即可以通过互联网控制可实现无缝切换,方便操作。

发送的命令的时候随便打印在终端上面

和Tello的通讯

SDK3.0

SDK2.0

这个代码来处理这个字符串

这个从UDP 端口 8890 读取统计数据。这些统计数据被序列化为一个字符串,其中包含几个不同的键和值,由“;”分隔。此代码解析此字符串,并选择电池和温度。它从串行接口读取 RC 通道并将统计数据写回。

这个是自编码的,在从缓冲区取到的字符串插入:/0,末尾有EOF的时候停止,开始插入,不停的插入:;,来分割字符串。

其实就是键值对拆分,妈的,写Python久了看着这东西还有点害怕

最后把解码的值装载到Tello的状态类里面

这个代码是从UDP口取到信息,和上面的代码运行的时候有顺序区别

上面的数组,就是为了确定状态,这个是工具函数,来处理摇杆的数据

这个是拨钮开关和三段式开关,控制飞行起落的

这个就是我们心心念念的RC函数了,写入到cmd,然后UDP发送

一些前置准备

这里就是和RC遥控器的纠葛了

把取到的字符串开始拆解:

>channelNumber:value

读到>的时候,开始取出通道后面的值。后面也有一段终端的打印代码。

这个是快速的打印电池和温度的信息,也可以自己加wifi强度等信息。

如果要起飞的话,就发送,也会检查降落情况,顺便油门全关。

之后就是发送RC控制了。

不知不觉写了这么多,受益匪浅了,睡觉去了~

视频演示稍后附上。

小彭同学的摄影技术越来越(๑•̀ㅂ•́)و✧

欢迎领取

https://terra-1-g.djicdn.com/2d4dce68897a46b19fc717f3576b7c6a/Tello%20%E7%BC%96%E7%A8%8B%E7%9B%B8%E5%85%B3/For%20Tello/Tello%20SDK%20Documentation%20EN_1.3_1122.pdf
https://arduino-esp8266.readthedocs.io/en/latest/libraries.html
https://www.arduino.cc/reference/en/libraries/wifi/
https://github.com/espressif/arduino-esp32/tree/master/libraries/WiFi
http://arduiniana.org/libraries/newsoftserial/
https://blog.csdn.net/m0_61543203/article/details/126706199
https://blog.csdn.net/m0_51220742/article/details/123568721?spm=1001.2014.3001.5501
https://blog.csdn.net/m0_51220742/article/details/123791062
https://github.com/espressif/arduino-esp32/tree/master/libraries/WiFihttps://github.com/espressif/arduino-esp32/tree/master/libraries/AsyncUDP
https://packetsender.com/
https://forum.arduino.cc/t/mega-wifi-r3-atmega2560-esp8266-8-mb-memoire/446340/12
https://www.instructables.com/Arduino-MEGA-2560-With-WiFi-Built-in-ESP8266/
https://www.amazon.it/ATmega2560-ESP8266-USB-TTL-NodeMCU-Arduino/dp/B07HML8DZD
https://github.com/werneckpaiva/telloRC
https://github.com/esp8266/Arduino
https://terra-1-g.djicdn.com/851d20f7b9f64838a34cd02351370894/RM-TT/RoboMaster%20TT%20Arduino%20IDE%20%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E.pdf
https://dl.djicdn.com/downloads/RoboMaster%20TT/Tello_SDK_3.0_User_Guide_cn.pdf
https://github.com/tianbot/rmtt_ros
https://www.dji.com/cn/robomaster-tt/downloads
https://login.squarespace.com/api/1/login/oauth/provider/authorize?client_id=qNgYXXcY8Fa8M&redirect_uri=https%3A%2F%2Fflysky.squarespace.com%2Fauth%2Foauth%2Fconnect%3FdestinationUrl%3Dhttps%253A%252F%252Fflysky.squarespace.com%252Fconfig%252F%253FframeUrl%253D%252Fchinese-blog-1%252F2019%252F9%252F28%252Fafhds3-ibus-&state=1%3A1674458861%3AtrpJciNyjaO3jrl3EHDMTFPuKwVuHAQ08JV%2Fg9QF9tE%3D&overrideLocale=en-US&options=%7B%22isCloseVisible%22%3Afalse%2C%22isCreateAccountViewActive%22%3Afalse%7D

评论
  • 光耦合器,也称为光隔离器,是一种利用光在两个隔离电路之间传输电信号的组件。在医疗领域,确保患者安全和设备可靠性至关重要。在众多有助于医疗设备安全性和效率的组件中,光耦合器起着至关重要的作用。这些紧凑型设备经常被忽视,但对于隔离高压和防止敏感医疗设备中的电气危害却是必不可少的。本文深入探讨了光耦合器的功能、其在医疗应用中的重要性以及其实际使用示例。什么是光耦合器?它通常由以下部分组成:LED(发光二极管):将电信号转换为光。光电探测器(例如光电晶体管):检测光并将其转换回电信号。这种布置确保输入和
    腾恩科技-彭工 2025-01-03 16:27 180浏览
  • PLC组态方式主要有三种,每种都有其独特的特点和适用场景。下面来简单说说: 1. 硬件组态   定义:硬件组态指的是选择适合的PLC型号、I/O模块、通信模块等硬件组件,并按照实际需求进行连接和配置。    灵活性:这种方式允许用户根据项目需求自由搭配硬件组件,具有较高的灵活性。    成本:可能需要额外的硬件购买成本,适用于对系统性能和扩展性有较高要求的场合。 2. 软件组态   定义:软件组态主要是通过PLC
    丙丁先生 2025-01-06 09:23 83浏览
  • 彼得·德鲁克被誉为“现代管理学之父”,他的管理思想影响了无数企业和管理者。然而,关于他的书籍分类,一种流行的说法令人感到困惑:德鲁克一生写了39本书,其中15本是关于管理的,而其中“专门写工商企业或为企业管理者写的”只有两本——《为成果而管理》和《创新与企业家精神》。这样的表述广为流传,但深入探讨后却发现并不完全准确。让我们一起重新审视这一说法,解析其中的矛盾与根源,进而重新认识德鲁克的管理思想及其著作的真正价值。从《创新与企业家精神》看德鲁克的视角《创新与企业家精神》通常被认为是一本专为企业管
    优思学院 2025-01-06 12:03 113浏览
  • 大模型的赋能是指利用大型机器学习模型(如深度学习模型)来增强或改进各种应用和服务。这种技术在许多领域都显示出了巨大的潜力,包括但不限于以下几个方面: 1. 企业服务:大模型可以用于构建智能客服系统、知识库问答系统等,提升企业的服务质量和运营效率。 2. 教育服务:在教育领域,大模型被应用于个性化学习、智能辅导、作业批改等,帮助教师减轻工作负担,提高教学质量。 3. 工业智能化:大模型有助于解决工业领域的复杂性和不确定性问题,尽管在认知能力方面尚未完全具备专家级的复杂决策能力。 4. 消费
    丙丁先生 2025-01-07 09:25 80浏览
  • 随着市场需求不断的变化,各行各业对CPU的要求越来越高,特别是近几年流行的 AIOT,为了有更好的用户体验,CPU的算力就要求更高了。今天为大家推荐由米尔基于瑞芯微RK3576处理器推出的MYC-LR3576核心板及开发板。关于RK3576处理器国产CPU,是这些年的骄傲,华为手机全国产化,国人一片呼声,再也不用卡脖子了。RK3576处理器,就是一款由国产是厂商瑞芯微,今年第二季推出的全新通用型的高性能SOC芯片,这款CPU到底有多么的高性能,下面看看它的几个特性:8核心6 TOPS超强算力双千
    米尔电子嵌入式 2025-01-03 17:04 55浏览
  • 在智能家居领域中,Wi-Fi、蓝牙、Zigbee、Thread与Z-Wave等无线通信协议是构建短距物联局域网的关键手段,它们常在实际应用中交叉运用,以满足智能家居生态系统多样化的功能需求。然而,这些协议之间并未遵循统一的互通标准,缺乏直接的互操作性,在进行组网时需要引入额外的网关作为“翻译桥梁”,极大地增加了系统的复杂性。 同时,Apple HomeKit、SamSung SmartThings、Amazon Alexa、Google Home等主流智能家居平台为了提升市占率与消费者
    华普微HOPERF 2025-01-06 17:23 141浏览
  • 每日可见的315MHz和433MHz遥控模块,你能分清楚吗?众所周知,一套遥控设备主要由发射部分和接收部分组成,发射器可以将控制者的控制按键经过编码,调制到射频信号上面,然后经天线发射出无线信号。而接收器是将天线接收到的无线信号进行解码,从而得到与控制按键相对应的信号,然后再去控制相应的设备工作。当前,常见的遥控设备主要分为红外遥控与无线电遥控两大类,其主要区别为所采用的载波频率及其应用场景不一致。红外遥控设备所采用的射频信号频率一般为38kHz,通常应用在电视、投影仪等设备中;而无线电遥控设备
    华普微HOPERF 2025-01-06 15:29 125浏览
  • 本文介绍Linux系统更换开机logo方法教程,通用RK3566、RK3568、RK3588、RK3576等开发板,触觉智能RK3562开发板演示,搭载4核A53处理器,主频高达2.0GHz;内置独立1Tops算力NPU,可应用于物联网网关、平板电脑、智能家居、教育电子、工业显示与控制等行业。制作图片开机logo图片制作注意事项(1)图片必须为bmp格式;(2)图片大小不能大于4MB;(3)BMP位深最大是32,建议设置为8;(4)图片名称为logo.bmp和logo_kernel.bmp;开机
    Industio_触觉智能 2025-01-06 10:43 87浏览
  • 根据环洋市场咨询(Global Info Research)项目团队最新调研,预计2030年全球无人机锂电池产值达到2457百万美元,2024-2030年期间年复合增长率CAGR为9.6%。 无人机锂电池是无人机动力系统中存储并释放能量的部分。无人机使用的动力电池,大多数是锂聚合物电池,相较其他电池,锂聚合物电池具有较高的能量密度,较长寿命,同时也具有良好的放电特性和安全性。 全球无人机锂电池核心厂商有宁德新能源科技、欣旺达、鹏辉能源、深圳格瑞普和EaglePicher等,前五大厂商占有全球
    GIRtina 2025-01-07 11:02 63浏览
  • 这篇内容主要讨论三个基本问题,硅电容是什么,为什么要使用硅电容,如何正确使用硅电容?1.  硅电容是什么首先我们需要了解电容是什么?物理学上电容的概念指的是给定电位差下自由电荷的储藏量,记为C,单位是F,指的是容纳电荷的能力,C=εS/d=ε0εrS/4πkd(真空)=Q/U。百度百科上电容器的概念指的是两个相互靠近的导体,中间夹一层不导电的绝缘介质。通过观察电容本身的定义公式中可以看到,在各个变量中比较能够改变的就是εr,S和d,也就是介质的介电常数,金属板有效相对面积以及距离。当前
    知白 2025-01-06 12:04 167浏览
  • 自动化已成为现代制造业的基石,而驱动隔离器作为关键组件,在提升效率、精度和可靠性方面起到了不可或缺的作用。随着工业技术不断革新,驱动隔离器正助力自动化生产设备适应新兴趋势,并推动行业未来的发展。本文将探讨自动化的核心趋势及驱动隔离器在其中的重要角色。自动化领域的新兴趋势智能工厂的崛起智能工厂已成为自动化生产的新标杆。通过结合物联网(IoT)、人工智能(AI)和机器学习(ML),智能工厂实现了实时监控和动态决策。驱动隔离器在其中至关重要,它确保了传感器、执行器和控制单元之间的信号完整性,同时提供高
    腾恩科技-彭工 2025-01-03 16:28 170浏览
  •     为控制片内设备并且查询其工作状态,MCU内部总是有一组特殊功能寄存器(SFR,Special Function Register)。    使用Eclipse环境调试MCU程序时,可以利用 Peripheral Registers Viewer来查看SFR。这个小工具是怎样知道某个型号的MCU有怎样的寄存器定义呢?它使用一种描述性的文本文件——SVD文件。这个文件存储在下面红色字体的路径下。    例:南京沁恒  &n
    电子知识打边炉 2025-01-04 20:04 98浏览
  • 村田是目前全球量产硅电容的领先企业,其在2016年收购了法国IPDiA头部硅电容器公司,并于2023年6月宣布投资约100亿日元将硅电容产能提升两倍。以下内容主要来自村田官网信息整理,村田高密度硅电容器采用半导体MOS工艺开发,并使用3D结构来大幅增加电极表面,因此在给定的占位面积内增加了静电容量。村田的硅技术以嵌入非结晶基板的单片结构为基础(单层MIM和多层MIM—MIM是指金属 / 绝缘体/ 金属) 村田硅电容采用先进3D拓扑结构在100um内,使开发的有效静电容量面积相当于80个
    知白 2025-01-07 15:02 66浏览
  • 根据Global Info Research项目团队最新调研,预计2030年全球封闭式电机产值达到1425百万美元,2024-2030年期间年复合增长率CAGR为3.4%。 封闭式电机是一种电动机,其外壳设计为密闭结构,通常用于要求较高的防护等级的应用场合。封闭式电机可以有效防止外部灰尘、水分和其他污染物进入内部,从而保护电机的内部组件,延长其使用寿命。 环洋市场咨询机构出版的调研分析报告【全球封闭式电机行业总体规模、主要厂商及IPO上市调研报告,2025-2031】研究全球封闭式电机总体规
    GIRtina 2025-01-06 11:10 103浏览
  • By Toradex 秦海1). 简介嵌入式平台设备基于Yocto Linux 在开发后期量产前期,为了安全以及提高启动速度等考虑,希望将 ARM 处理器平台的 Debug Console 输出关闭,本文就基于 NXP i.MX8MP ARM 处理器平台来演示相关流程。 本文所示例的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台。  2. 准备a). Verdin i.MX8MP ARM核心版配合Dahlia载板并
    hai.qin_651820742 2025-01-07 14:52 40浏览
我要评论
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦