如果你做过小尺寸WiFi开发板的小项目,一定经历过这种尴尬:板子做得再精致,装进外壳、塞到墙角之后,信号掉得让人怀疑人生。拿到这块Adafruit TinyS3之后,我第一反应是它跟Unexpected Maker家的Tiny系列风格一脉相承,板子方方正正、元件排布极紧凑,但翻到侧面看到那个u.FL天线座的那一刻,我就确定这板子不是给"在桌面上连个WiFi"准备的,是给真正要装进壳体、跑远距离通信的物联网节点设计的。
这板子的来头不用多说:Unexpected Maker的Tiny系列在工程圈里有不少老粉丝,Adafruit 拿过来做适配推出,型号叫 TinyS3。核心是一颗ESP32-S3,保留了Tiny系列一贯的巴掌大小,同时板上带了BME280温湿度气压传感器、锂电池充电、原生USB和u.FL外接天线座。它特别适合可穿戴设备、环境监测节点、传感器网关,以及那些需要把天线从金属外壳里引出来的项目。这篇文章我就从硬件设计思路、开发环境、天线方案、选型对比和实际踩坑几个角度,把这块板子讲透。
1. 为什么一块"小不点"板子要留u.FL天线座
1.1 小尺寸开发板的天线困局
市面上的小型开发板,天线方案无非三种:PCB天线、陶瓷贴片天线,或者干脆不给你天线。PCB天线成本低,大部分便宜的ESP8266板子都是这种,但它对环境异常敏感——手一碰、靠墙一放、塞进金属盒里,信号立刻掉几个数量级。陶瓷贴片天线好一些,但本身是朝一个方向辐射的定向天线,用在可穿戴设备上,方向稍微不对,信号就忽强忽弱。
这个小尺寸板子最常见的使用场景是什么?塞进外壳。我把之前一个项目里用的温湿度节点从桌面挪到阳台的防水盒里之后,WiFi连接从稳定变成频繁掉线,原因就是外壳对2.4GHz信号的衰减太严重。这类问题不是换一个更好的路由器能解决的,是板子本身的天线方案决定了的。天线的辐射效率再高,旁边有金属外壳或大面积地平面干扰,一切都白搭。
1.2 u.FL到底解决了什么
u.FL这个接口,国内不少人也叫IPEX座,标准名称是IPEX MHF1,是一种微型射频同轴连接器,插头直径只有1.2mm左右,远远小于SMA那种螺母式接口。它本身不发射信号,它的价值在于:把天线的问题从"板上画的PCB天线"转变成"用户可以自由选择的外部天线"。
有了u.FL座,你可以用一根短短的IPEX转SMA馈线,把射频信号引出到外壳开孔处,再接一个2.4GHz鞭状天线或者吸盘天线。这样板子躲进壳子里,天线照样能伸出壳外竖起来,辐射方向和处理自由度完全不一样。还有些做产品原型的场景,外壳已经设计成金属的,板载天线根本没有工作空间,用u.FL外接天线几乎是唯一务实的选择。
对我个人来说,u.FL还带来一个附加好处:调试方便。板载天线是没法换的,坏了只能返修;u.FL天线可以拔插,测试的时候可以换不同增益的天线对比数据,量产前确定最优方案再固定下来。
1.3 Tiny系列的设计哲学
Unexpected Maker这个团队在设计Tiny系列时的思路很明确:尺寸做小,但该给的接口都要给。TinyS3延续了这种思路,在方寸之间集成了能想到的周边元件。这种"麻雀虽小五脏俱全"的思路,配合u.FL天线座,恰好覆盖了工程师做原型时最常踩的几个坑:体积、功耗、射频、传感器。
2. 硬件拆解:这块板子到底塞了什么
2.1 核心规格一览
先把一张规格清单放在前面,后文逐个讲为什么这些规格对我的项目有用。
| 项目 | 规格 |
|---|---|
| 主控 | ESP32-S3,双核Xtensa LX7,最高240MHz |
| 无线 | 2.4GHz WiFi 802.11 b/g/n,BLE 5.0 |
| Flash | 8MB |
| PSRAM | 2MB |
| 板载传感器 | BME280(温度、湿度、气压) |
| 天线接口 | u.FL(IPEX MHF1) |
| USB | USB-C,原生USB,支持UF2拖放固件 |
| 电源 | USB-C 5V,锂电池充电电路 |
| 其他 | 复位按键、启动按键、RGB LED、STEMMA QT/I2C连接器 |
2.2 每颗料都是为什么选的
ESP32-S3是近几年我比较喜欢的一款芯片,原因有三。第一,双核240MHz的性能在物联网级别里属于溢出状态,跑LVGL界面、做简单语音识别、跑TinyML模型都没问题。第二,它支持向量指令加速,做矩阵运算比上一代ESP32快不少。第三,它内置原生USB 1.1控制器,不需要外部USB转串口芯片就能跟电脑通信,这让开发体验好了很多。
8MB Flash加2MB PSRAM这个组合在这个尺寸的板子上很少见。很多小板上为了省空间,只给4MB Flash,连PSRAM都没有。TinyS3给了PSRAM,意味着你可以跑更大尺寸的LVGL界面或者更复杂的AI模型,不会被内存卡死。做图像相关项目时,PSRAM可以当帧缓冲用,摄像头输出的一帧图像直接放PSRAM,不用频繁搬运。
BME280是Bosch的老牌环境传感器,一颗芯片同时测温度、湿度和气压,精度在消费级里是公认的好。我以前做环境监测项目往往要额外买一颗BME280模块再飞线,TinyS3直接集成,省了一笔钱和一个外设的引脚占用。
2.3 布局与接口
TinyS3的引脚设计逻辑清晰,双排焊盘把几乎所有GPIO引出,方便直接焊排针插面包板。板上还有一颗RGB LED和两个按键:一个按键是BOOT,一个按键是RESET。BOOT键在刷固件的时候非常关键,按住BOOT同时复位,就能进入下载模式。
板上的STEMMA QT接口我也很看重。Adafruit家的一堆传感器模块可以直接通过STEMMA QT/ Qwiic排线连上去,不需要焊接,I2C地址冲突了也可以用跳线改。这意味着TinyS3不仅能作为独立节点,还可以作为一个小型I2C网关,挂载多个传感器。
3. 上手:从USB-C插上去到WiFi扫到网
3.1 先认识固件和bootloader
我第一次拿到这板子时,插上USB-C线,电脑很快就识别出一个UF2格式的U盘。这是因为Adafruit出厂默认预装了UF2 bootloader。UF2的好处是,刷固件不需要额外装驱动、不需要按什么组合键,把对应的uf2文件拖进U盘就行。
如果你只是想快速体验,可以直接去CircuitPython官网下载TinyS3的固件,拖进U盘重启,就能得到一个CircuitPython交互式终端。不过我自己的主力开发环境是Arduino IDE,后面的内容也会围绕Arduino展开。
3.2 Arduino环境下的板型选择与关键设置
Arduino IDE建议用2.x以上版本,在开发板管理器里面搜索esp32,安装Espressif官方包,版本3.x。安装完成后,在"开发板"菜单里搜索TinyS3,选择"Adafruit TinyS3"。
有几个设置项必须注意,否则很容易出现编译过但烧不进去的情况:
- Flash Size选择8MB
- PSRAM选择Enabled(OPI PSRAM)
- USB Mode选择Hardware CDC and JTAG
- USB CDC On Boot选择Enabled
- Arduino Runs On选择Core 1
这里有两点值得多说。USB CDC On Boot必须启用,因为这块板子没有独立USB转串口芯片,串口输出依赖芯片的CDC功能。如果不开启,烧录完成后串口监视器会一片空白。PSRAM选择Enabled则是为了把2MB PSRAM正确使能,不加这一项,运行一些需要大内存的库时会出现段错误。
3.3 第一段WiFi扫描代码
配置好开发环境后,我建议先写一个简单的WiFi扫描示例,确认板子收发没问题。新建一个Arduino工程,粘贴以下代码:
#include <WiFi.h> void setup() { Serial.begin(115200); delay(1000); Serial.println("TinyS3 WiFi Scan Start"); WiFi.mode(WIFI_STA); WiFi.disconnect(); } void loop() { int n = WiFi.scanNetworks(); Serial.println("scan done"); for (int i = 0; i < n; i++) { Serial.printf("%d: %s (%d dBm)\n", i + 1, WiFi.SSID(i).c_str(), WiFi.RSSI(i)); } Serial.println("---"); delay(10000); }打开串口监视器,波特率设115200,如果一切正常,每10秒会刷新一次周围的WiFi信号列表,每行会显示SSID、信道和RSSI。这个RSSI值很关键,后面测外接天线时要反复用到。
3.4 常见问题排查
我顺手整理几个这板子容易踩的坑。
- 电脑识别不到USB设备:先确认是不是数据线只有充电没有数据。USB-C线材坑很多,换一根确认过的数据线再试。
- 串口监视器没输出:检查USB CDC On Boot是否开启,检查串口波特率是否选对。
- 上传失败No Serial Port Received:按住BOOT键不要松手,点一下RESET,再松开BOOT,让板子进入下载模式,再试一次上传。
- 编译后提示Flash空间不足:看一下Flash Size是不是选成了默认的4MB,要改成8MB。
4. u.FL天线外接实战:工具、接法与信号变化
4.1 需要准备的天线配件
u.FL接口只是板上的插座,实际用的时候要自己配天线。常见搭配有两种:一是直接买一根带u.FL接头的小型2.4GHz天线,像很多WiFi模块板上用的那种软PCB天线;二是买一根u.FL转SMA的馈线,再接一个标准的SMA接口鞭状天线或吸盘天线。
我的建议是,调试阶段用第二种方案,因为SMA天线品类多、增益明确、好固定;产品化之后根据实际外壳空间再换成第一种小型天线。u.FL转SMA馈线长度别贪长,常见的15cm到30cm够用。馈线本身就是损耗器件,一米左右的线会有0.3到0.5dB的插入损耗,线越长越不划算。
4.2 接法拆解与操作技巧
u.FL插头是按压式的,安装时对准插座方向,用手指甲或镊子轻轻按下去,听到轻微"咔哒"一声就到位了。拔的时候千万不能直接拽线,要用镊子从侧面轻轻撬起插头边缘。这个接头的插拔寿命通常只有几十次,经常换来换去就容易接触不良。
连接顺序建议:先把u.FL头压在板子的插座上,再把SMA端拧到天线上,最后整体固定。不要先接天线再压u.FL,那样扭力容易把板上的小座带掉。
还有一个接线的隐藏技巧:馈线走线尽量远离板上的高频电路和其他信号线,尤其是不要贴着ESP32-S3的晶振和天线匹配区域走。射频信号在传输线里容易耦合,走线乱会让实际信号比预期弱不少。
4.3 我实测的信号变化
我在自己的办公室里做了个简单的对比测试。板子放在金属文件柜旁边,这是比较恶劣的射频环境,距离无线路由器大约10米,中间隔着两堵墙。
板载PCB天线状态下,串口打印的RSSI稳定在-72dBm到-76dBm之间,偶尔掉到-80dBm以下,ping包时延已经能感觉到不流畅。换上3dBi的SMA鞭状天线,把天线从柜子旁边挪到桌面外沿,RSSI立刻变到-60dBm左右,提升幅度接近12dBm。WiFi信号这东西是每3dB翻一倍信号强度关系,12dBm的差异相当于信号强度翻了十几倍,实际使用中这个差距非常明显。
后来又做了一个更接近真实场景的测试:把板子放进一个塑料防水盒里,天线从侧面开孔伸出。板载天线在盒子里时,连接几乎不可用;外接天线放在盒子外面,信号恢复到跟桌面测试差不多。对我来说,光这一个优势就足够选择带u.FL的版本了。
4.4 天线选择的几条规则
我总结了四条非常实用的选型规则,供你参考。
- 2.4GHz天线要选谐振在2.4GHz到2.5GHz频段的,别拿手机GPS天线或者433MHz天线来凑合。
- 增益不是越大越好。天线增益高意味着辐射更集中,方向性更强,如果设备经常改变方向,5dBi的全向天线反而不如2dBi的稳定。
- SMA接口天线如果不是焊接式的,一定要确认接口是RP-SMA还是SMA,两者公母相反,拧不上。
- 做产品原型时不推荐自己手工做天线,直接选用大厂量产的成熟天线型号,性能和认证都有保障。
5. TinyS3和同门的Tiny兄弟该怎么选
5.1 Tiny系列三代同堂
Unexpected Maker的Tiny系列迭代到今天,主要成员是TinyPico、TinyS2和TinyS3,再加上不同的天线版本,排列组合下来确实有点眼花。我列了一个表,方便你直观对比。
| 项目 | TinyPico | TinyS2 | TinyS3 |
|---|---|---|---|
| 主控 | ESP32-PICO-D4 | ESP32-S2 | ESP32-S3 |
| 核心数 | 双核 | 单核 | 双核 |
| USB | 普通UART桥接 | 原生USB OTG | 原生USB OTG |
| Flash | 4MB | 4MB | 8MB |
| 板载传感器 | 无 | 有(部分版本) | BME280 |
| 典型场景 | 老项目迁移、成熟方案 | 轻量单线程任务 | AI、LVGL、多任务 |
TinyPico是上一代产品,优点是生态成熟、资料多,性能在今天看也不算差。TinyS2是单核的S2,适合Task比较简单的项目,做USB键盘或USB MIDI类应用很好用。TinyS3在性能、内存和USB体验上都更进一步,是目前综合能力最强的选择。
5.2 按项目需求反推选型
我的选型思路一般是这样:先问自己三个问题。
第一,要不要WiFi和蓝牙同时工作?要的话选TinyS3,不需要的话S2的WiFi功能也够。第二,要不要跑界面或者做算法处理?要LVGL、摄像头、TinyML,无脑选TinyS3,2MB PSRAM在这种场景下价值太高。第三,要不要外接天线?如果你做的是可穿戴、封闭式外壳、远距离采集,优先选u.FL版本,哪怕多花一点钱;如果只是做桌面小摆件、教学demo,板载天线版本完全够用。
TinyS3还有一点对项目迭代很友好:同一块板子既能用Arduino开发,也能用ESP-IDF开发,还能刷CircuitPython和MicroPython。换软件方案不用换硬件,原型阶段省了很多事。
6. 真正做项目时我建议留意的坑
6.1 引脚复用要翻原理图
TinyS3的GPIO虽然引出不少,但并不是全都能随便用。板上的RGB LED、BME280传感器、启动按钮都会占用GPIO,STEMMA QT口的SCL和SDA也有固定引脚。如果你不看原理图,直接把一堆传感器挂到IO口上,很容易跟板载外设冲突,出现莫名其妙的不工作。
我的习惯是写代码前先打开Unexpected Maker官方原理图和Adafruit推出的引脚图,把默认占用的引脚标出来,选择空闲的引脚给外部设备用。
6.2 电池供电与低功耗的折中
这块板子带锂电池充电电路,直接接一个3.7V锂电池就能跑,这对可穿戴项目很友好。但要注意充电电流不算大,边充边跑WiFi大流量传输时,电压容易波动。低功耗模式下,ESP32-S3虽然可以进入深睡,但板上还有传感器、LDO、RGB LED等器件,这些元件的静态电流加起来也不会太理想。
做低功耗项目时,建议额外做一个MOS管开关来切断传感器电源,睡眠前把I2C和I/O口全部拉低或拉高,避免浮空引脚造成的漏电。
6.3 u.FL焊盘和天线区的物理保护
u.FL座虽然小巧,但焊盘强度一般,反复插拔或者受力拉扯会掉。做原型时尽量把板子固定在外壳内部,别让馈线悬空拽着板子。如果项目要震动或经常移动,可以用点热熔胶把u.FL座周围固定住,减少机械应力。
另外,天线区域的净空也很关键。虽然u.FL外部天线不受板载净空限制,但u.FL座旁边的走线和地平面依然会影响射频阻抗匹配。别在u.FL座正下方走高速信号线或铺一团碎铜,尽量让这个区域保持完整的地参考面。
6.4 散热与长时间稳定性
ESP32-S3双核跑满时,功耗不低,板子表面能感觉到明显温热。这在我跑一个图像识别任务时最明显,连续工作十分钟后触摸芯片区域已经很烫。长时间运行时建议不要超频,把CPU频率保持在240MHz以下即可。如果需要长期稳定跑在户外环境中,优先考虑加一个小的散热贴片,或者降低WiFi的TPC功率。
我自己的一个项目里,TinyS3承担着室外环境监测节点的工作,板子放在百叶箱里,外接天线固定在箱顶。它每五分钟上传一次温湿度、气压、WiFi信号强度数据,连续运行了一个多月没有掉线,稳得很。这批数据的可靠性,很大程度上要归功于那根外接天线——没有它,板子藏在箱子里根本达不到这个信号质量。
如果你正在做类似的项目,我对这块板的建议是:不要把它当成普通的ESP32-S3迷你板用,它的价值恰恰在u.FL外接天线这个细节点上。把天线从壳里拉出去,让板子专心做运算和采集,这样一套结构下来,信号问题基本不用再操心。