基于ESP32与SA818模块的DIY无线电收发器:从硬件到软件定义电台
1. 项目概述与核心价值
如果你对业余无线电(Ham Radio)或者硬件DIY感兴趣,但又觉得传统的电台设备昂贵且封闭,那么这个基于ESP32和SA818模块的“狐狸狩猎”无线电收发器项目,绝对值得你花时间研究。它本质上是一个高度可定制、成本可控的双频段(VHF/UHF)无线电收发平台。所谓“狐狸狩猎”(Fox Hunting),在业余无线电圈子里特指一种利用无线电测向技术,在户外寻找隐藏信号源(即“狐狸”)的竞技活动。这个项目提供的套件,正是为这类活动量身打造的一个便携、智能的信号源或接收机。
为什么说它有价值?首先,它把复杂的射频电路封装成了一个即插即用的SA818模块,大大降低了射频设计的门槛。其次,它用ESP32作为大脑,这意味着你可以用熟悉的Arduino环境去编程,控制电台的频率、音量、扫描,甚至结合GPS、屏幕显示做出更复杂的应用。最后,整个设计是开源的,PCB、代码都可供你修改和扩展。你得到的不仅仅是一个玩具,而是一个可以深入理解现代软件定义无线电(SDR)概念、学习射频基础、并应用于实际场景(如应急通信、位置追踪、物联网回传)的绝佳学习平台。无论你是想入门业余无线电的硬件黑客,还是寻找独特物联网项目嵌入无线通信功能的开发者,这个项目都能提供从硬件焊接、固件烧写到应用编程的完整实践路径。
2. 核心硬件深度解析与选型逻辑
一套稳定可靠的硬件是项目成功的基石。这个项目的核心在于ESP32与SA818的协同,理解每个部件的选型原因和规格细节,能帮助你在组装和调试时事半功倍。
2.1 控制核心:ESP32 T-Display模块的不可替代性
项目选用LilyGO的TTGO T-Display模块,而非普通的ESP32开发板,是经过深思熟虑的。其核心价值在于“All-in-One”集成度。
- 微控制器:ESP32-WROOM模组,双核240MHz,提供充沛的处理能力用于运行用户界面、处理串口命令和未来可能增加的复杂逻辑(如音频解码、数据包处理)。
- 显示单元:集成的1.14英寸IPS彩屏(ST7789V驱动)是关键。在无线电设备中,实时显示频率、信号强度、频道名称、电池电量等信息至关重要。使用分立屏幕会增加接线复杂度和占用更多GPIO。此集成方案让设备自成一体,无需额外飞线。
- 用户输入:板载两个物理按键(GPIO 0, 35),可直接定义为频道切换、功能菜单等,简化了外部电路。
- 供电与连接:USB-C接口用于供电和编程,同时集成的充电管理芯片允许直接连接锂电池,使其非常适合便携设备。
注意:不同批次的T-Display模块引脚定义可能略有不同,务必在编程前确认你所使用的版本对应的GPIO映射(尤其是屏幕背光、复位等引脚)。本项目使用的代码是基于特定版本的,直接套用其他变体可能导致屏幕不亮。
2.2 射频引擎:SA818模块的平民化射频解决方案
SA818模块是这个项目的“电台心脏”。它本质上是一个高度集成的VHF/UHF收发信机模块,其核心与许多廉价手持对讲机(如宝峰UV-5R)同源。
- 技术本质:它内部包含射频收发芯片(如RDA1846)、微控制器、功率放大器和滤波器。我们通过简单的UART串口发送AT指令,就能控制其所有主要功能,如设置频率、亚音、发射功率等,实现了“软件定义”的射频前端。
- 双频段支持:SA818有VHF(134-174MHz)和UHF(400-480MHz)两种硬件版本。值得注意的是,部分UHF版本模块经过调整也能在VHF频段良好工作,这解释了为什么后期套件统一为UHF版本以覆盖双波段。但这并非官方保证,购买时仍需明确需求。
- 关键参数:
- 输出功率:典型值1W左右,足以满足短距离通信和测向需求。如需更大功率,需外接功放,并严格考虑散热和电源。
- 灵敏度:优于0.2μV,能接收到微弱的信号。
- 调制方式:窄带FM(NFM),这是业余无线电和公众对讲最常用的模式。
- 与ESP32的接口:连接极其简单,仅需四根线:VCC、GND、TX、RX。ESP32的TX接SA818的RX,RX接SA818的TX,实现双向AT指令通信。模块的PTT(发射键控)、音频输入输出等信号则通过其他GPIO控制。
2.3 外围电路:不止于连接,更是优化与防护
主板PCB的设计体现了从原型到产品的工程思维。
- 低通滤波器(LPF):这是射频设计中至关重要的一环。SA818模块输出的信号并非纯净的正弦波,会包含高次谐波。这些谐波如果发射出去,可能会干扰其他频段的合法业务(如航空、广播)。板上预留的陶瓷低通滤波器(如LFCN-490+)能有效衰减这些无用谐波,确保发射频谱的“干净”。选用不同截止频率的滤波器是为了匹配VHF或UHF波段,这是合规操作的必要步骤。
- 音频接口:3.5mm TRS音频输出孔允许连接耳机或有源音箱监听。同时,线路输入(MIC_IN)的设计非常巧妙,它允许音频来源二选一:既可以从ESP32的DAC引脚产生(用于发送数字音频,如CW电报音、APRS数据音调),也可以从扩展头外接麦克风。电路中的耦合电容和偏置电阻确保了信号电平匹配和直流隔离。
- 天线接口:SMA接口是业余无线电设备的常见标准,提供了可靠且低损耗的连接。使用RP-SMA还是SMA公头取决于你的天线接口。务必确保天线阻抗为50欧姆,且额定功率和频率范围覆盖你的使用频段。
- 扩展排针:将所有未使用的GPIO、音频、控制信号引出,是“黑客精神”的体现。这为后续添加GPS模块、传感器、第二个显示屏或连接外部控制器提供了无限可能。
3. 从零开始的完整组装与焊接实操
拿到散件后,按逻辑顺序组装能避免很多返工。建议遵循“先低后高,先小后大,先贴片后插件”的原则。
3.1 焊接前的准备与安全须知
工欲善其事,必先利其器。除了套件,你需要:
- 工具:一把温度可调(建议350°C)的烙铁,尖头或刀头均可。焊锡丝(0.8mm含松香芯)、吸锡带或吸锡器、镊子、放大镜或台灯、万用表。
- 安全:务必佩戴护目镜。焊接时细小的焊锡飞溅可能伤眼。保持工作区域通风良好,避免吸入松香烟气。
- 心态:这是精细活,耐心比手速更重要。如果某个焊点不理想,可以加热后用吸锡带清理重来。不要试图在未熔化的焊锡上堆更多焊锡。
3.2 分步焊接流程与技巧
第一步:焊接底部贴片元件(滤波器/0欧电阻)
- 将PCB有骷髅图形的一面朝下放置。找到标记为“L1”的滤波器位置。
- 技巧:先在PCB的一个焊盘上点上少量焊锡。用镊子夹住滤波器,将其一端对准已上锡的焊盘,用烙铁加热焊盘和元件引脚,使其归位。然后焊接另一端。最后,焊接滤波器两侧中间的接地引脚到旁边的大面积接地焊盘上,这需要较多的焊锡和热量,确保形成良好的热连接。
- 关于0欧电阻:如果你不安装滤波器,则需要用一颗1210封装的0欧电阻短接天线路径。焊接方法同电阻,注意只焊接两端的信号焊盘,中间的接地引脚空置。
第二步:焊接SA818模块这是最具挑战性的部分,因为它是 castellated hole(半孔焊盘)设计。
- 将模块准确对齐PCB上的轮廓和焊盘。可以用胶带轻微固定。
- 在模块一侧的所有半孔焊盘上涂抹适量的焊锡膏(非必需,但很有帮助)。
- 使用烙铁和较细的焊锡丝,逐个焊点进行焊接。方法是将烙铁头同时接触模块的金属化孔边和PCB焊盘,然后送入焊锡丝。焊锡会自然流满整个半孔,形成漂亮的弧形焊点。
- 检查三边所有的焊点,确保连接牢固且无桥接。模块底部的大焊盘用于机械加固和散热,如果条件允许,也建议用热风枪或大功率烙铁进行焊接。
第三步:焊接通孔元件(按键、音频座、SMA头)
- 按键:三个轻触开关没有方向性,放平按到底再焊接即可。
- 音频座:对准定位柱,先固定一个引脚使其不会掉下,调整至完全贴合PCB后再焊接所有引脚。
- SMA接头:这是受力件,焊接必须牢固。将其卡在PCB边缘,确保所有引脚(中心信号针和四个外壳接地脚)都对准焊盘。先焊接一两个接地脚固定位置,然后焊接中心信号针,最后完成所有接地脚。焊接接地脚时,烙铁温度可稍高,并确保焊锡完全浸润,形成饱满的焊点。
第四步:安装ESP32 T-Display模块
- 将两排排针分别焊接到T-Display模块和Fox Hunt主板上。关键技巧:在焊接T-Display这边的排针时,务必用钳子或指甲剪,将靠近复位按钮的5V引脚上的塑料底座剪掉一小截。这是因为T-Display底部该位置有一个贴片元件,如果不修剪,排针将无法插到底,导致模块倾斜无法安装。
- 将焊好排针的T-Display模块,有屏幕的一面朝向主板有按键的一面插入主板。确保USB-C口朝向主板外侧。然后从主板背面焊接固定排针。
- 通电前检查:这是最重要的步骤!用放大镜检查所有焊点,确保无桥接、无虚焊。特别是SA818模块和SMA头这些密集引脚处。使用万用表蜂鸣档,检查VCC与GND之间是否短路。确认无误后再连接USB线。
4. 软件开发环境搭建与基础功能验证
硬件组装完成后,需要通过软件赋予其生命。Arduino IDE是入门最快捷的途径。
4.1 开发环境配置详解
- 安装Arduino IDE:从官网下载并安装最新版。建议版本在1.8.x或2.0以上。
- 添加ESP32板支持:
- 打开IDE,进入
文件 -> 首选项,在“附加开发板管理器网址”中输入:https://espressif.github.io/arduino-esp32/package_esp32_index.json - 然后进入
工具 -> 开发板 -> 开发板管理器,搜索“esp32”,找到由“Espressif Systems”提供的包,点击安装。这个过程会下载所有必要的编译工具链和库,耗时可能较长。
- 打开IDE,进入
- 配置板型与参数:安装完成后,在
工具菜单下进行如下设置:- 开发板:选择 “ESP32 Dev Module”。(虽然我们用的是T-Display,但通用配置以此为准,特定显示驱动由库处理)。
- 上传速度:921600。这个高速率能加快编译上传,如果遇到上传失败,可尝试降至115200。
- CPU频率:240MHz (WiFi/BT)。
- Flash频率:80MHz。
- Flash模式:QIO。
- Flash大小:4MB (32Mb)。
- 分区方案:Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)。SPIFFS分区可用于存储网页、配置文件等。
- 端口:选择识别到的COM口(Windows)或 /dev/cu.usbmodemXXX (Mac)。
4.2 驱动显示与测试固件
为了验证ESP32和屏幕工作正常,我们先上传一个显示测试程序。
- 安装屏幕驱动库:在
工具 -> 管理库中搜索 “Adafruit ST7735 and ST7789”,由Adafruit开发,点击安装。安装过程中提示安装依赖库(如Adafruit GFX Library),务必全部同意安装。 - 上传测试代码:将项目提供的
graphicstest_T_Display.ino示例代码复制到新的Arduino项目中。这个代码初始化了ST7789屏幕驱动,并运行一系列图形测试(画线、填色、显示文字等)。 - 编译与上传:点击上传按钮。首次编译会较慢。上传成功后,T-Display屏幕应亮起并开始显示彩色测试图案。如果屏幕是白屏或闪烁,请检查:
- 代码中屏幕的引脚定义(
TFT_CS,TFT_DC,TFT_RST等)是否与你的T-Display版本匹配。可能需要参考LilyGO的GitHub仓库修改。 - 开发板选择是否正确,以及库是否安装成功。
- 代码中屏幕的引脚定义(
4.3 SA818模块的AT指令通信测试
在集成所有功能前,单独测试SA818模块与ESP32的串口通信是明智的。
- 硬件连接:确保SA818的VCC(3.8-5V)、GND已正确供电,并将它的TX、RX与ESP32的某个串口(如Serial2:GPIO16-RX, GPIO17-TX)交叉连接。
- 编写测试代码:创建一个新Sketch,使用
Serial2与SA818通信。void setup() { Serial.begin(115200); // 用于电脑端调试输出 Serial2.begin(9600); // SA818的默认波特率 delay(1000); Serial.println("Testing SA818..."); // 发送握手指令 Serial2.println("AT+DMOCONNECT"); } void loop() { if (Serial2.available()) { String response = Serial2.readStringUntil('\n'); Serial.print("SA818: "); Serial.println(response); } if (Serial.available()) { char cmd = Serial.read(); if (cmd == 's') { // 示例:设置频率到145.000 MHz,无亚音 Serial2.println("AT+DMOSETGROUP=0,145.0000,145.0000,0000,4,0000"); } } } - 观察结果:打开串口监视器(波特率115200),你应该能看到SA818回复“+DMOCONNECT:0”。这证明串口链路畅通,模块工作正常。你可以进一步尝试其他AT指令,如设置音量
AT+DMOSETVOLUME=4(音量级别0-8)。
5. 核心功能固件解析与自定义编程
基础测试通过后,我们就可以深入研究项目提供的核心固件,并理解如何对其进行定制。
5.1 NOAA气象电台接收机固件剖析
项目提供的NOAA_Receiver.ino是一个极佳的学习起点。它实现了多频道扫描和接收功能。
- 数据结构:代码使用两个数组来管理频道:
float frequencies[]存储频率(单位MHz),String channelNames[]存储对应的名称。这种设计清晰且易于扩展。 - 核心逻辑:
setup()函数中,初始化屏幕、串口,并调用setChannel()函数设置SA818到第一个频道。setChannel()函数是关键,它根据索引值,构造AT+DMOSETGROUP指令字符串。指令参数依次为:带宽(0=12.5kHz, 1=25kHz)、接收频率、发射频率、接收CTCSS(亚音)、发射CTCSS、发射亚音使能。对于纯接收,发射频率可设为与接收相同,亚音关闭。loop()函数中,不断检查按钮A是否被按下,按下则切换频道索引并重新设置频率,同时在屏幕上更新显示。- 音频从SA818的AF_OUT引脚输出,经过放大后直接驱动3.5mm耳机孔。ESP32的ADC(引脚38)也连接到此音频线,为未来实现音频电平显示或数字解调留下了接口。
- 自定义修改:
- 添加/修改频道:直接编辑两个数组即可。例如,添加本地业余无线电中继台频率:
frequencies[8] = 439.125;和channelNames[8] = "Local Repeater";,同时记得修改数组大小。 - 改变扫描逻辑:你可以将按钮C改为“扫描”功能,让设备在预设频道间自动停留几秒,监听是否有信号活动。
- 添加/修改频道:直接编辑两个数组即可。例如,添加本地业余无线电中继台频率:
5.2 “狐狸狩猎”发射机固件与合规性重点
Fox_Hunt_TX.ino固件将设备变成一个周期性发射信标的“狐狸”。在运行此代码前,你必须深刻理解并遵守无线电法规。
- 工作原理:固件让设备周期性地(例如每10秒)启动发射(拉高PTT引脚),并通过ESP32的DAC(引脚25)产生一个音频信号(通常是 Morse 电码发送你的呼号),然后关闭发射。这样,猎手们就能用定向天线寻找这个周期性信号。
- 绝对重要的合规设置:
- 呼号设置:代码中有一行
String callsign = "N0CALL";你必须将其改为你合法拥有的、所在国家无线电管理机构颁发的业余无线电呼号。这是法律要求,每次发射都必须标识台站。 - 频率选择:
setFrequency()函数中设置的频率,必须是你有权限使用的业余无线电频率。例如,在2米波段(144-148MHz),应选择非繁忙的频点,并遵守当地的波段规划。 - 发射功率:SA818模块输出约1W。确保你的天线能承受此功率,且整个系统在业余频段内杂散发射达标(这就是低通滤波器的作用)。
警告:在任何公共频率(如NOAA气象频率、应急频率、商用频率)上发射是非法且危险的。仅在你有合法执照和权限的业余无线电频段进行发射测试。
- 呼号设置:代码中有一行
- 安全增强建议:在代码中增加一个“使能开关”。例如,只有当设备检测到某个按钮被长按时,才进入发射模式。或者通过串口命令来激活发射,避免意外触发。
5.3 扩展编程:将想法变为现实
扩展排针打开了创新的大门。以下是几个扩展方向:
- 添加GPS模块:连接一个如NEO-6M的GPS模块到扩展头的UART引脚。你可以修改“狐狸”固件,使其在发射的音频中不仅包含呼号,还包含Morse电码编码的经纬度坐标,实现“可追踪的狐狸”。
- 信号强度指示(RSSI):SA818的
SQ引脚输出信号强度指示。你可以将其连接到ESP32的ADC引脚,在屏幕上绘制实时的信号强度条,这对于测向时判断信号强弱非常有用。 - 构建全功能手持电台:利用扩展口的
MIC_IN和LINE_OUT,外接一个带PTT按键的手咪,再配合频道旋钮编码器和菜单系统,你几乎可以构建一个自定义功能的数字手持对讲机原型。 - 物联网数据回传:利用ESP32的Wi-Fi功能,将接收到的无线电数据(如解码的APRS位置包)上传到网络服务器或MQTT broker,实现远程监控。
6. 系统集成测试、常见问题与深度排错指南
将所有部分组合起来后,需要进行系统级测试。以下是在这个过程中你可能会遇到的问题及解决方法。
6.1 上电无反应或异常
- 现象:连接USB后,屏幕不亮,或ESP32无法被电脑识别。
- 排查:
- 检查电源:用万用表测量主板5V和3.3V对地电压是否正常。SA818模块需要约5V供电,电压不足会导致整个系统不稳定。
- 检查短路:再次仔细检查VCC和GND之间是否在焊接后意外短路,特别是SA818模块底部和排针周围。
- 检查T-Display安装:确认排针已完全插入并焊牢,特别是修剪过的5V引脚是否安装到位,没有因塑料残留导致接触不良。
- 尝试单独供电:如果怀疑USB供电不足,可尝试用外接的5V/2A电源通过排针的5V和GND引脚为整个系统供电。
6.2 屏幕显示异常
- 现象:白屏、花屏、闪烁或只有背光亮。
- 排查:
- 库和引脚配置:这是最常见的原因。确保安装了正确的
Adafruit ST7789库,并且代码中的引脚定义(TFT_CS,TFT_DC,TFT_RST,TFT_BL)与你的T-Display版本完全一致。查阅板子的原理图或示例代码。 - 电源干扰:屏幕驱动对电源噪声敏感。尝试在ESP32的3.3V输出和屏幕电源引脚之间加一个10-100μF的电解电容进行滤波。
- 接线虚焊:检查连接T-Display和主板的排针是否有虚焊。
- 库和引脚配置:这是最常见的原因。确保安装了正确的
6.3 无线电无接收或发射
- 现象:听不到任何声音,或者发射时对方收不到。
- 排查:
- 串口通信:首先用3.3节中的AT指令测试代码,确认ESP32能收到SA818的回复。如果无回复,检查TX/RX线是否接反,波特率是否设置为9600。
- 音频路径:接收无声时,检查3.5mm耳机孔是否焊好,耳机是否正常。可以用示波器或另一个音频输入设备(如电脑的麦克风输入)探测
LINE_OUT测试点是否有音频信号。发射无效时,检查MIC_IN线路是否有音频信号输入SA818。 - 天线:务必确保天线已正确安装!无线电设备在发射状态下绝对不能空载(即不接天线),这极易损坏SA818模块的功放管。使用假负载进行发射测试是最安全的选择。
- 频率与亚音:确认设置的频率在SA818模块的硬件支持范围内(VHF版约134-174MHz,UHF版约400-480MHz)。如果接收不到有亚音(CTCSS/DCS)的中继台信号,需要在
AT+DMOSETGROUP指令中设置正确的亚音编码。 - 电源不足:发射时电流可达1A以上,劣质USB线或电脑USB口可能无法提供稳定电流,导致系统复位或发射失败。使用外接电源并确保导线足够粗。
6.4 软件编译或上传错误
- 现象:编译时报错“找不到库”,或上传时卡住、失败。
- 排查:
- 库冲突:确保只安装了一个版本的ST7789库。有时Adafruit的库与TFT_eSPI等库冲突。如果遇到问题,尝试在
Sketch -> 引用库中管理,移除不必要或重复的库。 - 驱动问题:在Windows上,确保安装了正确的CP210x或CH340 USB转串口驱动(根据你的ESP32模块型号)。
- 上传模式:在上传代码时,有时需要让ESP32进入下载模式。对于T-Display,通常在上电瞬间或按复位键的同时,按住板上的“BOOT”按钮(如果有),再松开复位键,最后松开BOOT键。具体操作请参考你的模块手册。
- 空间不足:如果代码过大,可能会超过分配的SPIFFS分区或程序空间。在
工具 -> 分区方案中选择一个更大的方案,如“Huge APP”。
- 库冲突:确保只安装了一个版本的ST7789库。有时Adafruit的库与TFT_eSPI等库冲突。如果遇到问题,尝试在
7. 进阶应用:从测向原理到实战部署
理解了基础操作后,我们可以深入探讨其核心应用场景——无线电测向(狐狸狩猎)的原理与实践。
7.1 无线电测向的基本原理
测向的核心是确定无线电波到来的方向。最简单的方法是使用定向天线。
- 信号强度比较法:使用一个具有方向性的天线(如八木天线、偶极天线)。当天线主瓣对准信号源时,接收到的信号最强;当偏离时,信号减弱。通过旋转天线并观察接收机上的信号强度指示(RSSI),找到信号最强的方向。
- 多普勒测向:通过快速循环切换多个固定方向的天线,比较它们接收信号的相位差来计算来波方向,常用于专业设备。
- 本项目中的实现:本设备作为“狐狸”(信号源),其发射是各向同性的(使用全向天线)。猎手则需要使用带有定向天线的接收设备(可以是另一台改装后的本设备,连接一个外部定向天线),通过寻找信号最强的方向来逐步逼近隐藏的“狐狸”。
7.2 构建完整的“狩猎”系统
一次完整的狐狸狩猎活动需要双方设备。
- 狐狸端(发射端):运行
Fox_Hunt_TX固件。为了增加挑战性和实用性,可以进行以下优化:- 降低发射占空比:将发射间隔从10秒延长到30秒或更长,并缩短每次发射的时长(如只发呼号两次),增加寻找难度。
- 添加随机延迟:使发射时间不完全规律,防止猎手单纯通过计时定位。
- 结合传感器:通过扩展口连接温湿度传感器,将环境数据编码进Morse电码一起发射,增加趣味性。
- 猎手端(接收端):在
NOAA_Receiver固件基础上进行增强:- 集成RSSI测量:将SA818的
SQ引脚(信号质量指示,通常与信号强度相关)连接到ESP32的ADC引脚。在屏幕上实时显示RSSI的数值或条形图。 - 数据记录:结合GPS模块,记录在不同位置点收到的RSSI值和坐标,后期可导入地图软件,绘制信号强度热力图,辅助分析信号源的大致区域。
- 音频滤波与处理:通过ESP32的ADC采集音频信号,在数字域进行滤波(如带通滤波突出Morse电码音调),甚至尝试简单的自动解码,直接在屏幕上显示呼号。
- 集成RSSI测量:将SA818的
7.3 安全、伦理与社区参与
- 法规遵从:反复强调,在业余频段外发射是违法的。即使在业余频段内,也应遵守功率限制,避免干扰其他合法通信(如应急通信、卫星下行)。
- 活动组织:狐狸狩猎通常在公园、郊野等开阔地进行。组织者需事先勘察场地,确保安全,并避开敏感区域(如机场、军事设施附近)。活动前应明确告知所有参与者频率、发射间隔和呼号。
- 加入社区:业余无线电是一个全球性的爱好者社区。你可以通过本地业余无线电俱乐部(ARRL、CRAC等机构可查询)、在线论坛(如QRZ.com)或社交媒体群组,寻找同好,交流技术,甚至组织线下狩猎活动。分享你的项目改进,往往能获得宝贵的反馈和灵感。
这个由ESP32和SA818构建的无线电平台,其魅力在于它完美地平衡了“可接近性”和“可探索深度”。作为入门项目,你可以在周末完成组装并听到太空传来的气象广播;作为进阶平台,你可以持续数年挖掘其在软件定义无线电、应急通信、物联网边缘节点等领域的潜力。每一次成功的通联,每一个被破解的信号,都是对电磁波世界的一次亲手触摸。
