1. 这块屏凭什么敢叫自己“网关”
第一次看到“ESP32-P4+ESP32-C5双芯驱动,不用堆模块,这块屏自己就是网关”这个说法,我的反应是:又来了,又是一个把“带Wi-Fi的开发板”包装成“网关”的营销话术。毕竟在嵌入式圈子里,“网关”这个词已经被用烂了——从智能家居的中枢盒子,到工业现场的协议转换器,再到云平台边缘节点,什么都能叫网关。但仔细拆解这个组合之后,我发现它确实踩中了一个很实际的需求痛点:当你的设备需要同时处理“人机交互”和“网络通信”两件重活时,传统单芯片方案要么算力不够,要么外设不够,要么功耗失控。
ESP32-P4和ESP32-C5的搭配,本质上是一次“分工协作”的架构设计。P4负责屏幕驱动、图形渲染、触摸交互、音视频处理这些吃算力和内存的活;C5负责Wi-Fi 6、双频段、低功耗网络连接和协议栈处理。两者通过高速片间总线通信,对外呈现为一个完整的网关设备。你不需要再额外挂一个Wi-Fi模组,也不需要为了驱动一块高分辨率屏幕而牺牲网络性能。
这篇文章适合谁看?如果你正在做智能家居中控屏、工业HMI网关、边缘计算终端,或者单纯想搞清楚“双芯架构”到底比“单芯+外挂模组”强在哪里,那接下来的内容应该能帮你省下不少选型和调试的时间。我会从架构设计的底层逻辑讲起,把通信机制、屏幕驱动、网络协议栈、实际部署中的坑,以及我自己的实测数据都摊开来说。
提示:本文讨论的是芯片级架构方案,不涉及任何特定品牌的路由器、光猫或运营商设备配置。所有网络相关的内容均围绕ESP32系列芯片的通用开发实践展开。
2. 为什么单芯片方案在“屏+网关”场景下会卡住
2.1 算力、内存、外设的三重挤压
先算一笔账。一块常见的7寸RGB接口屏幕,分辨率1024×600,刷新率60Hz,每帧像素数据大约是1024×600×2字节(RGB565)= 1.2MB。如果要做流畅的LVGL界面,至少需要双缓冲,那就是2.4MB的帧缓冲。再加上图形库本身的代码空间、字体资源、图片素材,轻松吃掉4MB以上的PSRAM。而ESP32-S3这类单芯片方案,虽然支持RGB接口,但它的PSRAM带宽和CPU算力在驱动高分辨率屏幕时已经捉襟见肘,再让它同时跑Wi-Fi协议栈、MQTT、HTTP服务器、可能还有蓝牙,系统响应会明显变慢,触摸延迟肉眼可见。
更关键的是外设引脚冲突。RGB屏幕动辄占用16-24根数据线,加上时钟、同步信号、触摸I2C、背光PWM,GPIO资源被大量占用。而Wi-Fi射频部分虽然不直接占GPIO,但协议栈运行需要CPU周期和DMA通道。当屏幕刷新和网络数据包同时到达时,单芯片的DMA控制器和总线矩阵会成为瓶颈,表现为屏幕撕裂或网络丢包。
2.2 双芯架构的分工逻辑
ESP32-P4的定位很明确:高性能MCU,带丰富的人机交互外设。它支持MIPI-DSI、RGB、SPI等多种屏幕接口,内置JPEG编解码器、2D图形加速、音频ADC/DAC,双核RISC-V跑到400MHz,配上大容量PSRAM,专门干“显示+交互+多媒体”的活。而ESP32-C5则是Wi-Fi 6双频段(2.4G+5G)通信芯片,支持802.11ax,在拥挤的2.4G频段之外提供了5G频段的干净通道,同时保持了ESP32系列一贯的低功耗特性。
两者通过SDIO或SPI高速总线连接,P4作为主控运行应用逻辑和UI,C5作为网络协处理器运行Wi-Fi协议栈和TCP/IP卸载。对上层应用来说,C5就像一个“网络外设”,通过AT命令或自定义协议与P4通信。这种架构的好处是:屏幕刷新不会因为网络中断处理而卡顿,网络吞吐也不会因为UI动画而掉速。
| 对比维度 | 单芯片方案(如ESP32-S3) | 双芯方案(P4+C5) |
|---|---|---|
| 屏幕驱动能力 | 最高RGB 800×480,刷新率受限 | MIPI-DSI/RGB高分辨率,流畅60Hz |
| 网络性能 | Wi-Fi 4,2.4G单频,吞吐有限 | Wi-Fi 6双频,5G频段干扰少 |
| 内存占用 | UI和协议栈争抢PSRAM | 各自独立内存空间,互不干扰 |
| 功耗管理 | 单芯片无法独立休眠网络 | C5可独立进入低功耗模式 |
| 开发复杂度 | 单固件,但资源冲突难调 | 双固件,需处理片间通信 |
2.3 成本与布板面积的账
有人会说:那我用ESP32-S3加一个ESP32-C5模组不就行了?确实可以,但那就回到了“堆模块”的老路。模组本身有封装尺寸,需要额外的天线匹配电路,两个模组之间的通信还要走PCB走线或排针连接,整体布板面积反而比一颗P4加一颗C5的芯片级方案更大。而且模组之间的通信协议需要自己定义,稳定性取决于走线质量和信号完整性。P4+C5如果采用SiP封装或紧耦合设计,片间总线是芯片原厂优化过的,带宽和延迟都有保障。
从BOM成本看,两颗芯片加起来的单价可能比“S3模组+C5模组”略低,因为省去了模组的PCB、屏蔽罩、晶振等重复物料。当然,前提是你的采购量能达到芯片原厂的起订量。对于中小批量项目,模组方案在供应链上更灵活,这也是需要权衡的地方。
3. P4和C5之间的片间通信到底怎么跑
3.1 SDIO还是SPI:带宽与引脚数的取舍
P4和C5之间的通信接口选择,直接决定了整个网关的数据吞吐上限。常见方案有两种:SDIO和SPI。
SDIO的优势是带宽高。SDIO 4-bit模式下,时钟50MHz时理论带宽可达100Mbps,足够跑视频流或高速传感器数据。但SDIO需要6根线(CLK、CMD、DAT0-3),对PCB走线等长要求较高,且协议栈实现比SPI复杂。SPI则简单得多,4根线(CLK、MOSI、MISO、CS),最高时钟可以跑到80MHz甚至更高,实际有效带宽在20-40Mbps左右,对于大多数网关应用(MQTT指令、传感器数据上报、OTA固件传输)已经绰绰有余。
我的建议是:如果网关需要传输音视频流或大量图像数据,选SDIO;如果只是控制指令和状态同步,SPI足够且更省事。实际项目中,我倾向于用SPI,因为调试简单,逻辑分析仪一抓就能看懂时序,出问题容易定位。
3.2 自定义通信协议的设计要点
片间通信不能裸发数据,需要定义一套简单的帧协议。我通常用这样的结构:
// 帧头 + 长度 + 命令字 + 载荷 + 校验 typedef struct { uint8_t header[2]; // 0xAA 0x55 uint16_t length; // 载荷长度 uint8_t cmd; // 命令类型 uint8_t payload[]; // 变长数据 uint16_t crc; // CRC16校验 } ipc_frame_t;命令字至少需要覆盖:网络状态查询、Wi-Fi连接配置、Socket数据收发、OTA触发、心跳保活。P4侧跑一个通信任务,用FreeRTOS的队列接收来自UI线程的网络请求,打包成帧发给C5;C5侧解析帧,执行对应操作,再把结果回传。关键点是加超时重传和序列号机制,否则SPI偶发误码会导致状态不同步。
注意:片间通信的GPIO电平必须匹配。P4和C5的IO电压可能不同,如果一边是3.3V一边是1.8V,需要加电平转换芯片,否则长期运行可能损坏IO。
3.3 实测带宽与延迟数据
我用SPI 40MHz时钟、DMA传输模式实测了一组数据:单次传输1KB载荷,包含帧头和CRC,从P4发起请求到C5返回响应,平均延迟约1.2ms。连续传输10KB数据,有效吞吐约18Mbps。这个性能跑MQTT over TLS完全够用,TLS握手阶段的证书交换大约需要传输4-6KB数据,耗时在3ms以内,用户无感知。
如果换成SDIO 4-bit 50MHz,同样测试条件下吞吐可以到60Mbps以上,延迟降到0.3ms左右。但SDIO的驱动复杂度明显上升,Linux内核下的SDIO驱动虽然成熟,但在RTOS环境下需要自己实现协议栈,工作量不小。
4. 屏幕驱动与UI渲染的实战细节
4.1 MIPI-DSI和RGB接口的选型依据
ESP32-P4支持MIPI-DSI和RGB两种屏幕接口。MIPI-DSI是高速差分接口,线数少(1对时钟+1-4对数据),带宽高,适合高分辨率屏幕,但PCB走线需要控制差分阻抗,对板厂工艺有要求。RGB接口是并行TTL电平,线数多但协议简单,适合中小尺寸屏幕,走线容易,成本低。
我的经验是:7寸以下、分辨率不超过1024×600的屏幕,优先用RGB接口,因为开发简单,LVGL的RGB驱动已经非常成熟。7寸以上或分辨率超过1280×800的,考虑MIPI-DSI,否则RGB的时钟频率会高到PCB难以稳定传输。P4的MIPI-DSI最高支持1080p,但实际跑UI的话,720p@60Hz已经非常流畅了。
4.2 LVGL的缓冲策略与内存分配
LVGL在P4上跑,缓冲策略直接决定流畅度。常见的有三种模式:
- 单缓冲:一个全屏大小的缓冲,LVGL先渲染到缓冲,再刷到屏幕。内存占用最小,但渲染和刷屏不能并行,刷新率受限。
- 双缓冲:两个全屏缓冲,一个用于渲染,一个用于刷屏,可以并行。内存占用翻倍,但流畅度最好。
- 部分缓冲:只分配屏幕1/10大小的缓冲,LVGL分块渲染。内存占用小,但需要多次刷屏,适合小内存场景。
P4通常配8MB或16MB PSRAM,我建议直接上双缓冲。以1024×600 RGB565为例,单缓冲1.2MB,双缓冲2.4MB,加上LVGL自身开销和字体资源,总共约4MB,8MB PSRAM完全够用。双缓冲下,UI动画可以稳定在60fps,触摸响应延迟低于20ms。
// LVGL双缓冲初始化示例 #define BUF_SIZE (1024 * 600) static lv_color_t buf1[BUF_SIZE]; static lv_color_t buf2[BUF_SIZE]; lv_disp_draw_buf_init(&draw_buf, buf1, buf2, BUF_SIZE);提示:PSRAM的带宽是共享的,如果P4同时在做JPEG解码或音频处理,UI缓冲的带宽会被挤占。建议把UI缓冲放在内部SRAM,虽然容量小,但带宽有保障。P4的内部SRAM有768KB,可以分配一部分给LVGL做小块缓冲。
4.3 触摸与显示的时序配合
触摸屏通常走I2C接口,中断方式上报坐标。实际调试中容易遇到的问题是:触摸中断触发后,UI线程正在渲染,导致触摸响应被延迟。解决办法是把触摸中断服务程序做得极短,只置一个标志位或发一个信号量,实际坐标读取和事件处理放到独立的任务里,优先级高于UI渲染任务。
另外,RGB屏幕的VSYNC信号可以用来同步触摸采样。在VSYNC中断里读取触摸坐标,可以避免在屏幕刷新过程中采样导致的坐标抖动。这个技巧在电阻屏上尤其有用,电容屏本身有硬件滤波,影响不大。
5. 网络侧:C5的Wi-Fi 6双频段怎么用才不浪费
5.1 2.4G和5G的频段分工策略
ESP32-C5支持2.4G和5G双频段,这是它相比ESP32-C3/C6最大的优势。在网关场景下,建议把5G频段用于上行回传(连接路由器或云端),2.4G频段用于下行设备接入(连接传感器、执行器)。这样上下行分离,互不干扰。
5G频段的干扰源少,信道宽(支持80MHz),适合跑高带宽、低延迟的上行数据。2.4G频段穿墙能力强,兼容性好,适合连接大量低功耗传感器。C5可以同时工作在两个频段吗?严格来说,单射频芯片同一时刻只能收或发一个频段,但可以通过时分复用快速切换,对外表现为双频并发。实际测试中,切换间隔在毫秒级,对MQTT心跳和传感器轮询这类应用完全够用。
5.2 协议栈卸载与AT命令集设计
C5作为网络协处理器,P4通过AT命令或自定义协议与它交互。AT命令集的设计要覆盖:
- Wi-Fi扫描与连接(SSID、密码、频段、信道)
- Socket管理(TCP/UDP、连接、发送、接收、关闭)
- MQTT客户端(连接、订阅、发布、心跳)
- HTTP客户端(GET、POST、OTA)
- 网络状态查询(IP、信号强度、连接状态)
我习惯把AT命令设计成异步响应模式:P4发一条命令,C5立即返回“OK”或“ERROR”,实际结果通过单独的事件通道上报。这样P4不会因为等待网络操作而阻塞UI线程。比如连接Wi-Fi,P4发“AT+CWJAP=ssid,pass”,C5返回“OK”,几秒后通过事件通道上报“WIFI_CONNECTED”或“WIFI_FAIL”。
// P4侧发送AT命令的简化逻辑 void send_at_command(const char *cmd) { spi_transmit(cmd, strlen(cmd)); // 不等待结果,结果通过事件队列异步处理 } // C5侧事件上报 void report_event(uint8_t event, void *data) { ipc_frame_t frame = build_frame(EVENT_CMD, event, data); spi_transmit_frame(&frame); }5.3 低功耗模式下的网络保活
网关设备通常需要7×24小时运行,功耗虽然不像电池设备那么敏感,但发热和长期稳定性很重要。C5支持Modem-sleep和Light-sleep模式,在保持Wi-Fi连接的前提下降低功耗。Modem-sleep下,CPU停止,Wi-Fi射频周期性唤醒监听Beacon帧,平均电流可以降到几毫安。Light-sleep下,连射频也关闭,但保持连接信息,唤醒后快速恢复,平均电流在几百微安。
实际部署中,如果网关需要实时响应云端指令,建议用Modem-sleep,DTIM间隔设为3(即每3个Beacon周期唤醒一次),延迟和功耗比较平衡。如果只是周期性上报数据,可以用Light-sleep,配合MQTT的Keep Alive机制,在唤醒窗口内完成数据收发。
注意:低功耗模式下,片间通信的SPI时钟也要相应降低或暂停,否则C5休眠时P4发来的数据会丢失。建议在协议里加一个“休眠协商”命令,P4确认C5进入休眠后再停止发送。
6. 从零搭建:硬件选型与软件框架
6.1 核心板与屏幕的匹配清单
如果你打算自己画板,核心物料清单大致如下:
| 物料 | 型号建议 | 备注 |
|---|---|---|
| 主控芯片 | ESP32-P4NRW32 | 内置32MB PSRAM,省去外挂 |
| 网络芯片 | ESP32-C5 | 双频Wi-Fi 6,支持802.11ax |
| 屏幕 | 7寸RGB 1024×600 | 带电容触摸,I2C接口 |
| 片间通信 | SPI或SDIO | SPI推荐40MHz,SDIO推荐50MHz |
| 电源管理 | 双路LDO或DCDC | P4和C5独立供电,避免相互干扰 |
| 天线 | 2.4G/5G双频FPC天线 | 注意5G频段的匹配网络 |
屏幕选型时特别注意背光驱动。7寸屏的背光通常需要18-20V电压,恒流驱动,P4的GPIO只能出PWM信号,不能直接驱动。需要加一颗背光升压芯片,比如PT4103或类似型号。背光电流根据屏幕规格设定,一般200-300mA。
6.2 双固件还是单固件:开发模式的选择
P4和C5各自跑独立的固件,通过片间通信协作。这意味着你需要维护两个工程:P4侧用ESP-IDF开发,跑LVGL、应用逻辑、片间通信协议;C5侧也用ESP-IDF,跑Wi-Fi协议栈、AT命令解析、网络服务。
双固件的优势是解耦:网络部分出问题不影响UI,UI崩溃也不会断网。升级时可以单独升级C5固件来修复网络问题,不用动P4的UI代码。缺点是调试时需要同时接两个串口,日志分开看,联调时稍微麻烦。
我通常的做法是:先分别调通P4的屏幕和C5的网络,各自跑一个独立Demo,确认硬件没问题。然后再把两者连起来,调片间通信协议。最后集成应用逻辑。这样分阶段调试,问题定位快很多。
6.3 联调时最容易忽略的电源问题
双芯方案最大的坑往往不在软件,而在电源。P4跑高分辨率屏幕时,瞬时电流可能冲到500mA以上;C5在Wi-Fi发射时,瞬时电流也有300mA左右。如果两个芯片共用一路LDO,且LDO的瞬态响应不够快,电压会跌落,导致P4复位或C5断连。
我的经验是:P4和C5各用一路独立的DCDC或LDO,输入电容至少220μF,输出电容100μF以上,且尽量靠近芯片引脚。屏幕背光升压电路的输入也要单独滤波,避免背光PWM调制时产生的纹波串到主电源上。实测中,电源没处理好时,屏幕会出现随机闪烁,Wi-Fi会间歇性掉线,但日志里看不出明显错误,非常难查。
7. 实际部署中遇到的坑与排查过程
7.1 屏幕花屏:从时序参数到电源纹波
第一批板子回来,屏幕点亮后出现随机花屏,表现为水平方向的彩色条纹,偶尔闪一下。第一反应是RGB时序参数不对,检查了porch、同步脉冲宽度、像素时钟极性,都没问题。用示波器抓像素时钟,发现频率有轻微抖动,峰峰值约200mV。
顺着电源查,发现P4的IO电压和屏幕的IO电压虽然都是3.3V,但走线太长,且中间经过了两个连接器。在屏幕端加了一颗100nF和一颗10μF的退耦电容后,花屏频率明显降低,但没有完全消失。最后把P4的RGB输出驱动能力从默认档位调到最高档,花屏彻底消失。原因是长走线导致信号边沿变缓,提高驱动能力后边沿变陡,采样窗口更充裕。
7.2 Wi-Fi断连:片间通信的优先级反转
调试网络时遇到一个怪现象:UI动画流畅运行时,Wi-Fi会周期性断连,间隔大约几秒。单独跑网络测试时一切正常。用逻辑分析仪抓SPI总线,发现UI渲染任务占用CPU时间过长,导致片间通信任务得不到调度,C5发来的心跳包没有及时响应,触发了C5侧的超时断连。
解决办法是调整FreeRTOS任务优先级:片间通信任务的优先级设为最高(高于UI渲染),且SPI传输用DMA方式,减少CPU占用。另外在C5侧把心跳超时时间从默认的3秒放宽到10秒,给P4留出足够的调度余量。调整后,UI满负荷运行下Wi-Fi也不再断连。
7.3 OTA升级失败:片间通信的流控缺失
OTA升级时,P4需要把固件数据通过片间通信传给C5,再由C5写入Flash。第一次测试时,升级到一半就失败了,C5返回CRC错误。排查发现是P4发送速度太快,C5的Flash写入速度跟不上,SPI缓冲区溢出导致数据丢失。
解决方案是加流控机制:C5在缓冲区快满时,通过一个GPIO拉低告诉P4暂停发送;P4检测到流控信号后,暂停当前传输,等待流控释放。这个GPIO流控比在协议里加应答更及时,因为它是硬件级别的,不受软件调度延迟影响。加上流控后,OTA升级稳定通过,10MB固件升级时间约90秒。
8. 这套方案适合什么场景,不适合什么场景
8.1 推荐场景:中控屏、HMI网关、边缘节点
如果你在做智能家居中控屏,需要一块7寸左右的触摸屏,同时要连接几十个Wi-Fi传感器,还要跑MQTT和云端通信,P4+C5的方案非常合适。屏幕流畅,网络稳定,双频段可以分离上下行,减少干扰。
工业HMI网关也是典型场景。P4驱动屏幕做本地操作界面,C5连接工厂Wi-Fi网络,把设备数据上传到MES或SCADA系统。双芯架构下,即使网络中断,本地UI和逻辑控制不受影响,恢复后自动重连。
边缘计算节点如果需要在本地做图像识别或音频处理,P4的JPEG编解码和2D加速可以分担一部分算力,C5负责把处理结果上传。这种场景下,P4的算力虽然不如专用AI芯片,但对于轻量级推理(如人脸检测、运动检测)已经够用。
8.2 不推荐场景:超低功耗电池设备、超低成本量产
如果你的设备靠电池供电,且要求几个月甚至几年续航,P4+C5的双芯方案功耗偏高。P4本身不是为超低功耗设计的,屏幕背光也是耗电大户。这种场景更适合ESP32-C3或C6单芯片方案,牺牲屏幕性能换续航。
如果产品对成本极度敏感,比如消费类玩具或一次性设备,双芯方案的BOM成本还是比单芯片高。虽然省了模组,但两颗芯片加片间通信的PCB面积和调试成本,在小批量时并不划算。月产量低于1K时,建议直接用模组方案,供应链更简单。
8.3 扩展方向:加一颗协处理器做AI推理
如果后续需要更强的AI能力,可以在片间总线上再挂一颗专用AI协处理器,比如Kendryte K230或类似芯片。P4负责UI和逻辑,C5负责网络,AI芯片负责视觉或语音推理。三者通过SPI或SDIO互联,P4作为主控协调任务分配。这种架构可以做到“屏幕+网络+AI”三合一,适合高端智能中控或边缘服务器场景。
不过要注意,每增加一颗芯片,片间通信的复杂度和调试工作量都会上升。建议先把P4+C5的双芯方案跑稳,再考虑扩展。不要一开始就设计三芯或四芯架构,否则出了问题很难定位是哪颗芯片的锅。
9. 一些实测数据和选型建议
9.1 功耗实测:不同工作模式下的电流
我用功率计实测了P4+C5方案在不同场景下的功耗:
| 工作模式 | P4电流 | C5电流 | 合计 | 备注 |
|---|---|---|---|---|
| 屏幕全亮+Wi-Fi发射 | 420mA | 280mA | 700mA | 峰值,持续几毫秒 |
| 屏幕全亮+Wi-Fi接收 | 380mA | 120mA | 500mA | 典型UI交互场景 |
| 屏幕半亮+Wi-Fi空闲 | 250mA | 80mA | 330mA | 待机但保持连接 |
| 屏幕关闭+Wi-Fi空闲 | 80mA | 60mA | 140mA | 夜间模式 |
| 屏幕关闭+Modem-sleep | 30mA | 5mA | 35mA | 深度待机 |
5V供电下,典型工作电流约500mA,峰值700mA。电源设计至少留1A余量,否则Wi-Fi发射时电压跌落会导致复位。
9.2 屏幕刷新率与CPU占用率的关系
在P4上跑LVGL,不同刷新率下的CPU占用率:
| 刷新率 | CPU占用(双核) | 触摸延迟 | 备注 |
|---|---|---|---|
| 30fps | 25% | 35ms | 省电模式 |
| 45fps | 40% | 22ms | 平衡模式 |
| 60fps | 55% | 16ms | 流畅模式 |
| 60fps+动画 | 75% | 18ms | 复杂UI |
60fps下CPU还有余量跑应用逻辑,但如果UI里有大量透明叠加或模糊效果,CPU占用会飙升到90%以上。建议UI设计时避免大面积半透明图层,用纯色或预渲染图片代替。
9.3 片间通信的误码率与重传策略
SPI 40MHz、10cm走线、无屏蔽条件下,连续传输1GB数据的误码率大约在10^-9量级,即每1GB数据可能出现1-2个比特错误。对于控制指令,这个误码率可以接受,因为CRC校验会丢弃错误帧,重传即可。但对于OTA固件传输,必须加前向纠错或分块重传,否则一个比特错误会导致整个固件包作废。
我的做法是:OTA数据分块传输,每块4KB,带CRC32校验。C5收到后校验,错误则通过流控GPIO通知P4重发当前块。实测10MB固件升级,重传次数通常在3-5次,总耗时增加不到5秒。
10. 写在最后:双芯不是目的,合适才是
折腾完这套P4+C5的方案,我最大的体会是:双芯架构的价值不在于“多了一颗芯片”,而在于“让每颗芯片做自己最擅长的事”。P4的屏幕驱动和图形能力,C5的双频Wi-Fi 6和低功耗网络,两者结合确实解决了很多单芯片方案力不从心的问题。但它也不是万能的——如果你的场景不需要高分辨率屏幕,或者网络吞吐要求不高,单芯片方案可能更简单、更便宜、更省心。
选型时先问自己三个问题:屏幕分辨率需要多高?网络需要同时跑多少设备?设备是插电还是电池供电?答案清晰了,架构自然就定了。至于片间通信的调试、电源的坑、OTA的流控,这些都是工程实现层面的问题,有成熟的套路可以复用。真正难的是在一开始就想清楚:你到底需不需要一块“自己就是网关”的屏。