☰
ESP32-S3入门:Arduino IDE环境搭建、GPIO点亮与串口调试实战
2026/10/5 6:07:56 网站建设 项目流程

第一次拿到ESP32-S3-WROOM这块模组的时候,我其实是有点懵的:引脚多到让人眼花,板子上还藏着一颗小小的RGB灯,官方文档虽然详尽但新手根本不知道从哪看起。后来我用Arduino IDE把这块板子点亮、连上WiFi、再从串口里把调试信息一行行打印出来,整个过程走通也就花了一个多小时。这篇文章就是按我当时踩通的路径来写的,从硬件选型、环境搭建、GPIO点亮第一颗灯,到串口调试里的各种细节,全部是实测过的经验,希望能帮你少走点弯路。

这块板子比较适合两类人:一是以前玩过Arduino Uno、ESP8266的老朋友,想升级到带WiFi加蓝牙、性能更强的平台;二是做物联网原型验证的开发者,想在几天内把想法跑通而不是纠结底层寄存器。我会尽量把每个步骤里“为什么这么做”也讲清楚,毕竟光能复制代码不算会,知道背后的逻辑才是真玩转。

1. 先搞清楚ESP32-S3-WROOM是块什么样的板子

1.1 为什么选S3而不是老款ESP32

很多人问我,现在ESP32系列芯片一大堆,ESP32、ESP32-S2、ESP32-S3、ESP32-C3,到底选哪个?如果从Arduino开发的角度来挑,ESP32-S3是我目前最推荐的选择。

和经典ESP32相比,S3最大的变化是换成了双核Xtensa LX7架构,主频最高能到240MHz,内置512KB SRAM,比老ESP32的320KB SRAM大了不少。这意味着你在写复杂逻辑、跑大数组、做RTOS任务调度时,内存压力会小很多。我试过在老ESP32上同时跑WiFi、HTTP Server和一块ST7789屏幕,经常因为内存不足崩掉,换成S3之后再没遇到过这种问题。

另外S3还增加了一个对Arduino玩家非常友好的特性:原生USB。板子上的USB口可以直接当串口用,也可以模拟成键盘鼠标(USB HID),实测下来在开发环境调试阶段方便不少。而老ESP32的USB只是供电,串口必须依赖外部的USB转TTL芯片。S3还带向量指令集加速,虽然Arduino环境里很少直接用到,但跑一些轻量级机器学习推理的时候,性能确实比老ESP32高一截。

1.2 板级细节与外设速览

ESP32-S3-WROOM是乐鑫官方推出的模组,型号里的WROOM通常指带板载天线的封装。市面上常见的开发板是把这颗模组和USB转串口芯片、稳压电路、LED整合在一块小板上,插上Type-C线就能用。

硬件参数不用死记,但有几条建议先了解:

  • 双核240MHz LX7处理器,内置512KB SRAM和8MB PSRAM(部分模组型号带PSRAM,买的时候注意看丝印)
  • 2.4GHz WiFi 802.11 b/g/n,蓝牙BLE 5,不支持5GHz WiFi
  • 引脚丰富,大部分GPIO可以复用为UART、SPI、I2C、PWM、ADC
  • 部分引脚是Strapping引脚,比如GPIO0、GPIO3、GPIO46,上电时的电平状态会影响启动模式,外接电路时要谨慎

哪怕你已经很熟悉Arduino Uno,面对S3这颗芯片也要有个心理准备:它不是简单的“5V逻辑单片机”,而是跑在3.3V电平下的WiFi SoC。给传感器供电、接外设时,一定要记得电平匹配,不然容易烧引脚。

1.3 动手之前需要准备的硬件

别小看准备工作,我见过不少朋友拿到板子后发现没法用,原因常常不是板子坏了,而是线材不对。这里列一份清单:

  1. 一块ESP32-S3-WROOM开发板,优先选带串口芯片的版本(比如CP2102或CH340),调试起来省心很多
  2. 一根Type-C数据线,注意必须支持数据传输,很多充电线只能供电不能传数据,插上去电脑毫无反应
  3. 几根杜邦线,后续扩展传感器或者外设时会用到
  4. 一个面包板和几颗LED、电阻,用来做点亮实验

尤其要强调Type-C数据线这个坑。我工作室抽屉里翻出来的大半Type-C线都是纯充电线,插上开发板后设备管理器一片空白,我还一度以为是驱动问题,最后换了根线瞬间解决。所以你拿到板子第一件事,就是确认电脑能否正确识别到一个新的COM口。

2. Arduino IDE环境搭建:从安装到板包配置

2.1 安装Arduino IDE并配置ESP32板包

Arduino IDE 2.x是目前推荐使用的版本,相比老版1.8,编辑体验、自动补全、串口监视器都有了明显提升。去Arduino官网下载对应系统版本,安装过程一路默认就行,两个版本都可以用,但建议直接上2.x。

打开IDE之后,先别急着写代码,第一步是配置ESP32开发板支持包。因为Arduino IDE默认只支持自家AVR、ARM等系列板子,要支持ESP32-S3,需要手动添加“附加开发板管理器地址”。

具体操作路径:

  1. 打开Arduino IDE,进入“文件” -> “首选项”
  2. 找到“附加开发板管理器网址”,填入以下地址:
https://espressif.github.io/arduino-esp32/package_esp32_index.json
  1. 点击“确定”,然后打开“工具” -> “开发板” -> “开发板管理器”
  2. 在搜索框输入“esp32”,找到“esp32 by Espressif Systems”,点击“安装”

板包体积比较大,实测可能需要一段时间下载。如果网速很慢,可以参考下面我用的离线安装办法:直接用浏览器下载官方板包压缩包,手动解压到Arduino的hardware目录里,效果和在线安装完全一样。装完之后,重启IDE,这时候“开发板”菜单下就能看到ESP32系列了。

2.2 选对开发板型号:ESP32S3 Dev Module

配置完支持包之后,在“工具” -> “开发板”里找到“ESP32 Arduino”分组,然后选择“ESP32S3 Dev Module”。这个选项是通用选项,适用于绝大多数以ESP32-S3-WROOM为核心的开发板。

接下来是几个关键设置,直接影响烧录和运行:

  • USB CDC On Boot:建议选“Enabled”。这样板子的原生USB可以直接当作串口来用,不需要外接USB转串口芯片。但要注意,启用后烧录时板子可能不会自动进入下载模式,需要手动按住BOOT键操作,这点后面详细讲。
  • Upload Speed:默认921600就行,如果烧录老失败,改成115200试试,稳定性会好很多。
  • Flash Size:根据你板子实际Flash大小选择,常见的是4MB或8MB,选错一般也能跑,但会影响存储分区的分配。
  • Port:务必确认选中了正确的COM口,Windows下可以在设备管理器里查看“端口(COM和LPT)”下的设备。

这里的BOOT按键技巧值得单独拿出来说:如果你的板子在点击“上传”后一直卡在“Connecting...”,或者报错“No serial data received”,多半是芯片没有进入下载模式。最稳的办法是:按住板子上的BOOT键不放,点击上传,看到“Connecting...”出现后,另一只手快速按一下EN/RST复位键并松开,然后再松开BOOT键。实测这个“先按住BOOT,再点上传,中途按一下RST,最后松开BOOT”的操作顺序成功率最高。

2.3 驱动与端口识别:板子插上电脑没反应

插上开发板后,如果电脑完全没有反应,或者在设备管理器里看到一个带黄色感叹号的未知设备,大概率是USB转串口驱动没装好。

常见芯片对应的驱动:

  • CP2102/CP2104:去Silicon Labs官网下载最新的CP210x驱动
  • CH340:去芯片厂商官网或驱动站下载CH340驱动,这是国产芯片,驱动安装要注意区分32位和64位系统

装完驱动后重新拔插USB线,正常情况下设备管理器里会多出一个COM口。如果你看到的是“USB JTAG/serial debug unit”,说明S3的原生USB已经被识别了,这也可以当串口用,但和板载USB转串口芯片是两个不同端口。

这里分享一个区分技巧:板载USB转串口芯片驱动的设备名通常会包含“CP2102”或“CH340”字样,而原生USB枚举出来的设备名通常是“USB JTAG/serial debug unit”。如果你板子上两种方式都支持,优先用板载串口芯片那个端口烧录,兼容性更好。

3. 第一个程序:点亮LED并搞懂GPIO映射

3.1 最小代码结构:setup与loop里发生了什么

Arduino的程序结构对新手来说非常友好,只有两个核心函数:setup()和loop()。setup()在芯片上电后只会执行一次,一般用来初始化引脚模式、串口波特率、连接WiFi等一次性操作。loop()会反复循环执行,里面放主逻辑。

理解这两个函数是玩转ESP32-S3的第一步,因为很多问题都出在“该初始化的事放到loop里每次重复做”这种低级错误上。比如把WiFi.begin()放在loop里,就会导致反复重连、日志刷屏;而把串口波特率设置放在loop里,则可能让串口输出乱码甚至卡死。

先来看一个NodeMCU-ESP32-S3开发板的上手程序,功能是让板载RGB灯循环显示红绿蓝三色:

#define RGB_PIN 48 // 根据你板载WS2812实际连接的引脚修改 #include <Adafruit_NeoPixel.h> Adafruit_NeoPixel pixels(1, RGB_PIN, NEO_GRB + NEO_KHZ800); void setup() { Serial.begin(115200); pixels.begin(); Serial.println("RGB LED test start"); } void loop() { pixels.setPixelColor(0, pixels.Color(255, 0, 0)); pixels.show(); delay(1000); pixels.setPixelColor(0, pixels.Color(0, 255, 0)); pixels.show(); delay(1000); pixels.setPixelColor(0, pixels.Color(0, 0, 255)); pixels.show(); delay(1000); }

这里面有几个关键点:

  • 我用了Adafruit_NeoPixel库来控制RGB灯,因为大多数ESP32-S3开发板上的彩色LED其实是一颗WS2812可编程灯珠,不是普通LED,不能直接用digitalWrite控制
  • 不同厂家开发板的灯珠引脚不一样,有些是GPIO48,有些是GPIO40或GPIO38,最好查一下自己板子的原理图
  • 如果只是点亮一颗普通LED,直接把LED阳极接到限流电阻再接到GPIO脚即可

3.2 基于Arduino框架的GPIO操作与注意事项

ESP32-S3的GPIO操作和Arduino Uno非常像,pinMode()、digitalWrite()、digitalRead()这些函数都可以直接用。但有几条S3特有的坑,我实测都踩过:

第一条是关于3.3V电平。ESP32-S3的GPIO不支持5V输入,如果外接5V传感器,输出端一定要做电平转换,不然轻则读数错误,重则直接烧毁引脚。

第二条是Strapping引脚的限制。GPIO0、GPIO3、GPIO46在芯片上电时会采样电平状态来决定启动模式。如果你把设备直接接在这几个引脚上,可能在复位时导致芯片进入错误的启动流程。更稳妥的做法是:需要外接按键或开关时,优先选择非Strapping引脚,比如GPIO4、GPIO5、GPIO6等。

第三条是ADC的精度问题。S3的ADC是12位的,参考电压可配置,但实际采集时噪声比较大。如果拿它来做高精度电压测量,建议用外部ADC芯片,或者至少对采集值做多次平均滤波。

我们来看一个用串口打印模拟电压值的例子,这个程序同时也能帮你验证串口调试环境:

#define BATTERY_PIN 4 void setup() { Serial.begin(115200); pinMode(BATTERY_PIN, INPUT); } void loop() { int raw = analogRead(BATTERY_PIN); float voltage = raw * 3.3 / 4095.0; Serial.print("Battery raw: "); Serial.print(raw); Serial.print(" voltage: "); Serial.println(voltage); delay(500); }

这里有一个细节容易被忽略:analogRead返回的是0到4095之间的原始值,转换公式里的参考电压必须和实际ADC参考电压一致。如果你用的是外部参考电压,公式里的3.3也要改成对应值,否则算出来的电压永远是错的。

3.3 烧录失败的几个高频原因

我见过很多新手上手时卡在同样的几个问题上,这里直接排雷:

  • 端口未选中: 上传前没在“工具” -> “端口”里选对COM口,IDE会一直提示找不到设备。注意拔插USB线后端口名可能会变化,每次插线后都要重新确认。
  • Boot模式没进: 出现A fatal error occurred: Failed to connect to ESP32-S3时,优先尝试上面提到的BOOT+RST组合操作。
  • 线材问题: 如果经常一半卡死,或者烧录到一半失败,先排除USB线是否只能供电不能传数据。
  • 波特率过高: 有些开发板或USB转串口芯片在921600下不稳定,把“Upload Speed”改成115200往往能解决。
  • USB CDC On Boot设置不一致: 开启USB CDC后,串口监视器里会多一个端口,烧录用的端口和监视器用的端口可能是同一个也可能不是,容易搞混。最省心的做法是烧录和监视时都看着同一个端口。

4. 串口调试技巧:从打印日志到与上位机对话

4.1 Arduino IDE串口监视器要怎么用才不踩坑

串口是嵌入式开发最重要的调试手段,没有之一。不管板子运行得正不正常,先让它把状态打印出来,问题就能缩小一半。

Arduino IDE的串口监视器入口在“工具” -> “串口监视器”,或者直接点击右上角的放大镜图标。打开之后有三个关键设置:

  • 波特率:必须和代码里Serial.begin()设置的波特率一致。代码里如果写的是115200,监视器里就必须选115200,否则打印出来的全是乱码。
  • 行尾结束符:如果你用串口监视器向上位机发送数据,右下角的行尾选择会决定发送时是否附带换行符。程序里用Serial.readStringUntil('\n')接收时,这里要选“换行”或“换行和回车”。
  • 自动滚动:当打印内容较多时,建议关闭自动滚动,方便回看历史记录。

串口监视器最常见的问题就是乱码。除了波特率不一致之外,中文乱码也很常见。Arduino IDE的串口监视器默认以UTF-8编码显示,如果你的代码源文件保存编码不对,或者串口助手用一种编码接收、另一种编码显示,中文就会变成乱码。最省心的做法是:调试日志全部用英文或拼音,中文只在需要给用户看的信息里用。

另外建议在每次开机初始化时,在setup()里打印一行启动信息:

Serial.begin(115200); Serial.println("[BOOT] ESP32-S3 start, free heap: " + String(ESP.getFreeHeap()));

这样每次打开串口时,通过有没有打印这行就能快速判断芯片是否正常运行、内存还够不够用。

4.2 串口调试助手选型与基础使用

Arduino IDE自带串口监视器虽然方便,但功能比较基础。当你需要发十六进制数据、定时发送、打开多个端口、观察带时间戳的日志时,第三方串口调试助手会更顺手。

我常用并且推荐的工具主要有三个:

  • SSCOM:老牌串口调试助手,支持中英文收发、文件发送、定时发送,功能稳定,很多单片机工程师桌面上常年挂着它。
  • XCOM:界面简洁,支持十六进制和字符串双模式收发,打开速度快,适合快速测试。
  • COMTool:跨平台,支持Python扩展,还能显示波形图。如果你要做传感器曲线可视化调试,这个工具很好用。

选型建议:Windows下日常调试用SSCOM或XCOM都行;如果要在Mac或Linux上调试,优先用COMTool。不要贪多,一个工具用熟就好。

使用串口调试助手时,连接参数一般选择“115200,8,N,1”,意思是波特率115200、数据位8、无校验、停止位1。这是绝大多数串口设备默认的配置,ESP32这边也是。

这里分享一个很实用的调试场景:让ESP32-S3通过串口接收上位机指令。比如电脑端的串口助手发送?temp,板子收到之后返回当前温度值。这样的主从结构在实际项目中很常用,代码也很简单:

void loop() { if (Serial.available()) { String command = Serial.readStringUntil('\n'); command.trim(); if (command == "?temp") { Serial.println("current temp = 25.6C"); } else { Serial.println("unknown command"); } } }

注意代码里的trim()是用来去掉字符串结尾的换行符和回车符的,不然你明明发的?temp,因为带了\r\n,程序判断相等时会失败。这个细节我当年排查了很久才搞明白。

4.3 乱码、无法打开串口、数据丢帧:排查实录

串口调试过程中最常见的问题,我按实际出现频率整理成一张速查表:

现象常见原因处理方法
输出全是乱码波特率不一致确保Serial.begin()与监视器/助手选择一致
中文输出乱码编码不匹配日志用英文,或用支持UTF-8的串口助手
串口被占用无法打开上次未关闭端口或别的软件占用关闭所有占用端口的程序后重试,或者重启IDE
上传成功但没输出USB CDC On Boot导致串口映射不同尝试打开另一个端口,或在工具里把USB CDC改为Disabled再试
数据偶尔丢帧波特率过高或上位机处理太慢降低波特率,或者用缓冲区积累数据后再批量打印
板子上电后反复重启GPIO冲突或电源供电不足断开可疑外设,换一根短粗的USB线或外接电源

有一次我在调试一个温湿度传感器时,发现串口打印的数据每隔几秒就跳一次乱码,检查半天发现是杜邦线接触不良,传感器供电时断时续。这类硬件问题在洞洞板和面包板场景下特别常见,排查时先用万用表量一下供电电压是否稳定,再逐步排查代码逻辑。

4.4 用Serial Plotter把日志画成波形

Arduino IDE 2.x自带了一个被很多人忽略的功能:串口绘图器(Serial Plotter)。它可以把串口输出的数据实时画成曲线,用来调试传感器数值变化、PID输出、电机转速等连续变量非常直观。

使用方式很简单:代码里用Serial.println()输出一个数值,或者用逗号分隔输出多个数值,比如:

Serial.print(sensorValue); Serial.print(","); Serial.println(pwmOutput);

然后打开“工具” -> “串口绘图器”,选择同样的波特率,就能看到两条动态曲线。这个功能比盯着串口滚动数字直观得多,尤其在调试PID参数时,调节Kp、Ki、Kd的变化会直接反映在波形上。

我实测下来,串口绘图器在数据量不大时表现很好,但如果每秒打印几百行,绘图会明显卡顿。需要高频采样的时候,更推荐用COMTool自带的绘图功能,它会稳定很多。

5. 让板子联网:WiFi连接与HTTP请求实战

5.1 WiFi连接:让板子“上线”

ESP32-S3的核心能力是无线连接,ARDUINO环境下连接WiFi比原生ESP-IDF要简单太多。直接用官方WiFi库即可,不需要额外安装。

一个最简连接示例:

#include <WiFi.h> const char* ssid = "your_wifi_ssid"; const char* password = "your_wifi_password"; void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.print("[WiFi] Connecting"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); Serial.print("[WiFi] Connected, IP: "); Serial.println(WiFi.localIP()); } void loop() { delay(1000); }

这里有一个新手容易犯的错:把WiFi连接写在loop里。WiFi连接是一次性行为,放在loop里会导致反复断开重连。另外,连接超时时间也值得注意,如果WiFi信号弱,WiFi.begin()之后的while循环可能会一直等下去。建议加一个超时机制:

int retry = 0; while (WiFi.status() != WL_CONNECTED && retry < 30) { delay(1000); retry++; } if (WiFi.status() != WL_CONNECTED) { Serial.println("[WiFi] Connect timeout"); } else { Serial.println("[WiFi] Connected"); }

这样即使连不上,板子也不会卡死在连接流程里,后续代码还能继续执行。

5.2 一个简单的HTTP GET请求示例

连上WiFi之后,下一步自然是请求网络数据。拿一个不需要鉴权的HTTP接口举例,比如获取当前时间或天气信息。

使用HTTPClient库可以简化请求流程:

#include <WiFi.h> #include <HTTPClient.h> void setup() { Serial.begin(115200); WiFi.mode(WIFI_STA); WiFi.begin("your_wifi_ssid", "your_wifi_password"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(); } void loop() { if (WiFi.status() == WL_CONNECTED) { HTTPClient http; http.begin("http://worldtimeapi.org/api/ip"); int httpCode = http.GET(); if (httpCode > 0) { Serial.println(http.getString()); } else { Serial.printf("[HTTP] Request failed, error: %s\n", http.errorToString(httpCode).c_str()); } http.end(); } delay(10000); }

几点注意:

  • 上面这个接口是HTTP明文请求,如果是HTTPS接口,则需要处理证书验证,建议开发阶段先用HTTP,后续再补TLS配置
  • http.end()一定要调用,用来释放连接资源,否则长时间运行会出现内存泄漏
  • 请求频率不要太快,很多公开接口有频率限制,每10秒请求一次足够用了

实际项目里,你往往需要从JSON响应里解析字段,可以引入ArduinoJson库。软件包管理器的搜索框里输入“ArduinoJson”安装,然后配合deserializeJson()解析。这个库是全平台通用的,ESP32-S3上跑起来毫无压力。

5.3 内存与功耗贴士

ESP32-S3虽然比老ESP32内存大,但也不是无限用。WiFi协议栈、TLS加密、HTTP请求都会消耗大量内存,尤其是当你开了多个客户端连接时。

我用过一段时间之后总结了几个内存优化建议:

  • 大字符串常量用PROGMEM放到Flash里,不要全部堆在SRAM
  • HTTP响应体很大时,用Stream方式逐段读取,而不是一次性getString()存到String对象里
  • 用ESP.getFreeHeap()打印剩余堆内存,观察一段时间内的趋势,如果持续下降,多半存在内存泄漏

功耗方面,S3支持多种休眠模式,但Arduino默认没有启用。如果项目要电池供电,可以在空闲时调用esp_light_sleep_start()让芯片进入浅睡眠,唤醒后继续执行。实际测试中,浅睡眠能把电流从几十毫安降到几毫安,续航能提升一个量级。不过睡眠期间串口会断,调试时先别开省电功能。

6. 常见问题与排查技巧实录:一张速查表

这里的“常见问题”我从自己的实操中整理出来,不说教科书式理论,只讲我亲身踩过的坑和验证过的解法。

问题现象我试过有效的方法
板子插上没新COM口USB设备管理器里看不到设备先换数据线,再装CP2102/CH340驱动
烧录卡在“Connecting...”无法进入下载模式按住BOOT,点上传,按一下RST再松开BOOT
烧录成功但串口没输出串口监视器一片空白检查USB CDC On Boot,切换串口端口
WiFi连不上反复打印“Connecting...”确认密码和SSID,检查2.4GHz频段(不支持5G)
串口中文乱码中文显示为“??????”日志改英文输出,或用UTF-8编码的串口助手
外接传感器读数不准ADC值跳变厉害在analogRead前加延时,多次采样取平均
板子跑着跑着自动重启反复打印Boot信息检查电源电流,确认GPIO没有短路或冲突
代码编译报错“No such file or directory”缺库在库管理器里搜索并安装对应库

再单独讲一个高频坑:使用板载RGB灯的时候,如果忘记安装Adafruit_NeoPixel库,编译会直接报错。安装之后如果灯还是不亮,优先检查RGB引脚号,不同开发板的引脚差异很大。我手头三块ESP32-S3开发板,灯珠引脚分别是GPIO48、GPIO40和GPIO38,代码里写死引脚的话换块板子就废了。建议把引脚定义单独抽成一个宏,方便改。

另外还有一点是关于开发板型号的选择。如果你用的是类似合宙ESP32-S3、AirM2M等型号,工具菜单里的开发板名可能显示为别的选项,但只要核心是ESP32-S3,选“ESP32S3 Dev Module”一般都能正常工作。关键是把“USB CDC On Boot”和“Flash Size”这两个参数设置对,比纠结开发板名称更重要。

最后再分享一个串口调试的小技巧

串口调试这件事,设备端代码写得好不好,直接影响排查效率。我自己的习惯是:所有日志输出都带前缀标签,比如[WiFi]、[HTTP]、[SENSOR],这样刷屏时能快速过滤出关键信息。同时在关键事件点打印内存余量、时间戳或状态码,而不是单纯打印一句“OK”。

还有一个特别实用的小技巧:在调试阶段用Serial.println()打印出所有关键变量的值和单位,等程序稳定后再统一清理或加条件编译开关。比如这样:

#define DEBUG_ENABLE 1 #if DEBUG_ENABLE Serial.printf("[SENSOR] temp=%.2f C, humi=%.2f %%\n", temp, humi); #endif

这样在正式版里把DEBUG_ENABLE改成0就能关掉所有调试输出,不必一行行删除代码。这个方式对后期维护特别友好,我非常推荐你养成这个习惯。

如果你手头正好有ESP32-S3-WROOM开发板,建议照着这篇文章从上到下跑一遍:先把板点亮,再把串口打通,然后连上WiFi请求一个网络接口。这一套流程走完,你对Arduino IDE开发ESP32-S3的基本功就算打牢了。接下来想做什么项目,无非是往这个框架里填传感器、显示屏、电机驱动这些外设而已。等你真正跑通第一个联网案例时,那种成就感还是相当有诱惑力的。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询