核心概念:为什么需要 Wi-Fi 模块?
标准的 Arduino 板(如 Uno, Nano)本身没有内置 Wi-Fi 功能,它们有串口、SPI、I2C 等通信接口,但没有 Wi-Fi 收发器。

我们需要一个“Wi-Fi 模块”作为“翻译官”和“网络适配器”,这个模块负责:
- 连接 Wi-Fi 网络:输入 Wi-Fi 名称和密码,建立与路由器的连接。
- 处理网络协议:将简单的串口指令(如
AT+CWJAP("MyWiFi","12345678"))转换成复杂的 TCP/IP 协议。 - 在互联网上通信:让 Arduino 能够发送 HTTP 请求、建立 TCP/UDP 连接等。
这个模块通过 串口 与 Arduino 主板通信,Arduino 通过串口发送指令给 Wi-Fi 模块,Wi-Fi 模块执行后将结果再通过串口返回给 Arduino。
常用硬件方案
根据你的需求和 Arduino 型号,主要有以下几种方案:
方案一:独立 Wi-Fi 模块(最经典、最灵活)
这是最常见和通用的方案,适用于任何带有串口的 Arduino。

- 代表模块:ESP8266 系列 (如 ESP-01, NodeMCU, Wemos D1 Mini)
- 工作原理:
- ESP8266 本身是一颗功能强大的微控制器,但它最常被用作一个“协处理器”(Co-processor)。
- Arduino 主板负责处理传感器数据、逻辑判断等核心任务。
- ESP8266 模块通过串口连接到 Arduino,专门负责 Wi-Fi 通信。
- Arduino 通过
SoftwareSerial库或硬件串口与 ESP8266 通信,发送 AT 指令。
- 优点:
- 灵活性高:可以搭配任何 Arduino 主板。
- 成本低:模块本身非常便宜。
- 缺点:
- 接线复杂:需要正确连接 VCC, GND, TX, RX, CH_PD/EN 等引脚。
- 需要编程两个设备:既要写 Arduino 的代码,也要配置 ESP8266(通常只需一次)。
方案二:自带 Wi-Fi 的开发板(最简单、最推荐)
这是目前最流行、最适合初学者的方案,它将微控制器和 Wi-Fi 模块集成在一块板上。
- 代表开发板:ESP8266 NodeMCU 或 ESP32 开发板
- 工作原理:
- 你不再需要两块独立的板子,NodeMCU 的核心就是 ESP8266 芯片。
- 你可以直接使用 Arduino IDE 对这块开发板进行编程,代码中直接包含 Wi-Fi 功能的库函数,无需再通过串口发送 AT 指令。
- 优点:
- 接线简单:通常只需要连接传感器和电源。
- 编程简单:使用熟悉的 Arduino 语法,Wi-Fi 相关功能被封装在库中(如
ESP8266WiFi.h)。 - 功能强大:ESP32 除了 Wi-Fi,还自带蓝牙。
- 缺点:
资源不如传统 Arduino Mega 那么丰富(但绝大多数项目足够用)。
对于绝大多数项目,强烈推荐从方案二(NodeMCU 或 ESP32)开始。
编程方法(以 NodeMCU 为例)
我们将使用最简单、最直接的方法:通过 HTTP GET 请求将数据发送到 Web 服务器。

步骤 1:环境准备
- 安装 Arduino IDE:如果你还没有,请先安装。
- 配置开发板管理器:
- 打开 Arduino IDE,进入
文件->首选项。 - 在“附加开发板管理器网址”中,填入以下 URL:
http://arduino.esp8266.com/stable/package_esp8266com_index.json - 点击“工具” -> “开发板” -> “开发板管理器...”。
- 搜索 "esp8266",找到 "esp8266 by ESP8266 Community",点击安装。
- 打开 Arduino IDE,进入
- 选择正确的开发板和端口:
工具->开发板->ESP8266 Boards->NodeMCU 1.0 (ESP-12E Module)。工具->端口,选择你的 NodeMCU 连接到的 COM 端口。
步骤 2:编写代码(连接 Wi-Fi 并发送数据)
这个例子将连接到你的 Wi-Fi,然后向一个免费的测试数据服务(httpbin.org)发送一个 HTTP GET 请求,并打印返回结果。
#include <ESP8266WiFi.h> // 引入 ESP8266 Wi-Fi 库
// ====== 请在这里填入你的 Wi-Fi 信息 ======
const char* ssid = "你的Wi-Fi名称"; // Wi-Fi 名称
const char* password = "你的Wi-Fi密码"; // Wi-Fi 密码
// =======================================
// 创建一个 WiFiClient 对象,用于发送 HTTP 请求
WiFiClient client;
// 定义要连接的服务器
const char* server = "httpbin.org";
const int httpPort = 80; // HTTP 默认端口
void setup() {
Serial.begin(115200); // 启动串口通信,用于调试
delay(10);
// 连接 Wi-Fi 网络
Serial.println();
Serial.print("正在连接到 ");
Serial.println(ssid);
WiFi.begin(ssid, password);
// 等待连接成功
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Wi-Fi 已连接!");
Serial.print("IP 地址: ");
Serial.println(WiFi.localIP()); // 打印分配给 NodeMCU 的 IP 地址
// --- 发送 HTTP GET 请求 ---
if (client.connect(server, httpPort)) {
Serial.println("服务器连接成功!");
// 发送 HTTP GET 请求
// 注意:这里的路径是 /get,httpbin.org 会返回你请求的详细信息
client.println("GET /get?message=HelloFromArduino HTTP/1.1");
client.print("Host: ");
client.println(server);
client.println("Connection: close");
client.println();
Serial.println("HTTP 请求已发送");
} else {
Serial.println("服务器连接失败!");
}
}
void loop() {
// 检查服务器是否有数据返回
while (client.available()) {
char c = client.read();
Serial.write(c); // 将服务器返回的数据打印到串口监视器
}
// 如果服务器断开连接
if (!client.connected()) {
Serial.println();
Serial.println("服务器已断开连接");
// 防止 loop 不断重连,可以在这里加入一些延时
while(1); // 程序停止在这里
}
}
步骤 3:上传与测试
- 将代码中的
ssid和password替换成你自己的 Wi-Fi 信息。 - 点击 Arduino IDE 的“上传”按钮。
- 上传成功后,打开“串口监视器”(右上角放大镜图标),设置波特率为 115200。
- 你会看到 NodeMCU 连接 Wi-Fi 的过程,以及最终从
httpbin.org服务器返回的 JSON 数据,其中包含了你发送的message参数。
进阶应用方向
一旦你掌握了基本连接,就可以探索更强大的物联网应用:
