贝博恩创新科技网

Arduino WiFi如何接入互联网?

核心概念:为什么需要 Wi-Fi 模块?

标准的 Arduino 板(如 Uno, Nano)本身没有内置 Wi-Fi 功能,它们有串口、SPI、I2C 等通信接口,但没有 Wi-Fi 收发器。

Arduino WiFi如何接入互联网?-图1
(图片来源网络,侵删)

我们需要一个“Wi-Fi 模块”作为“翻译官”和“网络适配器”,这个模块负责:

  1. 连接 Wi-Fi 网络:输入 Wi-Fi 名称和密码,建立与路由器的连接。
  2. 处理网络协议:将简单的串口指令(如 AT+CWJAP("MyWiFi","12345678"))转换成复杂的 TCP/IP 协议。
  3. 在互联网上通信:让 Arduino 能够发送 HTTP 请求、建立 TCP/UDP 连接等。

这个模块通过 串口 与 Arduino 主板通信,Arduino 通过串口发送指令给 Wi-Fi 模块,Wi-Fi 模块执行后将结果再通过串口返回给 Arduino。


常用硬件方案

根据你的需求和 Arduino 型号,主要有以下几种方案:

方案一:独立 Wi-Fi 模块(最经典、最灵活)

这是最常见和通用的方案,适用于任何带有串口的 Arduino。

Arduino WiFi如何接入互联网?-图2
(图片来源网络,侵删)
  • 代表模块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 NodeMCUESP32 开发板
  • 工作原理
    • 你不再需要两块独立的板子,NodeMCU 的核心就是 ESP8266 芯片。
    • 你可以直接使用 Arduino IDE 对这块开发板进行编程,代码中直接包含 Wi-Fi 功能的库函数,无需再通过串口发送 AT 指令。
  • 优点
    • 接线简单:通常只需要连接传感器和电源。
    • 编程简单:使用熟悉的 Arduino 语法,Wi-Fi 相关功能被封装在库中(如 ESP8266WiFi.h)。
    • 功能强大:ESP32 除了 Wi-Fi,还自带蓝牙。
  • 缺点

    资源不如传统 Arduino Mega 那么丰富(但绝大多数项目足够用)。

对于绝大多数项目,强烈推荐从方案二(NodeMCU 或 ESP32)开始。


编程方法(以 NodeMCU 为例)

我们将使用最简单、最直接的方法:通过 HTTP GET 请求将数据发送到 Web 服务器

Arduino WiFi如何接入互联网?-图3
(图片来源网络,侵删)

步骤 1:环境准备

  1. 安装 Arduino IDE:如果你还没有,请先安装。
  2. 配置开发板管理器
    • 打开 Arduino IDE,进入 文件 -> 首选项
    • 在“附加开发板管理器网址”中,填入以下 URL: http://arduino.esp8266.com/stable/package_esp8266com_index.json
    • 点击“工具” -> “开发板” -> “开发板管理器...”。
    • 搜索 "esp8266",找到 "esp8266 by ESP8266 Community",点击安装。
  3. 选择正确的开发板和端口
    • 工具 -> 开发板 -> 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:上传与测试

  1. 将代码中的 ssidpassword 替换成你自己的 Wi-Fi 信息。
  2. 点击 Arduino IDE 的“上传”按钮。
  3. 上传成功后,打开“串口监视器”(右上角放大镜图标),设置波特率为 115200
  4. 你会看到 NodeMCU 连接 Wi-Fi 的过程,以及最终从 httpbin.org 服务器返回的 JSON 数据,其中包含了你发送的 message 参数。

进阶应用方向

一旦你掌握了基本连接,就可以探索更强大的物联网应用:

  1. MQTT 协议

    • 是什么:MQTT 是一种轻量级的发布/订阅消息协议,专为低带宽、高延迟或不稳定的网络设计,它是物联网事实上的标准协议。
    • 如何工作:设备(如你的 Arduino)作为“客户端”连接到一个“MQTT 代理服务器”(Broker),发布消息到某个“主题”(Topic)或订阅某个主题来接收消息。
    • 优势:比 HTTP 更高效、更实时、更省电。
    • 常用代理服务器CloudMQTT, HiveMQ, 或自建 Mosquitto。
    • Arduino 库PubSubClient
  2. Blynk / Tasmota 等物联网平台

    • 是什么:这些平台提供了现成的手机 App、Web 界面和
分享:
扫描分享到社交APP
上一篇
下一篇