尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
JDY-31蓝牙模块与Android手机串口通信实战:AT指令与接线全攻略
JDY-31 这个蓝牙模块我前后用了差不多两年——最早是给 Arduino 智能小车做手机遥控后来帮朋友做手机控制的窗帘开关再后来还把它接到电脑上位机上做数据采集。这篇文章就解决一件事怎么用 JDY-31 把 Android 手机和 Arduino 的串口通信打通5 分钟跑通最小系统同时把模块的 AT 指令大全整理成一张能在现场直接查的表。先说结论JDY-31 是走串口透传的经典蓝牙 SPP 模块对于“手机发一条指令、Arduino 执行一个动作”这类需求它是成本最低、上手最快的方案不需要碰 BLE 那套 GATT、Service、Characteristic 的复杂概念。这篇文章适合刚接触 Arduino 串口通信的新手也适合已经在用 HC-05 想换模块、或者做智能小车/物联网小项目需要手机控制的进阶玩家。全文代码都是我在 UNO 和 Android Studio 上实测过的套路照着抄基本不会出大问题。1. 为什么选 JDY-31从需求反推选型1.1 先搞清楚你要的是哪条通信链路做任何项目第一步不是选模块而是确认通信链路。Android 手机和 Arduino 之间能通信的路其实就那几条一是 WiFi手机和板子连同一个路由器或热点走 TCP/UDP典型方案是 ESP8266/ESP32二是 BLE 低功耗蓝牙典型模块是 HM-10、JDY-08手机端要写 GATT 回调工程量大不少三是经典蓝牙 SPP也就是 JDY-31、HC-05 这类模块模块本身不关心你发了什么它就是把 UART 串口数据原封不动地透传成蓝牙数据手机端通过 BluetoothSocket 读写跟操作一个虚拟串口一模一样。对大多数遥控、数据回传项目来说SPP 是最省事的选择因为它把“网络协议”这层复杂度全部屏蔽掉了。你不需要理解 IP、端口、连接握手只要会收发串口字节就能干活。这也是为什么那么多 Arduino 智能小车教程都选这种蓝牙串口模块而不是折腾 WiFi 或者 BLE——不是 WiFi/BLE 不好而是杀鸡不用牛刀先把业务跑起来最重要。1.2 JDY-31 和 HC-05/HC-06 到底有什么区别很多人在 JDY-31 和 HC-05/HC-06 之间纠结。我的建议很直接新项目直接用 JDY-31。原因有三个。第一AT 指令配置简单JDY-31 在未连接状态下直接通过串口发 AT 指令就能配置不需要像 HC-05 那样额外把 EN 引脚拉高才能进 AT 模式少一根线少一步操作新手不容易卡住。第二默认波特率 9600跟 Arduino 初始化串口的习惯一致写代码不用绕来绕去。第三价格便宜市面上大多数小板子自带稳压5V 供电很方便。HC-05 当然也有它的优势比如 AT 指令生态成熟、网上资料多、模块本身名气大但就上手体验和性价比来说JDY-31 更适合用来做小项目。我把三款模块的差异整理成了一张对照表方便你按需选型。对比项JDY-31HC-05HC-06蓝牙协议蓝牙 3.0 SPP蓝牙 2.0 SPP蓝牙 2.0 SPP默认波特率960038400AT/9600数据9600进入 AT 模式未连接时直接发 AT按住 EN 键上电未连接时直接发 AT主从模式切换支持 ATMASTER支持 ATROLE仅从机典型价格低略高低从这张表能看出来JDY-31 本质上就是 HC-06 的升级版保持了“直接发 AT”的便利又补上了主从切换能力同时波特率档位更丰富。对绝大多数手机遥控场景我们只需要从机模式所以这一步基本不用动。1.3 这套方案能用在哪些场景JDY-31 Arduino Android 这套组合能落地的场景非常多。最典型的是 Arduino 智能小车的手机遥控器发送前进、后退、转向指令把之前那种红外遥控的 8 米距离限制直接突破其次是手机控制家居小物件比如开灯、开窗帘、自动浇花再就是把 Arduino 采集的温湿度、超声波距离等传感器数据实时回传到手机显示做一个随身携带的仪表盘。这套思路还能向上延伸配合 Unity、LabVIEW、Processing 做体感交互或桌面级数据可视化和电脑上的上位机软件做联调甚至可以作为学习 Android 网络编程的入门项目先跑通串口通信再迁移到 TCP 或者 BLE 都会容易很多。如果你后续要上 ESP32 或者 STM32这套串口通信的思路也一样适用只是引脚定义和底层库的写法略有区别核心的“串口透传帧协议”概念完全通用。2. 硬件准备与接线这一步错了后面全白搭2.1 物料清单与工具准备硬件其实很简单一块 Arduino UNONano 也完全没问题Mega 更宽裕一块 JDY-31 模块三四根母对母杜邦线一根 Arduino USB 数据线一台带蓝牙的 Android 手机。我强烈建议再准备一个蓝牙串口调试助手 App比如 Serial Bluetooth Terminal 或者国内各种“蓝牙串口助手”这类工具能让你先绕过代码直接验证模块和手机之间的通信是否正常——这一步能省掉后面 80% 的排查时间。另外如果你想脱离 Arduino 直接给模块配置参数可以备一个 CH340 或者 CP2102 的 USB 转 TTL 小板子。配置 AT 指令时它比 Arduino 更纯粹少了一层干扰。至于 Android 端装好 Android Studio 就够不需要额外下载任何蓝牙库系统自带的 android.bluetooth 包完全够用。2.2 引脚说明与接线表JDY-31 常见的引脚有六个VCC、GND、TXD、RXD、EN/WAKE、STATE。VCC 接电源正极支持 3.3V 到 6V 宽压输入接 Arduino 的 5V 即可GND 必须和 Arduino 共地这是串口通信能正常工作的前提TXD 是模块发送脚要接到 Arduino 的接收脚RXD 是模块接收脚要接到 Arduino 的发送脚注意这里必须交叉连接很多人第一次就栽在“同名相连”上EN/WAKE 是使能脚普通使用悬空就行STATE 是状态输出脚未连接输出低电平连接后输出高电平可以接到 Arduino 数字引脚用来检测连接状态。JDY-31 引脚接到 Arduino UNO说明VCC5V宽压输入支持 3.3V~6VGNDGND必须共地TXDD10软串口 RX模块发送Arduino 接收RXDD11软串口 TXArduino 发送模块接收EN/WAKE悬空低电平休眠用不到STATE悬空或 D2连接状态检测可选关于电平多说一句。JDY-31 的 UART 是 3.3V TTL 电平而 Arduino UNO 的数字引脚输出是 5V。市面上常见的成品小板子在 RXD 上基本都做了电平处理电路直接接 5V 通常没问题但如果你买的是裸板或者要接其他主控保险起见可以在 Arduino 的 D11 到模块 RXD 之间串一个电阻分压从 D11 先接一个 1kΩ 电阻到模块 RXD再从模块 RXD 接一个 2kΩ 电阻到 GND分压下来大约 3.3V既不会烧模块也不会误判逻辑电平。2.3 上电前的检查清单上电之前照着这几个点过一遍基本能避免 90% 的硬件问题。第一电源和地别接反模块烧了不会给你第二次机会。第二TX/RX 是交叉连接不是同名相连模块的 TXD 必须接 Arduino 的接收脚。第三如果你用的是 D0/D1 硬件串口Arduino 上传程序时模块会占用串口导致上传失败这时候要先把 RX/TX 杜邦线拔掉再上传这也是我主推 D10/D11 软串口的原因——上传时不需要动线代码烧录互不干扰。第四检查手机蓝牙是否打开模块上电后指示灯应该是闪烁状态表示等待连接。如果灯不亮先查电源如果灯常亮说明已经和某个设备连上了需要先断开那个设备。这些小状态看着不起眼实际排查时能省很多时间。3. Arduino 端程序实现先让模块“活”起来3.1 最小串口桥代码先把最小代码贴出来。这个程序做了两件事把从蓝牙收到的数据转发到 Arduino 的 USB 串口监视器把在串口监视器里输入的内容转发到蓝牙。就像一个透明管道让你一眼能看出数据是不是真的通了。#include SoftwareSerial.h SoftwareSerial btSerial(10, 11); // RX, TX void setup() { Serial.begin(9600); // USB 串口监视器 btSerial.begin(9600); // JDY-31 蓝牙模块 Serial.println(Bluetooth Serial Ready); } void loop() { if (btSerial.available()) { char c btSerial.read(); Serial.write(c); // 蓝牙 - 串口监视器 } if (Serial.available()) { char c Serial.read(); btSerial.write(c); // 串口监视器 - 蓝牙 } }我用的引脚是 D10 和 D11对应 SoftwareSerial(10, 11)。注意第一个参数是 RX、第二个参数是 TX接线上 Arduino 的 D10 接模块 TXDD11 接模块 RXD。波特率两边都设成 9600模块默认也是 9600这样刚上电就能通。程序写好后用 USB 线上传打开串口监视器把波特率选到 9600再用手机上的蓝牙串口助手连接 JDY-31。连接成功后在手机上发一条消息串口监视器里就应该能看到同样的内容反过来在串口监视器输入框里打字发送手机 App 也能收到。这一步如果通了说明从手机到蓝牙再到 Arduino 的链路已经全部打通后面加什么业务逻辑都基于这个基础。3.2 SoftwareSerial 与硬件串口怎么选这里有个很多人纠结的问题到底用硬件串口还是软件串口。Arduino UNO 只有一个硬件串口就是 D0/D1它同时被 USB 转串口芯片复用所以你在串口监视器看到的输出就是走这一路。如果把蓝牙模块接在 D0/D1串口监视器就不能同时用了而且每次上传程序都要拔线非常麻烦。SoftwareSerial 是用代码模拟出来的串口可以指定任意两个数字引脚代价是速度受限。在 9600 波特率下收发短指令完全够用但如果你要跑到 115200 甚至更高或者要同时双向高频收发大流量数据软件串口就比较容易丢字节。这时候建议换用硬件串口同时把调试输出挪到 SoftwareSerial 上或者干脆换 Arduino Mega——它有 4 个硬件串口随便折腾。另外提醒一句SoftwareSerial 在收数据的同时如果还有发送操作可能会有字节丢失。所以像智能小车这种“手机频繁下发指令、Arduino 几乎不上报数据”的单向控制场景用软串口非常稳但如果你做的是双向高并发数据传输比如实时回传传感器波形那就老老实实上硬件串口。3.3 通信协议设计别上来就裸发字符串很多新手代码通了之后就直接在手机端发裸字符串比如发 on 就开灯发 off 就关灯。短字串偶尔用一下没问题但指令一多就很容易出 bug串口是流式的没有消息边界上一次的数据可能被截断或者和下一次的数据粘连在一起。我见过最典型的问题就是发 stopArduino 收到 st小车根本停不下来。我的习惯是设计一个简单的帧协议格式可以写成 # 开头、: 分隔、; 结尾的字符串。比如 #LED:1; 表示开灯#MOTOR:150,150; 表示两个轮子都转 150。Arduino 端按分号判断一条指令结束解析起来很干净。下面是一个最简单的解析示例#include SoftwareSerial.h SoftwareSerial btSerial(10, 11); void setup() { pinMode(13, OUTPUT); Serial.begin(9600); btSerial.begin(9600); } void loop() { if (btSerial.available()) { String line btSerial.readStringUntil(;); line.trim(); if (line.startsWith(#LED:)) { int value line.substring(5).toInt(); digitalWrite(13, value 1 ? HIGH : LOW); btSerial.print(#LED:OK;); } } }这个协议看起来简单但解决了一个核心问题给串口数据划清边界。同样的思路在 Unity 串口通信、LabVIEW 串口通信、STM32 串口通信里都通用本质上就是约定好报文格式然后按格式解析。你以后做任何串口项目都能复用这套思路。4. AT 指令配置大全让模块按你的规矩干活4.1 进入 AT 模式的三要素JDY-31 配置参数靠的是 AT 指令也就是一串以 AT 开头的文本命令。进入 AT 模式有三个条件模块已上电、手机没有连接该模块、串口波特率和模块当前波特率一致。默认波特率是 9600所以在没改过波特率的情况下只要满足前两个条件直接发 AT 就能通。这里有个细节很多人栽过串口监视器右下角的下拉框一定要选 Both NL CR 或者至少带上回车换行。AT 指令必须以回车换行结尾否则模块不认。你发 AT 没反应十有八九就是忘了加回车换行而不是模块坏了。如果你是用 USB 转 TTL 直接接模块注意 USB 转 TTL 的 TX 接模块 RXD、RX 接模块 TXD同样要共地同时确认小板子的跳线帽或拨码开关把电平档位设对。4.2 JDY-31 常用指令速查表下面这张表是我把 JDY-31 常用的指令整理成的速查表。很多指令单独发就是查询带参数就是设置规则非常统一。指令功能示例与说明AT测试通信返回 OK说明模块正常ATVERSION查询固件版本返回类似 JDY-31-V3.xATNAME查询/设置设备名ATNAMEMY_BT改名后重连生效ATBAUD查询/设置波特率ATBAUD3 表示 9600档位见下文ATPIN查询/设置配对密码ATPIN8888默认一般是 1234ATMASTER查询/设置主从模式ATMASTER0 从机ATMASTER1 主机ATROLE角色设定部分固件用这条0从机1主机ATENLOG调试日志开关ATENLOG0 关闭日志减少干扰ATSLEEP休眠控制ATSLEEP0 唤醒/退出休眠ATRESET软复位配置完用它重启模块ATRESTORE恢复出厂设置名称、密码、波特率全部回默认ATBAUD 的档位对照如下01200124002480039600419200538400657600711520082304009460800。默认是 3也就是 9600。设置完波特率后模块会立即生效你必须把串口监视器的波特率同步改过去否则再发指令全是乱码。另外不同批次固件的个别档位可能有差异以模块实际返回的信息为准出厂固件版本可以用 ATVERSION 先查一下。4.3 现场实操改名、改波特率、改配对密码场景一把设备名改成能认出来的名字。默认名字是 JDY-31如果家里附近有两三个同型号模块手机蓝牙列表里就是一片 JDY-31根本分不清谁是谁。发送 ATNAMECAR_BT模块返回 OK然后发 ATRESET 复位或者直接断电重启在手机蓝牙列表里就能看到新名字了。注意名字尽量用英文字母和数字有些手机对中文或者特殊符号的蓝牙广播名支持不好显示会乱码。场景二修改通信波特率。假设你想把通信速度提到 115200发送 ATBAUD7模块返回 OK 后把串口监视器波特率改成 115200再发一次 AT 确认能收到 OK说明切换成功。这里要特别注意模块、Arduino 代码、手机 App 三处的波特率必须一致任何一处不一致数据都是乱码。如果你改完波特率忘了下次上电连不上别以为模块坏了先想想是不是波特率已经被改成别的值了用 ATRESTORE 恢复出厂设置是最快的兜底办法。场景三修改配对密码。发送 ATPIN5678之后手机配对时就需要输入 5678。改完同样要重连蓝牙才能生效。还有一个很实用的技巧模块默认可能开着调试日志ATENLOG1这时候串口里会冒出一些非业务数据的输出干扰你的协议解析直接发送 ATENLOG0 关掉能省掉不少排查时间。5. Android 端收发实战Android Studio 最小工程5.1 权限配置与 SDK 版本问题Android 端直接在 Android Studio 里新建一个空工程不需要导入任何第三方蓝牙库系统自带的 android.bluetooth 包就够了。要处理的是权限问题。如果你的 minSdk 在 30 及以下经典蓝牙只需要 BLUETOOTH 和 BLUETOOTH_ADMIN 这两个权限安装时自动授予但 Android 12API 31开始蓝牙权限被拆分成了 BLUETOOTH_SCAN 和 BLUETOOTH_CONNECT而且 BLUETOOTH_CONNECT 属于运行时权限需要弹窗申请。推荐在 AndroidManifest 里这样声明老版本和 Android 12 都能兼顾uses-permission android:nameandroid.permission.BLUETOOTH android:maxSdkVersion30 / uses-permission android:nameandroid.permission.BLUETOOTH_ADMIN android:maxSdkVersion30 / uses-permission android:nameandroid.permission.BLUETOOTH_CONNECT android:usesPermissionFlagsneverForLocation /如果你的应用不涉及定位场景给 BLUETOOTH_CONNECT 加上 neverForLocation 标志在部分系统上可以免于申请定位权限。运行时用 ActivityCompat.requestPermissions 向用户申请 BLUETOOTH_CONNECT 即可。另外要注意很多教程里旧式的 mBluetoothAdapter.isEnabled() 判断在新系统上不会触发弹窗你需要主动走一遍权限申请流程否则后面连蓝牙的时候会直接抛 SecurityException。5.2 连接、发送、接收的核心代码连接流程一共五步拿到 BluetoothAdapter判断蓝牙是否打开从已配对设备列表里找到目标模块用 SPP UUID 创建 BluetoothSocket连接后拿到输入输出流。核心代码我直接贴 Java 版本Kotlin 改起来也就是语法差异业务逻辑完全一样。private BluetoothSocket socket; private OutputStream outputStream; private InputStream inputStream; private void connect(BluetoothDevice device) { adapter.cancelDiscovery(); // 先停止扫描否则连接可能失败 UUID sppUuid UUID.fromString(00001101-0000-1000-8000-00805F9B34FB); try { socket device.createRfcommSocketToServiceRecord(sppUuid); socket.connect(); outputStream socket.getOutputStream(); inputStream socket.getInputStream(); new Thread(this::readLoop).start(); } catch (IOException e) { e.printStackTrace(); } } private void readLoop() { byte[] buffer new byte[1024]; int len; try { while ((len inputStream.read(buffer)) ! -1) { final String text new String(buffer, 0, len, UTF-8); runOnUiThread(() - textView.append(text)); } } catch (IOException ignored) {} } private void send(String msg) throws IOException { outputStream.write((msg \n).getBytes(UTF-8)); outputStream.flush(); }读数据必须在子线程里做因为 inputStream.read() 是一个阻塞方法放主线程会把界面卡死进而触发 ANR。我的做法是连接成功后启动一个 readLoop 线程死循环里 read拿到的数据通过 runOnUiThread 回到主线程更新界面。发送就简单了直接 outputStream.write(bytes)注意加上换行符结尾这样 Arduino 端的 readStringUntil 能正确切分指令。有一个细节值得注意执行 socket.connect() 之前最好先调用 adapter.cancelDiscovery()。因为 Android 在扫描蓝牙时会对连接操作产生干扰不取消扫描的话在部分手机上连接会失败或者极慢这是经典蓝牙开发里的一个老坑网上求助帖里至少一半的连接失败都是这个原因。5.3 新手最容易踩的 5 个 Android 坑新手在 Android 端容易踩的坑我按踩中频率排个序。第一个坑是 UUID 用错SPP 的 UUID 是固定的 00001101-0000-1000-8000-00805F9B34FB随便填一个随机 UUID 是连不上 JDY-31 的。第二个坑是 connect() 放主线程点击连接按钮后界面直接卡死弹出 ANR 对话框正确的做法是放到子线程或者用 AsyncTask/协程。第三个坑是 Android 12 上忘记申请动态权限蓝牙明明开着却抛 SecurityException。第四个坑是设备已配对但还是连不上。这种情况通常是模块已经被另一个手机连接占用了经典蓝牙 SPP 是点对点的一个模块同一时间只能被一个客户端连着先断开其他设备的连接再试。第五个坑是连接失败后的重连逻辑没做好。BluetoothSocket 连接失败后不能复用必须重新 create 一个新的 socket 再试直接在旧 socket 上重连会一直失败。另外强烈建议在写自己的 App 之前先用蓝牙串口助手 App 把模块和 Arduino 调通排除模块侧的变量。等手机能通过现成 App 和 Arduino 通信之后再动手写自己的 App。这样一旦出问题你就能把问题定位在自己的代码而不是硬件上。6. 常见问题与排查技巧实录6.1 问题速查表这一节是我把实际项目里遇到过的典型问题整理成的一张速查表建议直接收藏现场排查时候照着对。现象可能原因排查与解决办法手机蓝牙列表搜不到 JDY-31模块没上电、指示灯不闪检查 VCC/GND正常情况下模块 LED 闪烁搜到但配对失败PIN 码不对默认通常是 1234用 ATPIN 查询或修改App 连接失败模块被其他设备占用断开其他连接重启模块再试连上后发指令 Arduino 无反应TX/RX 接反或波特率不一致核对接线三处统一设 9600Arduino 上传项目出错D0/D1 硬件串口被占用改软串口或上传时拔掉杜邦线发 AT 无响应没加回车换行/已连接手机/波特率不对串口监视器选 Both NL CR断开蓝牙核对波特率数据乱码波特率不一致模块、Arduino、App 三处统一串口监视器出现奇怪日志调试日志开启发送 ATENLOG0 关闭6.2 几个值得长期保留的调试习惯最后分享三个我觉得值得长期保留的调试习惯。第一个先最小系统再叠加功能。JDY-31 拿到手第一件事不是接电机、接传感器而是先跑通手机到模块到 Arduino 的串口桥确认链路通了再往上加业务逻辑。很多人一上来就把蓝牙、电机驱动、传感器全接在一起出了问题根本不知道从哪查起。第二个把收发数据全部打日志。Arduino 端把收到的每个字节都通过另一个串口打印出来Android 端也把收发的字节实时显示在界面上两边一比对问题立刻现形。串口通信项目最怕的就是“感觉没通”有了日志通没通一目了然不用靠猜。第三个每次改完模块配置后用 ATRESET 复位一次别让各种配置残留。我见过太多人改了波特率之后忘了下次上电连不上还以为模块坏了折腾半天实际上只是波特率变了。把“改完必复位、复位必验证”养成习惯能省掉很多自我怀疑的时间。我自己用下来JDY-31 确实是性价比很高的经典蓝牙 SPP 模块5 分钟跑通串口通信不是夸张的说法。最后再分享一个小技巧如果之后你要在 ESP32 或者 STM32 上继续做串口通信相关项目可以把这篇的接线思路和协议设计直接搬过去底层无非就是 UART、波特率、帧格式这三件事。串口通信这东西一旦想通了边界和格式走到哪都吃得开希望这篇能帮你少走几步弯路。
RELATED

相关推荐

ROS Noetic实战避坑指南:Ubuntu 20.04下稳定部署与调试

ROS Noetic实战避坑指南:Ubuntu 20.04下稳定部署与调试

1. 这不是教科书,是我在ROS Noetic项目里踩了27次坑后写下的实操手记你搜“ROS1安装”,页面上全是“sudo apt update && sudo apt install ros-noetic-desktop-full”这种命令——然后呢?然后就卡在GPG密钥验证失败、源地址404、依赖…

📅 2026/9/28 14:27:30
五种机械臂轨迹算法实机对比:抖动、精度与能耗的工程权衡

五种机械臂轨迹算法实机对比:抖动、精度与能耗的工程权衡

1. 这不是理论推导,是五种轨迹算法在真实机械臂上的“手感”对比你手上正调试一台AR3机械臂,或者刚在Gazebo里搭好Panda模型,又或者正在为毕业设计里的3D打印机械臂写运动控制模块——无论哪种场景,当末端执行器从A点移动到B点时&…

📅 2026/9/28 14:27:30
研0组会汇报指南:从结构设计到被追问的应对框架

研0组会汇报指南:从结构设计到被追问的应对框架

研0这段时间,很多学弟学妹找我聊得最多的不是研究方向,而是组会汇报:导师没给模板、没给流程,一句“这周有进展吧,讲讲”,就把人晾在台上了。有的人PPT做得像产品发布会,被导师问两句就卡壳&…

📅 2026/9/28 14:27:30
MORE NEWS

更多资讯

📰

嘉立创EDA专业版原理图绘制实战:从网络标签到模块化设计

前阵子有个新人问我:嘉立创EDA专业版画原理图,为什么我画出来总是乱得像毛线团,明明连线都接对了,可一到PCB设计阶段就四处漏风。这个问题我太有感触了。PCB设计的起点不是布线,而是原理图。一张清晰的原理图不仅是电气…

📰

卡丁车语音控制实战:硅麦选型、I²S配置与指令优化

1. 为什么卡丁快跑组的语音控制总“听不懂”——从麦克风选型开始就踩了第一个坑全国大学生智能车竞赛里,“卡丁快跑组”这几年越来越火,规则明确允许语音指令作为辅助控制手段,但真正跑通、稳定、上赛道不翻车的队伍不到三成。我连续带了四届…

📰

Java毕设实战:宠物商务智慧管理系统全解析

毕设季一到,"宠物商务智慧管理系统"这类题目几乎成了Java方向选题的常客。听起来既有电商的商务属性,又带着"智慧"俩字的光环,还能光明正大地上传一份源码——但真上手做的时候,很多人连需求都没理清就开始写…

📰

TCP/UDP网络调试助手源码解析:C++与C#双语言实现与调试避坑

简介:这是一份TCP与UDP网络调试助手的完整资源包,内含可运行的SocketTool工具及C/C#源码实现,适合网络编程初学者与开发者调试TCP、UDP通信场景。压缩包共62个文件、18.71MB,以Qt动态库(dll)、C源码&#x…

📰

Blender建模模式+动态网格编辑+Geometry Script联动工作流详解

做三维内容这些年,我从 Edit Mode 一路用到 Geometry Nodes,见过太多人在“看得见的网格”和“算出来的网格”之间反复横跳。最近几版 Blender 把 Modeling Tools、Mesh Editing 和节点的边界敲掉了一大块:几何节点编辑器的 Modeling Mode 让…

📰

游戏引擎架构的本质:团队分工如何决定底层架构

1. 这不是教科书,是十年引擎团队踩出来的路“游戏引擎架构 001:从团队分工到底层架构”——这个标题里藏着一个被太多教程忽略的真相:引擎不是写出来的,而是长出来的。它不是某个人在深夜敲出的一堆C类,而是一群人、在…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬