news 2026/8/20 4:13:37

ESP8266 Pico WiFi HAT物联网开发实战:AT指令通信与稳定性优化

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ESP8266 Pico WiFi HAT物联网开发实战:AT指令通信与稳定性优化

1. 从零上手ESP8266 Pico WiFi HAT:为什么它依然是物联网开发的“瑞士军刀”?

如果你手头正好有一块树莓派Pico,又想让这个小巧的微控制器板子连上Wi-Fi,接入物联网的世界,那么ESP8266 Pico WiFi HAT绝对是一个绕不开的经典选择。尽管现在有性能更强的ESP32系列,也有更原生的Pico W,但这款基于ESP8266的扩展板凭借其极致的性价比、成熟的生态和稳定的表现,依然是很多开发者入门和快速验证想法的首选。它本质上是一个“二合一”的解决方案:树莓派Pico负责核心的业务逻辑和计算,而ESP8266则专职处理Wi-Fi连接和网络协议栈,两者通过串口(UART)进行通信。这种分工明确的架构,让你无需在Pico上耗费精力去实现复杂的网络驱动,就能快速构建出联网设备。今天,我就以一个老玩家的视角,带你从硬件连接到软件编程,手把手玩转这块板子,并分享一些官方文档里不会写的实战经验和避坑指南。

2. 硬件连接与供电:细节决定成败

拿到ESP8266 Pico WiFi HAT,第一步不是急着写代码,而是确保硬件连接万无一失。这块扩展板通常通过排针直接插在Pico的GPIO引脚上,看似简单,但有几个关键点不注意,后续的调试会让你头疼不已。

2.1 引脚对接与供电选择

最核心的连接是串口。ESP8266的TX(发送)引脚需要连接到Pico的RX(接收)引脚,反之,ESP8266的RX需要连接到Pico的TX。对于树莓派Pico,最常用的UART是UART0,对应的引脚是GP0(TX)和GP1(RX)。你的HAT板设计应该已经将这些连接固化好了,但你需要确认一下。通常,板子上会有丝印标明。

注意:务必确认你的HAT板设计是使用UART0。有些板子可能为了避开某些冲突,使用了UART1(GP4/TX, GP5/RX)。购买或使用前,最好找到对应的原理图或引脚定义图核对。

供电是另一个大坑。ESP8266在发射Wi-Fi信号时,瞬时电流可能达到200mA以上,而树莓派Pico的USB接口或3.3V线性稳压器可能无法提供如此稳定且充足的电流。供电不足会导致ESP8266反复重启、连接Wi-Fi失败甚至根本无法启动。

可靠的供电方案对比:

供电方案操作方法优点缺点与注意事项
独立供电使用一个外部的3.3V、1A以上的稳压电源,同时给Pico的VSYS引脚和HAT板的3.3V输入引脚供电。电流绝对充足,系统最稳定。需要额外的电源模块,布线稍复杂。
USB加强供电使用带电源适配器的USB Hub,或质量好、输出电流大的手机充电器,通过USB线给Pico供电。方便,一根线解决。依赖于USB电源的质量,劣质充电器可能仍会导致问题。
Pico直接供电仅通过Pico的3.3V引脚给HAT供电。最简单。极不推荐,在Wi-Fi活动时大概率会因压降导致系统不稳定。

我的经验是,对于学习和轻量级测试,一个输出稳定的5V/2A手机充电器配合Pico的USB口,通常能应付。但一旦你打算部署到实际环境,或者需要ESP8266频繁收发数据,独立供电是必须的。我曾在一个小型气象站项目里,因为偷懒只用USB供电,导致在雨天(Wi-Fi信号稍弱,模块会增大发射功率)设备频繁离线,换了独立电源后问题立刻消失。

2.2 启动模式与固件状态确认

连接好硬件和电源后,先别急着编程。我们需要确认ESP8266模块本身是好的,并且处于正确的启动模式。ESP8266一般有两个关键的操作模式:Flash编程模式正常运行模式。模式由GPIO0和GPIO2等引脚的上下拉状态决定。

对于已经烧录了AT指令固件或MicroPython固件的模块,在正常运行时,GPIO0应该被上拉(高电平)。你的HAT板应该已经做好了这部分电路设计。为了验证模块是否正常,我们可以进行一个简单的测试:

  1. 将Pico通过USB连接到电脑。
  2. 打开一个串口调试工具(如PuTTY、Arduino IDE的串口监视器或VS Code的串口插件)。
  3. 选择Pico对应的串口端口(如COM3, /dev/ttyACM0),波特率设置为115200(这是ESP8266 AT固件和MicroPython的默认波特率)。
  4. 给整个系统上电,观察串口输出。

如果看到类似ready或者一堆乱码后出现>符号,甚至是一段Python的提示符>>>,说明ESP8266已经启动并输出了信息。如果什么都没有,或者只输出一些乱码,可能需要检查:

  • 波特率:尝试其他常见波特率,如9600, 74880。
  • 接线:TX/RX是否接反。
  • 供电:用万用表测量一下ESP8266的3.3V引脚电压,在Wi-Fi尝试连接时是否跌落到3.0V以下。

3. 通信协议与AT指令集实战

绝大多数ESP8266 Pico WiFi HAT预装的是乐鑫官方的AT指令固件。这是一种非常经典的用法:Pico作为主机(Host),通过串口发送特定的文本指令(AT Command)给ESP8266(作为从设备),来控制其连接Wi-Fi、创建TCP连接、发送HTTP请求等。理解这个通信模型是玩转这块板子的基础。

3.1 AT指令通信模型解析

你可以把ESP8266想象成一个自带Wi-Fi功能的“智能模组”,而Pico是它的“大脑”。大脑通过“说暗号”(发送AT指令)来指挥模组干活。通信遵循一个简单的“请求-响应”模型:

  1. Pico发送指令:通过串口发送一条以AT开头,以\r\n(回车换行)结尾的字符串。例如:AT+CWMODE=1\r\n(设置Wi-Fi模式为Station)。
  2. ESP8266执行并回复:ESP8266收到完整指令后,执行相应操作,然后通过串口回复结果。回复通常也以\r\n结尾。
    • 成功OK\r\n
    • 失败ERROR\r\n或带有错误码的回复。
    • 数据返回:对于查询类指令(如AT+CWLAP扫描Wi-Fi),会先返回数据,最后跟一个OK\r\n

所有的网络数据(如接收到的网页内容)也会通过串口,以特定的格式发送给Pico。Pico的程序需要持续监听串口,根据返回的内容前缀(如+IPD,表示收到网络数据)来解析和处理。

3.2 核心AT指令流程与代码实现

下面,我们用一个完整的MicroPython例子,演示如何让Pico控制ESP8266连接Wi-Fi并获取一个网页内容。我们假设你已经在Pico上刷好了MicroPython固件。

步骤1:初始化串口首先,在Pico的MicroPython程序中,初始化与ESP8266通信的UART。

from machine import UART, Pin import time # 初始化UART0,波特率115200,TX=GP0, RX=GP1 # 务必确保你的HAT板连接的是这两个引脚 uart = UART(0, baudrate=115200, tx=Pin(0), rx=Pin(1)) uart.init(115200, bits=8, parity=None, stop=1, timeout=1000) # 设置1秒超时

步骤2:发送AT指令的辅助函数编写一个函数来发送指令并等待响应,这能简化后续操作。

def send_at_command(cmd, expected_response="OK", timeout=3000): """发送AT指令并检查响应""" print("发送:", cmd) uart.write(cmd + '\r\n') # 自动添加回车换行 start_time = time.ticks_ms() response = "" while time.ticks_diff(time.ticks_ms(), start_time) < timeout: if uart.any(): response += uart.read(uart.any()).decode('utf-8', errors='ignore') if expected_response in response: print("收到预期响应") return response # 如果遇到ERROR,也提前返回 if "ERROR" in response: print("指令执行错误:", response) return response print("指令超时,响应为:", response) return response

步骤3:连接Wi-Fi网络这是最关键的一步。需要依次设置模式、连接路由器。

# 1. 测试AT指令是否可用 response = send_at_command("AT") if "OK" not in response: print("ESP8266未响应,请检查硬件连接和供电!") # 可以尝试发送 AT+RST 重启模块 send_at_command("AT+RST") time.sleep(3) # 等待重启 # 2. 设置Wi-Fi模式为Station(客户端) # AT+CWMODE=1 是Station模式,=2是AP模式,=3是双模式 send_at_command("AT+CWMODE=1") # 3. 连接到你的Wi-Fi路由器 # 将 `YourSSID` 和 `YourPassword` 替换成你的实际信息 wifi_connect_cmd = 'AT+CWJAP="YourSSID","YourPassword"' response = send_at_command(wifi_connect_cmd, expected_response="OK", timeout=10000) # 连接可能需要较长时间 if "OK" in response: print("Wi-Fi连接成功!") else: print("Wi-Fi连接失败,请检查SSID和密码,或信号强度。") # 可以尝试用 AT+CWLAP 先扫描一下周围网络

提示:连接失败最常见的原因除了密码错误,就是信号太弱。ESP8266的天线性能一般,尽量让设备靠近路由器。如果AT+CWJAP一直返回失败,可以尝试在指令后加,30,30来指定重试次数和超时(如AT+CWJAP="SSID","PWD",30,30)。

步骤4:建立TCP连接并发送HTTP请求连接上Wi-Fi后,我们就可以访问互联网了。以获取一个公开的API数据为例。

# 4. 建立单连接模式(对于HTTP请求,通常用单连接就够了) send_at_command("AT+CIPMUX=0") # 5. 连接到某个服务器(例如 httpbin.org 的IP) # 先解析域名(如果需要),这里我们直接用IP server_ip = "54.175.219.8" # httpbin.org 的一个IP,可能会变 port = 80 connect_cmd = 'AT+CIPSTART="TCP","{}",{}'.format(server_ip, port) response = send_at_command(connect_cmd, expected_response="OK", timeout=5000) if "CONNECT" not in response and "OK" not in response: print("TCP连接失败") # 可以尝试用 AT+CIPDOMAIN 先解析域名 # 6. 准备发送HTTP GET请求 http_request = "GET /ip HTTP/1.1\r\nHost: httpbin.org\r\nConnection: close\r\n\r\n" # 告诉ESP8266要发送的数据长度 send_at_command('AT+CIPSEND={}'.format(len(http_request)), expected_response=">") # 看到 ‘>’ 提示符后,立即发送数据 uart.write(http_request) time.sleep(1) # 等待数据发送和响应 # 7. 读取返回的HTTP响应 response_data = "" start_time = time.ticks_ms() while time.ticks_diff(time.ticks_ms(), start_time) < 5000: # 等待5秒接收数据 if uart.any(): chunk = uart.read(uart.any()).decode('utf-8', errors='ignore') response_data += chunk # 如果响应中包含数据包结束的提示,可以提前退出 if "CLOSED" in chunk or "SEND OK" in chunk: break print("收到的HTTP响应:") print(response_data) # 8. 关闭TCP连接 send_at_command("AT+CIPCLOSE")

这段代码是一个最基本的演示。在实际项目中,你需要更健壮地解析+IPD开头的行来获取网络数据,并处理各种异常情况。

4. 进阶应用:MQTT客户端实现与稳定性优化

当你掌握了基础的HTTP连接后,物联网项目更常用的协议是MQTT。ESP8266的AT指令也支持MQTT,但配置起来稍显繁琐。下面我们聊聊如何实现一个简单的MQTT客户端,并分享几个提升长期运行稳定性的关键技巧。

4.1 使用AT指令连接MQTT Broker

假设我们使用一个公共的MQTT Broker:test.mosquitto.org。我们需要完成连接、订阅主题、发布消息几个步骤。

# ... 省略之前的Wi-Fi连接代码 ... # 1. 设置MQTT用户配置(根据Broker要求,可能不需要) # send_at_command('AT+MQTTUSERCFG=0,1,"clientid","username","password",0,0,""') # 2. 连接MQTT Broker # 参数:链接ID(0), 协议类型(4=MQTT over TCP), 域名, 端口, 保活时间, 清除会话 mqtt_connect_cmd = 'AT+MQTTCONN=0,"test.mosquitto.org",1883,60,1' response = send_at_command(mqtt_connect_cmd, expected_response="+MQTTCONNECTED:0,0", timeout=10000) if "+MQTTCONNECTED" not in response: print("MQTT连接失败:", response) # 3. 订阅主题 subscribe_cmd = 'AT+MQTTSUB=0,"pico/status",1' # QoS=1 send_at_command(subscribe_cmd) # 4. 发布消息到主题 message = '{"temp": 25.6, "humidity": 60}' publish_cmd = 'AT+MQTTPUB=0,"pico/sensor","{}",1,0'.format(message) send_at_command(publish_cmd) # 5. 在主循环中,监听来自Broker的消息 # ESP8266收到消息后,会通过串口发送 +MQTTSUBRECV: 格式的数据 # 我们需要持续读取串口并解析 while True: if uart.any(): raw_data = uart.read(uart.any()).decode('utf-8', errors='ignore') if "+MQTTSUBRECV:" in raw_data: # 解析消息,格式如:+MQTTSUBRECV:0,pico/status,5,hello parts = raw_data.strip().split(',') topic = parts[1] msg_len = int(parts[2]) # 实际消息可能在后续的数据包中,这里简化处理 print(f"收到主题 [{topic}] 的消息") # 也可以处理其他AT事件,如连接断开 +MQTTDISCONNECTED time.sleep(0.1)

4.2 长期运行稳定性优化技巧

基于串口AT指令的方案,在长期运行中可能会遇到连接断开、指令无响应等问题。以下是几个经过实战检验的优化点:

1. 实现心跳与看门狗机制:ESP8266的网络连接可能因路由器重启、信号波动而断开。Pico端需要定期检查连接状态,并在断开时重连。

def check_wifi_connection(): """检查Wi-Fi连接状态""" response = send_at_command("AT+CWJAP?", expected_response="+CWJAP:", timeout=2000) if "+CWJAP:" in response and "No AP" not in response: return True else: print("Wi-Fi已断开") # 尝试重连 send_at_command('AT+CWJAP="YourSSID","YourPassword"', timeout=10000) return False # 在主循环中,每隔30秒检查一次 last_check = time.ticks_ms() while True: # ... 处理其他任务 ... if time.ticks_diff(time.ticks_ms(), last_check) > 30000: check_wifi_connection() last_check = time.ticks_ms()

对于Pico本身,为了防止程序跑飞,可以利用Pico内部的看门狗(WDT)。

from machine import WDT wdt = WDT(timeout=8000) # 8秒看门狗 # 在主循环中定期喂狗 while True: # ... 你的主要逻辑 ... wdt.feed() time.sleep(1)

2. 串口数据流的健壮性解析:AT指令的回复和数据可能不是一次性完整到达的,可能会被拆分成多个串口数据包。我们的读取函数需要具备“拼接”能力。此外,ESP8266可能会主动上报一些信息(如WIFI DISCONNECTED),我们的解析器需要能处理这些“异步事件”。

一个更健壮的读取循环示例:

buffer = "" while True: if uart.any(): chunk = uart.read(uart.any()).decode('utf-8', errors='ignore') buffer += chunk # 按行处理缓冲区 while '\n' in buffer: line, buffer = buffer.split('\n', 1) line = line.strip() if not line: continue # 处理不同类型的行 if line.startswith('+IPD,'): # 处理网络数据 pass elif line.startswith('+MQTTSUBRECV:'): # 处理MQTT消息 pass elif line == 'WIFI DISCONNECTED': print("Wi-Fi断开,触发重连逻辑") # 设置重连标志 elif line == 'OK' or line == 'ERROR': # 这是上一条AT指令的同步响应,可以由专门的指令等待逻辑处理 pass else: # 其他信息,打印出来便于调试 print("UART:", line) time.sleep(0.01) # 短延时避免CPU占用过高

3. 电源与复位管理:如果发现ESP8266偶尔会“死机”,完全无响应,除了检查供电,可以在Pico上用一个GPIO引脚连接ESP8266的复位(RST)引脚。当检测到长时间无响应时,Pico可以主动拉低这个引脚一段时间(如100ms),来硬件复位ESP8266。

esp_rst = Pin(2, Pin.OUT, value=1) # 假设GP2连接ESP8266的RST引脚,高电平为正常工作 def reset_esp8266(): print("正在复位ESP8266...") esp_rst.value(0) time.sleep(0.1) esp_rst.value(1) time.sleep(3) # 等待ESP8266重启完成

5. 替代方案与选型思考:AT固件 vs. MicroPython on ESP8266

使用Pico + ESP8266 AT固件是一种架构,但并非唯一。另一种思路是:直接在ESP8266上运行MicroPython,然后通过UART与Pico进行自定义的、更高效的数据通信(比如发送JSON格式的传感器数据,而不是AT指令)。我们来对比一下这两种方案。

方案对比表:

特性维度Pico (主控) + ESP8266 (AT固件)ESP8266 (运行MicroPython)
开发复杂度较低。Pico编程,ESP8266作为黑盒,只需处理AT指令字符串。较高。需要为ESP8266单独编写MicroPython程序,处理网络连接和协议。
资源占用Pico承担主要业务逻辑,ESP8266仅作网络透传。两者分工明确。ESP8266同时负责网络和部分逻辑,其计算和内存资源相对紧张。
通信效率较低。AT指令是文本协议,有解析开销,且交互步骤多(发送、等待回复)。较高。可以定义二进制或简洁的文本协议(如JSON),一次交互数据量更大。
灵活性受限。受限于AT指令集的功能,复杂网络操作(如WebSocket)实现困难。极高。可以直接使用MicroPython的socket、urequests等库,实现任何网络功能。
成本与功耗需要两块芯片,硬件成本稍高。功耗取决于两者之和。仅需ESP8266一块芯片,硬件成本最低。ESP8266功耗相对较低。
适用场景快速原型验证、对网络功能要求不复杂(HTTP/MQTT)、Pico有大量传感器或复杂计算时。对成本敏感、对通信效率有要求、项目功能相对聚焦的网络终端设备。

我的选型建议:

  • 如果你是初学者,或者想快速验证一个联网想法Pico + ESP8266 AT固件是上手最快、学习曲线最平缓的方案。你只需要学习MicroPython和AT指令集,无需深入ESP8266的编程细节。
  • 如果你的项目对成本极其敏感,或者设备体积要求严苛,那么直接使用ESP8266是更好的选择。一块ESP8266模组(如ESP-01S)仅需十元左右,就能完成联网和基础控制。
  • 如果你的项目需要复杂的网络交互(如同时作为Web服务器和客户端),或者对实时性要求高,那么AT指令的延迟和复杂性可能会成为瓶颈。此时,要么采用ESP8266运行MicroPython的方案,要么考虑升级到Pico W(内置Wi-Fi)或ESP32系列功能更强大的芯片。

对于手头已经有Pico和ESP8266 HAT的玩家,从AT指令方案入手,完全理解其通信模型和局限性后,再根据项目需求评估是否切换到更高效的方案,这是一个非常扎实的学习路径。

6. 常见问题排查与实战心得

最后,分享几个我踩过坑后总结出来的常见问题及其解决方法,希望能帮你节省大量调试时间。

问题1:发送AT指令后,永远收不到“OK”或任何回复。

  • 检查接线:这是第一要务。确认Pico的TX接到了HAT的RX,Pico的RX接到了HAT的TX。用万用表通断档检查一下。
  • 检查波特率:尝试不同的波特率(115200, 9600, 74880)进行通信。有时模块的默认波特率可能被更改过。
  • 检查供电:在ESP8266尝试连接Wi-Fi的瞬间,用万用表测量其3.3V引脚电压。如果电压跌落到3.0V以下,就是供电不足。立刻改用独立电源。
  • 检查启动模式:确认ESP8266的GPIO0引脚在上电时被拉高(通常HAT板已处理)。如果被意外拉低,它会进入固件烧录模式,不会执行AT指令。

问题2:Wi-Fi可以连接,但TCP连接经常失败或断开。

  • DNS问题:AT指令AT+CIPSTART直接使用域名时,依赖ESP8266内部的DNS解析。在网络环境不好时容易失败。最佳实践是:Pico先通过HTTP请求一个公共的DNS解析服务(如http://ip.cn)获取目标IP,或者使用固定的IP地址进行连接。
  • 服务器端口或防火墙:确认你连接的服务器IP和端口是否正确且开放。对于家用网络,确保路由器没有设置特殊的防火墙规则。
  • 缓冲区溢出:ESP8266的串口接收缓冲区或网络缓冲区可能溢出。确保Pico发送数据的速度不要过快,在发送大量数据前使用AT+CIPSEND指定长度,并等待>提示符。

问题3:程序运行一段时间后,ESP8266无响应,需要断电重启。

  • 电源噪声:电机、继电器等大电流设备工作时会产生电源噪声,干扰ESP8266。在ESP8266的电源引脚附近并联一个100uF的电解电容和一个0.1uF的陶瓷电容,可以极大提升稳定性。
  • 看门狗未启用:确保在你的Pico主程序中启用了看门狗,防止程序死锁。
  • AT指令状态机混乱:避免在上一条指令的响应未收到前就发送下一条指令。确保你的代码逻辑是严格的“发送-等待确认-下一步”。

个人心得:日志是你的最好朋友在开发过程中,务必把Pico和ESP8266之间所有的串口通信内容(包括你发送的和接收到的)都打印出来并保存到文件(如果Pico有存储空间)或者通过串口输出到电脑。当出现问题时,这份完整的日志是定位问题的唯一依据。我习惯在代码里设置一个全局的DEBUG变量,当它为True时,打印所有通信细节。这个习惯让我在解决无数诡异问题时事半功倍。

ESP8266 Pico WiFi HAT就像一把可靠的“瑞士军刀”,它可能不是功能最强大的,但绝对是让你快速切入物联网领域、理解设备联网基本原理的绝佳工具。从点亮第一个LED到将传感器数据上传到云端,这个过程所积累的经验,远比直接使用一个高度集成的方案来得宝贵。希望这篇长文能帮你扫清入门路上的障碍,顺利开启你的物联网项目。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/20 4:10:48

多轮对话智能体训练:课程学习与轮次级蒸馏技术实践

1. 项目概述&#xff1a;当多轮智能体遇上“课程式”蒸馏最近在折腾大语言模型驱动的智能体&#xff0c;特别是那些需要连续对话、执行多步任务的场景&#xff0c;比如客服对话、游戏NPC或者复杂的工具调用流程。一个核心痛点越来越明显&#xff1a;我们训练出来的大模型智能体…

作者头像 李华
网站建设 2026/8/20 4:09:38

游戏资源逆向实战:从LUC加密文件到可读LUA脚本的完整解析

最近在逆向分析一些游戏资源时&#xff0c;发现很多老游戏&#xff08;比如经典的《QQ飞车》&#xff09;使用了.luc这类加密或编译后的脚本文件。直接打开是乱码&#xff0c;给学习和研究带来了很大障碍。经过一番探索&#xff0c;我找到了一套相对完整的方案&#xff0c;可以…

作者头像 李华
网站建设 2026/8/20 4:08:48

Free-NTFS-for-Mac 选型与上手:一款开源工具如何让 Mac 读写 NTFS

Free-NTFS-for-Mac 选型与上手&#xff1a;一款开源工具如何让 Mac 读写 NTFS 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and ma…

作者头像 李华
网站建设 2026/8/20 4:07:29

Excel VBA插件开发实战:从宏到功能区按钮的一键工资条生成

这次我们来看一个能直接集成到 Excel 功能区、一键生成工资条的 VBA 插件项目。对于经常需要处理工资表的 HR、财务或行政人员来说&#xff0c;每个月手动插入空行、复制表头、调整格式来制作工资条&#xff0c;不仅繁琐耗时&#xff0c;还容易出错。这个由郑广学老师分享的 VB…

作者头像 李华
网站建设 2026/8/20 4:07:03

2026年C++大厂面试核心考点指南:从基础原理到细分岗位深度解析

最近在帮团队筛选简历和面试候选人&#xff0c;发现一个挺有意思的现象&#xff1a;很多C开发者简历上项目经验写得满满当当&#xff0c;但一到技术面&#xff0c;面对一些基础但深入的原理性问题&#xff0c;或者特定岗位方向的场景题&#xff0c;就容易卡壳。尤其是现在C的应…

作者头像 李华
网站建设 2026/8/20 4:04:30

2017概念车技术前瞻:从智能座舱到V2X通信的出行革命

1. 从“移动工具”到“移动智能体”&#xff1a;2017概念车的范式革命聊起2017年的概念车&#xff0c;很多人第一反应可能就是“自动驾驶”。确实&#xff0c;那一年&#xff0c;从底特律到日内瓦&#xff0c;从CES到法兰克福&#xff0c;各大厂商都在不遗余力地展示自己的自动…

作者头像 李华