您好,登录后才能下订单哦!
密码登录
            
            
            
            
        登录注册
            
            
            
        点击 登录注册 即表示同意《亿速云用户服务条款》
        # 如何使用Arduino UART-WiFi模块做web服务器
## 一、前言
随着物联网技术的快速发展,将嵌入式设备接入互联网已成为普遍需求。Arduino结合UART-WiFi模块(如ESP-01S、ESP8266等)构建轻量级Web服务器,是实现设备远程控制和数据监控的经济高效方案。本文将详细介绍从硬件选型到代码实现的完整流程。
## 二、硬件准备
### 2.1 所需材料清单
| 组件 | 型号 | 数量 |
|------|------|------|
| Arduino主板 | Uno/Nano | 1 |
| UART-WiFi模块 | ESP-01S | 1 |
| 电平转换器 | 3.3V-5V | 1 |
| 杜邦线 | 母对母 | 若干 |
| 电阻 | 1kΩ/2.2kΩ | 各1 |
### 2.2 硬件连接示意图
```circuit
Arduino    ↔    ESP-01S
5V         →    VCC (需经电平转换)
GND        ↔    GND
TX (Pin3)  →    RX
RX (Pin2)  ←    TX (需经电平转换)
注意:ESP系列模块为3.3V供电,必须使用电平转换器保护模块!
#include <SoftwareSerial.h>
#include <ESP8266WiFi.h> // 需手动添加
| 指令 | 功能 | 示例 | 
|---|---|---|
| AT | 测试通信 | AT | 
| AT+CWMODE | 设置模式 | AT+CWMODE=3 (STA+AP) | 
| AT+CWJAP | 连接WiFi | AT+CWJAP=“SSID”,“password” | 
| AT+CIFSR | 查看IP | AT+CIFSR | 
SoftwareSerial espSerial(2, 3); // RX, TX
void setup() {
  Serial.begin(115200);
  espSerial.begin(115200);
  
  sendATCommand("AT+RST", 2000);
  sendATCommand("AT+CWMODE=1", 1000);
  sendATCommand("AT+CWJAP=\"SSID\",\"PASSWORD\"", 5000);
}
String sendATCommand(String cmd, int timeout) {
  espSerial.println(cmd);
  delay(timeout);
  while(espSerial.available()) {
    Serial.write(espSerial.read());
  }
}
void setupServer() {
  sendATCommand("AT+CIPMUX=0", 1000); // 单连接
  sendATCommand("AT+CIPSERVER=1,80", 1000); // 端口80
}
void loop() {
  if(espSerial.available()) {
    String response = espSerial.readString();
    if(response.indexOf("+IPD") != -1) {
      handleRequest(response);
    }
  }
}
void handleRequest(String request) {
  if(request.indexOf("GET /led=on") != -1) {
    digitalWrite(LED_PIN, HIGH);
    sendResponse("LED turned ON");
  } else if(request.indexOf("GET /led=off") != -1) {
    digitalWrite(LED_PIN, LOW);
    sendResponse("LED turned OFF");
  }
}
void sendResponse(String content) {
  String httpResponse = 
    "HTTP/1.1 200 OK\r\n"
    "Content-Type: text/html\r\n"
    "Connection: close\r\n\r\n"
    "<html>" + content + "</html>";
    
  String cmd = "AT+CIPSEND=" + String(httpResponse.length());
  sendATCommand(cmd, 1000);
  sendATCommand(httpResponse, 1000);
  sendATCommand("AT+CIPCLOSE", 500);
}
void handleRequest(String req) {
  if(req.indexOf("GET / ") != -1) {
    sendHTML(indexPage);
  } else if(req.indexOf("GET /config") != -1) {
    sendHTML(configPage);
  }
}
const String indexPage = "<h1>Home Page</h1><a href='/config'>Settings</a>";
String getSensorData() {
  int temp = analogRead(A0) * 0.488;
  return "Temperature: " + String(temp) + "°C";
}
启用密码保护:
sendATCommand("AT+CWSAP=\"MyAP\",\"password\",11,4", 2000);
限制访问IP:
sendATCommand("AT+CIPSTAMAC?", 1000); // 获取MAC白名单
OTA更新支持:
sendATCommand("AT+CIUPDATE", 30000);
启用TCP Keepalive:
sendATCommand("AT+CIPKEEP=1", 1000);
使用HTTP长连接:
Connection: keep-alive
压缩HTML内容:
String compressed = "<h1>Hi</h1>"; // 实际使用minify工具
// 集成DHT11温湿度传感器 + 继电器控制
void handleRequest(String req) {
  if(req.indexOf("GET /climate") != -1) {
    sendJSON("{\"temp\":"+readTemp()+",\"hum\":"+readHum()+"}");
  }
}
// Modbus RTU over WiFi
void handleModbusRequest() {
  if(request.indexOf("01 03 00 00 00 02") != -1) {
    sendHexResponse("01 03 04 00 7B 00 64");
  }
}
通过本文介绍的方法,您已掌握使用Arduino+WiFi模块构建Web服务器的核心技能。建议进一步探索: 1. 移植到ESP8266原生开发环境 2. 接入MQTT实现云端通信 3. 开发微信小程序控制界面
项目资源:完整代码库已上传GitHub(示例链接)
附录:相关AT指令速查表
| 指令 | 描述 | 
|---|---|
| AT+CIPSTART | 建立TCP连接 | 
| AT+CIPMODE | 设置传输模式 | 
| AT+CIPSTO | 设置服务器超时 | 
”`
注:实际实现时需要根据具体模块型号调整AT指令,建议先通过串口调试工具单独测试模块功能。本文以ESP-01S为例,其他型号可能需调整电压或引脚连接方式。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。