ESP8266WIFI AP模式驱动SG90舵机

ESP8266WIFI AP模式驱动SG90舵机,以及处理SG90旋转只能旋转90度或者只能旋转设定角度一半的问题。

安装arduino流程参考文档:

配置arduino参考文档1

配置arduino参考文档2

控制舵机参考文档:

控制舵机参考文档

舵机只能旋转一半角度问题处理方案:

舵机只能旋转一半角度问题处理方案


完整代码:

#include <Servo.h>  
#include <Arduino.h>
#include "ESP8266WiFi.h"
#include "ESP8266WebServer.h"
   
Servo myservo;  
ESP8266WebServer server(80);

void handleRoot() {
    String html = "<!DOCTYPE html>\n"  
    "<html lang=\"en\">\n"  
    "<head>\n"  
    "<meta charset=\"UTF-8\">\n"  
    "<style>\n"  
    "body {\n"  
    "  display: flex;\n"  
    "  flex-direction: column;\n"  
    "  justify-content: center;\n"  
    "  align-items: center;\n"  
    "  height: 100vh;\n"  
    "  margin: 0;\n"  
    "  font-family: Arial, sans-serif;\n"  
    "}\n"  
    "\n"  
    ".button-container {\n"  
    "  text-align: center;\n"  
    "  width: 100%;\n"  
    "  max-width: 300px;\n" /* 可选:限制按钮容器的最大宽度 */  
    "}\n"  
    "\n"  
    ".button {\n"  
    "  display: block;\n" /* 将按钮设置为块级元素,以便它们竖向排列 */  
    "  padding: 10px 20px;\n"  
    "  font-size: 16px;\n"  
    "  font-weight: bold;\n"  
    "  text-align: center;\n"  
    "  text-decoration: none;\n"  
    "  color: #fff;\n"  
    "  background-color: #007BFF;\n"  
    "  border: none;\n"  
    "  border-radius: 5px;\n"  
    "  cursor: pointer;\n"  
    "  margin: 10px 0; \n"
    "}\n"  
    "\n"  
    ".button:hover {\n"  
    "  background-color: #0056b3;\n"  
    "}\n"  
    "\n"  
    ".button:active {\n"  
    "  background-color: #004085;\n"  
    "}\n"  
    "</style>\n"  
    "</head>\n"  
    "<body>\n"  
    "<div class=\"button-container\">\n"  
    "<h2>WIFI控制开关</h2>\n"  
    "<a href=\"/on\" class=\"button\">旋转到180度</a>\n"  
    "<a href=\"/off\" class=\"button\">旋转到0度</a>\n"  
    "<a href=\"/fw\" class=\"button\">旋转到90度</a>\n"  
    "<a href=\"/xh\" class=\"button\">0-90-180</a>\n"  
    "</div>\n"  
    "</body>\n"  
    "</html>\n";  
    server.send(200, "text/html", html);  
}

void handleOn() {
    myservo.write(180); // 旋转到180度  
    server.sendHeader("Location", "/");
    server.send(303);
}

void handleOff() {
    myservo.write(0); // 旋转到0度
    server.sendHeader("Location", "/");
    server.send(303);
}

void handleFw() {
    myservo.write(90); // 旋转到90度
    server.sendHeader("Location", "/");
    server.send(303);
}

void handleXh() {
    myservo.write(0); 
    delay(3000);
    myservo.write(90);
    delay(3000);
    myservo.write(180);
    server.sendHeader("Location", "/");
    server.send(303);
}
  
void setup() {  
  Serial.begin(115200); //设置波特率
  myservo.attach(D4,500,2500);
  //myservo.attach(D4);  //定义引脚
  myservo.write(90); // 初始位置 
  WiFi.mode(WIFI_AP);  //设置WiFi模式
  WiFi.softAP("sgwifi", "12345678");  //设置名称,密码


  server.begin();  //开启服务
  server.on("/", handleRoot);
  server.on("/on", handleOn);
  server.on("/off", handleOff);
  server.on("/fw", handleFw);
  server.on("/xh", handleXh);
}  


void loop() {  
  server.handleClient();
}

最后附上几个安装包:

ESP8266部分包

提取码:C21A

简要安装流程:

1、安装arduino-ide_2.3.3_Windows_64bit.exe,一路默认即可。

2、修改arduino的语言等红框信息http://arduino.esp8266.com/stable/package_esp8266com_index.json

3、安装CH341SER.EXE(这个是CH340驱动,你如果不是CH340不用安装,找自己的对应驱动即可)。

4、安装8266_package_3.1.1_arduinome.exe离线开发包

5、选择红框这个:

6、选择端口:

然后这里就显示:

7、写完代码,上传,等编译和上传就可以了。

<think>嗯,用户想用ESP8266控制超声波传感器测距,然后联动SG90舵机。首先,我需要理清楚各个组件的连接方式和代码逻辑。ESP8266的GPIO引脚分配是关键,得确认超声波模块的Trig和Echo引脚,还有SG90的控制引脚。记得超声波模块一般用5V供电,但ESP82663.3V电平,可能需要分压电路,或者确保Echo引脚输出是3.3V的。SG90舵机的工作电压是4.8-6V,所以可能需要外部电源,同时PWM信号由ESP8266的GPIO提供。 然后代码部分,Arduino环境下需要包含ESP8266的库,比如ESP8266WiFi,不过这里可能不需要网络功能。超声波测距的代码需要发送Trig信号,然后测量Echo的高电平时间,转换成距离。注意单位转换,微秒到厘米。舵机控制需要用到Servo库,设置角度对应的PWM脉宽。主循环里可能需要根据距离调整舵机角度,比如距离越近,舵机转动角度越大,或者反之。 用户可能遇到的问题包括接线错误、电源不足导致舵机无法正常工作,或者代码中的引脚配置错误。需要提醒他们检查连接,确保电源足够,尤其是舵机部分不要直接从ESP8266取电。另外,超声波模块的测量精度可能受环境因素影响,比如障碍物的材质或温度变化,可能需要软件滤波,比如多次测量取平均。 生成相关问题的时候,要考虑用户可能的后续需求,比如如何提高测距精度、如何同时控制多个舵机、如何通过WiFi传输数据,或者添加其他传感器如光敏电阻实现更多功能。比如引用中提到光敏电阻用于判断昼夜,用户可能需要结合光敏和超声波实现更复杂的联动,比如光线暗时启动测距和舵机响应。不过用户当前的问题集中在ESP8266、超声波和SG90的联动,所以相关问题应围绕硬件连接优化、代码调试、应用场景扩展等。</think>### ESP8266控制超声波传感器与SG90舵机联动教程 #### 一、硬件准备 1. **核心设备**: - ESP8266开发板(NodeMCU或Wemos D1 Mini) - HC-SR04超声波传感器(测距范围2cm-400cm) - SG90舵机(工作电压4.8-6V,扭矩1.6kg·cm) 2. **接线方案**: ```markdown | 设备 | ESP8266引脚 | 备注 | |----------------|-------------|----------------------| | HC-SR04 Trig | D1 (GPIO5) | 触发信号输出 | | HC-SR04 Echo | D2 (GPIO4) | 需接1kΩ分压电阻到GND | | SG90信号线 | D5 (GPIO14) | PWM控制信号输出 | | 超声波VCC | 5V外接电源 | 避免开发板过载 | | 舵机VCC | 6V独立电源 | 需共地连接 | ``` #### 二、代码实现(Arduino IDE) ```cpp #include <Servo.h> #define TRIG_PIN 5 #define ECHO_PIN 4 #define SERVO_PIN 14 Servo myservo; float getDistance() { digitalWrite(TRIG_PIN, LOW); delayMicroseconds(2); digitalWrite(TRIG_PIN, HIGH); delayMicroseconds(10); digitalWrite(TRIG_PIN, LOW); long duration = pulseIn(ECHO_PIN, HIGH); return duration * 0.034 / 2; // 换算为厘米 } void setup() { pinMode(TRIG_PIN, OUTPUT); pinMode(ECHO_PIN, INPUT); myservo.attach(SERVO_PIN); Serial.begin(115200); } void loop() { float distance = getDistance(); Serial.print("Distance: "); Serial.print(distance); Serial.println(" cm"); // 距离映射到舵机角度(示例:20cm对应0°,5cm对应180°) int angle = constrain(map(distance, 5, 20, 180, 0), 0, 180); myservo.write(angle); delay(500); // 控制刷新频率 } ``` #### 三、关键优化点 1. **电源管理**: - 建议使用独立电源为舵机供电(如18650电池组) - 在ESP8266舵机之间增加LC滤波电路 2. **软件滤波**: ```cpp // 添加滑动平均滤波 const int numReadings = 5; float readings[numReadings]; int index = 0; float filteredDistance() { readings[index] = getDistance(); index = (index + 1) % numReadings; float total = 0; for(int i=0; i<numReadings; i++) total += readings[i]; return total / numReadings; } ``` 3. **安全保护**: ```cpp if(distance < 2 || distance > 400) { // 超出量程范围 myservo.detach(); ESP.deepSleep(60e6); // 进入深度睡眠60秒 } ``` #### 四、典型应用场景 1. 智能垃圾桶自动开盖(检测手部距离控制开盖) 2. 安防系统障碍物报警联动 3. 自动化仓储的货物定位(需配合多传感器阵列) [^1]: 关于传感器联动的阈值设置参考了光敏传感器应用经验,通过软件参数调整可适应不同环境需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值