这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 进阶任务3、通过手机远程控制舵机动作按压快门按钮

共6条 1/1 1 跳转至

进阶任务3、通过手机远程控制舵机动作按压快门按钮

菜鸟
2024-11-03 02:27:52     打赏

任务完成办法

1、ESP32 连接到wifi(SAT模式)
2、ESP32 开启web服务

3、ESP32通过前端传来的数据来驱动舵机(GET)

4、完成这个任务

(这个任务很奇怪,我很好奇到底怎么样按压快门,如果说需要做一个模具,然后来按压快门,好像超出了这个任务的价值,但是如果只是驱动舵机,和前面测光的又没有什么关系。虽然蓝牙这一块和测光也没什么关系,也没有说怎么远程连接,很明显不会是做一个安卓或者ios程序。我就智能想到目前这个办法了)

5、遇到的问题

5.1使用arduino的Servo很容易就驱动好舵机了,但是ESP32不兼容

5.2 ledcSetup 和 ledcAttachPin 这两个驱动LED灯的PWM也不能用

5.3 以为是电压的问题,使用Arudino UNO板供电,是4.6V,换了电脑电源是5.03V还是失败。

5.4 接线说明

黄线 ESP32 PIN15
红线 5V电源 
粽线 GND ESP32 GND

(我一直没搞懂,这个板子是3.3v的,舵机是5V的,出题的老师是怎么想的在这种地方设置难度)

看下面的代码

#include <WiFi.h>
#include <WebServer.h>

const char* ssid = "CMCC-NxAn";
const char* password = "mhcsm2m4";

const int servoPin = 15;  // 舵机信号线连接到引脚 15

WebServer server(80); // 创建 Web 服务器对象

// 设置舵机角度的函数
void setServoAngle() {
  // Move servo to 0 degrees
  analogWrite(servoPin, 0);  // 0 degrees (or equivalent pulse width)
  delay(1000);

  // Move servo to 180 degrees
  analogWrite(servoPin, 180);  // 180 degrees (or equivalent pulse width)
  delay(1000);

  // Move servo using microsecond pulse width (example)
  analogWrite(servoPin, 600);  // 600 microseconds
  delay(1000);
  analogWrite(servoPin, 2400);  // 2400 microseconds
  delay(1000);

  // Detach (stop sending pulses)
  analogWrite(servoPin, 4000);  // >=4000 to detach
  delay(1000);
}

void setup() {
  Serial.begin(115200);
 
  // 连接 Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi...");
  }
  Serial.println("Connected to WiFi");
  Serial.print("IP Address: ");
  Serial.println(WiFi.localIP());

  pinMode(servoPin, OUTPUT); // 设置舵机引脚为输出模式

  // 设置网页服务
  server.on("/", HTTP_GET, [](){
    Serial.println("Received request for root page");
    String html = "<html><head><style>"
                  "body { margin: 0; height: 100vh; display: flex; justify-content: center; align-items: center; }"
                  "button { width: 100%; height: 100%; font-size: 24px; }"
                  "</style></head><body>"
                  "<button onclick=\"fetch('/snap')\">Press the camera shutter button</button>"
                  "</body></html>";
    server.send(200, "text/html", html);
  });

  // 处理按钮按下请求
  server.on("/snap", HTTP_GET, [](){
    Serial.println("Snap button pressed"); // 请求被接收
    setServoAngle(); // 驱动舵机
    server.send(200, "text/plain", "Shutter pressed"); // 英文响应
    Serial.println("Servo angle set to 90 degrees");
  });

  server.begin(); // 启动服务器
  Serial.println("Server started");
}

void loop() {
  server.handleClient(); // 处理客户端请求
}

上面的代码使用乐鑫官方库,构建一个Web服务器,手机浏览器地址栏输入ESP32 获取到的wifi地址,点击”Press the camera shutter button“

就可以驱动舵机按下相机快门了。
注意事项
1、当前逻辑由于没有外网ip,所以你必须要手机和ESP32 在一个局域网内。
2、ESP32 是SAT模式,连接到路由器,要注意路由器必须开启DHCP供ESP32获取IP,不然的就就要设置固定IP。
3、仅支持IPv4,仅IPv6的网络环境无法使用(这种情况目前概率为0)




关键词: 进阶     任务     手机     远程控制     舵机    

专家
2024-11-03 13:05:22     打赏
2楼

看看


助工
2024-11-03 16:24:38     打赏
3楼

老手啊,平时玩乐鑫的方案比较多吧


专家
2024-11-03 20:21:13     打赏
4楼

感谢分享


专家
2024-11-04 09:44:50     打赏
5楼

这么快?我的元件还没到手!谢谢分享!


工程师
2024-11-05 10:12:02     打赏
6楼

看看 


共6条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]