任务完成办法
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)